Segmentação e Protecção em processadores Intel
Transcript of Segmentação e Protecção em processadores Intel
Programação de Sistemas
Segmentação e Protecção de memória nos µP Intel
Programação de Sistemas Segmentação e Protecção : 1/49
Introdução (1)
Lista dos processadores de uso geral da Intel
• 4004: Nov 1971, 4 bits, primeiro µP– Desenvolvido para linha de calculadoras da
Busicom (Japão)– Relógio a ... 740KHz, executa 92K instruções/seg– Relógio a ... 740KHz, executa 92K instruções/seg
• 8080: Abr 1974, 8 bits• Relógio 2 MHz, executa 500K instruções/seg• 8085, compatível, exigia menos HW• Z80, da Zilog, adoptado por fabricantes de microcomputadores por ser
binariamente compatível e poder ser fabricado sem pagamento de direitos.
Programação de Sistemas Segmentação e Protecção : 2/49
Introdução (2)
• Arquitectura IA-161978: 8086-29K transistores, 0.33 MIPS endereça 1MB1982: 80286-134K transistores (MMU incorporado), 0.9 MIPS endereça
16MB de memória
• Arquitectura IA-321985: 80386-275K transistores,5 MIPS endereça 4GB de memória
1989: 80486-1.2M transistores (FPU incorporado), 50 MIPS
Programação de Sistemas Segmentação e Protecção : 3/49
Introdução (3)
1993: Pentium-3.1M transistores, 60 MIPS [introduz SIMD instruções em registos de 64 bits]
1997: Pentium II- 9.5M transistores, 300 MIPS1999: Pentium III-9.5M transistores, 500 MIPS [introduz Streaming SIMD
instruções em registos de 128 bits]2000: Pentium 4-42M transistores, 1500 MIPS endereça 64GB de memória
• Arquitectura IA-642006: Core 2-151M transistores,
20_000 MIPS
Programação de Sistemas Segmentação e Protecção : 4/49
Dissipador de calor
Introdução (4)
• Fabricantes seguiram abordagens distintas na passagem de 32 bits para 64 bits:– Intel associou-se à HP para desenvolver processador Itanium
dedicado a servidores e a estações de trabalho de elevado desempenho. O processador emulava o IA-32, mas com significativa degradação no desempenho.significativa degradação no desempenho.
– Advanced Micro Devices desenvolveu AMD64, estendendo oIA-32 para16 registos de uso geral de 64 bits.
• Vendas do AMD64 muito superiores levaram a Intel a adoptar a arquitectura AMD64, sob a designação EM64T.
Informação complementar do IA32 e IA64 disponível em http://developer.intel.com/products/processor/manuals
Programação de Sistemas Segmentação e Protecção : 5/49
Introdução (5)
• Um µP da Intel pode correr em 5 modos de operação:– Modo Real : único existente no 8086.
– Modo Protegido : actualmente o mais usado.
– Modo Virtual 8086 : executa programas compatíveis com 8086, concorrencialmente com programas em modo protegido.
– Modo Memória extendida para 64 bits:• Modo compatível – executa código 32 bits na máquina de 64-bits
sem recompilação (não acede ao espaço de 64 bits).
• Modo 64 bits – acesso a registos de 64 bits e espaço de endereçamento de 64 bits.
– Modo Gestão de sistema.
Programação de Sistemas Segmentação e Protecção : 6/49
Registos IA-32 (1)
• Pentium possui elevado número de registos.
Programação de Sistemas Segmentação e Protecção : 7/49
Para multimedia
Registos IA-32 (2)
A. Uso geral – 32 bits
Programação de Sistemas Segmentação e Protecção : 8/49
Registos IA-32 (3)
B. Bandeiras (“flags”) – 32 bits
Programação de Sistemas Segmentação e Protecção : 9/49
Figura 2-3, Intel Architecture Software Developer’s Manual Vol 3
Registos IA-32 (4)
C. Tabelas descritores(para modo protegido)
Programação de Sistemas Segmentação e Protecção : 10/49
Registos IA-64 (1)
• Os registos de uso geral dependem do modo de operação– Compatível IA-32
• 8 registos iguais aos IA-32: EAX-EDX, EDI, ESI, EBP, ESP
• 8 registos extra: R8D-R15D
– 64 bits• 8 registos iguais aos IA-32, mas com prefixo R: RAX-RDX,
RDI,RSI, RBP, RSP
• 8 registos extra: R8-R15
• Todos os registos podem ser acedidos a nível de– Byte
– Word
– Double
– Quad (só em modo compatível 64-bit)Programação de Sistemas Segmentação e Protecção : 11/49
Registos IA-64 (2)
Tipo registo Modo compatível IA-32 Modo 64-bit
Byte AL,BL,CL,DL,
AH, BH, CH, DH
AL,BL,CL,DL,
DIL,SIL,
BPL,SPL,
R8L-R15L
Word AX, BX, CX, DX,
DI, SI,
AX, BX, CX, DX,
DI, SI,
Programação de Sistemas Segmentação e Protecção : 12/49
WordDI, SI,
BP, SP
DI, SI,
BP, SP,
R8W-R15W
Double EAX, EBX, ECX, EDX,
EDI, ESI,
EBP, SP
EAX, EBX, ECX, EDX,
EDI, ESI,
EBP, ESP,
R8D-R15D
Quad -- RAX, RBX ,RCX, RDX,
RDI, RSI,
RBP, RSP,
R8-R15
Segmentação (1)
• A segmentação tem em vista a resolução de problemas– incremento do espaço de endereçamento, e
– protecção de memória.
A. Espaço de endereçamentoA. Espaço de endereçamento– A Intel foi a primeira a disponibilizar um µP de 16 bits, o 8086.
Apesar de tecnologicamente inferior ao Motorola 68000, a entrada inicial permitiu assegurar maior quota de mercado.
– 16 bits endereçam 64KB, demasiadamente pequeno paraprogramas de grande dimensão. A segmentação permitiu alargarendereçamento para 1MB.
Programação de Sistemas Segmentação e Protecção : 13/49
Segmentação (2)
B. Protecção de memória– A memória virtual pagimentada tem apenas 1 dimensão (entre 0 e
limite máximo).
– Existem aplicações que trabalham em várias dimensões.Ex: um compilador existem diversões partes lógicas, que nãopodem ser sobrepostas.podem ser sobrepostas.• Árvore de derivação (“parsing”)
• Tabela de símbolos
• Código
• Pilha de execução
Programação de Sistemas Segmentação e Protecção : 14/49
Segmentação (3)
Comparação entre paginação e segmentação
Programação de Sistemas Segmentação e Protecção : 15/49Figura 4-37, Modern Operating Systems
Gestão memória IA-16 (1)
• O 8086/8 foi o primeiro processador da Intel a 16 bits (diferença reside na dimensão do bus: 16 bits no 8086 e 8 bits no 8088)
• O 8086/8 possui 4 registos de segmento, cada um base de uma zona de 64KB.uma zona de 64KB.– CS (“Code Segment”), para endereçar código
– DS (“Data Segment”), para endereçar variáveis globais
– SS (“Stack Segment”), para endereçar piha, incluindo variáveis locais àsrotinas
– ES (“Extra Segment”)
• Segmentos podem ser torneadosindicando explicitamente o segmento(ex: MOV AX,ES:var)
Programação de Sistemas Segmentação e Protecção : 16/49
64KB
CS
Gestão memória IA-16 (2)
• Espaço físico é de 1MB.• Como 16 bits apenas endereçam 64KB, como fazer?
Resposta: o endereço físico é calculado por1. Deslocar segmento 4bits para a esquerda2. Somar endereçoNota: paginação substitui bits do prefixo, segmentação soma bits do Nota: paginação substitui bits do prefixo, segmentação soma bits do
prefixoEx1: para DS=0x0365, o endereço linear 0x42f corresponde ao endereço
físico 0x03650+0x42f=0x03a7f
Programação de Sistemas Segmentação e Protecção : 17/49
Ex2: a instrução a executar encontra-se no endereço CS:IP, o push enviadado para o endereço SS:SP
0 3 6 5DS 0
0 4 2 f
0 3 a 7 f
endereço linear
endereço físico
Gestão memória IA-16 (3)
• O valor dos segmentos CS,DS e SS determinam o modelo do programa.– Largo (“large”):
CS, DS e SS distintos
Codesegment
Stacksegment
0xfffff
Programação de Sistemas Segmentação e Protecção : 18/49
CS, DS e SS distintos
– Médio (“medium”):DS=SS, CS distinto
– Pequeno (“small”): CS=DS=SSExtrasegment
Datasegment
0x00000
Nota: o endereçamento puramente segmentado disponibilizado peloPentium e Core 2 em modo real.
Gestão memória IA-16 (4)
• Multiprocessamento implementado por segmentos com valores distintos em cada processo.
Processo 1
0xfffff
Codesegment
Codesegment
Programação de Sistemas Segmentação e Protecção : 19/49
cada processo.
Processo 20x00000
• No IA-16, espera-se que o programa não aceda a endereçosinexistentes. Se o fizer, lê dado erróneo ou “crasha”.
• Aumento de segurança exige mais dados que o endereço base dos segmentos. Sendo os registos escassos, torna-se necessário instalarinformação na memória central: o IA-32 usa tabela de descritores.
Gestão memória IA-32 (1)
A gestão de memória do IA-32 é distinta do IA-16, maispoderosa e complexa.
A. Selectores
• Os registos CS,… (mais FS e GS) passaram a designar-se por selectores (da tabela de descritores).
Programação de SistemasFigura 4-43, Modern Operating Systems
por selectores (da tabela de descritores).
• Os 16 bits dos selectores são divididos em 3 campos:– RPL (2 bits): indica o nível de privilégio (CPL).
– TI (1 bit): indica tabela de descritores , local-LDT ou global-GDT.
– Index (13 bits): indexa o descritor na tabela determinada pelo campo TI.
Nota: Em todos os processo, CS, DSe SS têem de estar carregadoscom selectores válidos.
Segmentação e Protecção : 20/49
Gestão memória IA-32 (2)
B. Tabela de descritores
• 80386+ possuem três tipos de tabelas de descritores, residentes em memória.Cada tabela contém até 8K descritores, cada um designadopor descritor de segmento.por descritor de segmento.– GDT (“Global Descriptor Table”), obrigatório e partilhado por
todos os programas.
– LDT (“Local Descriptor Table”), opcional e descreve ossegmentos locais a cada programa (código, dados, pilha).
– IDT (“Interrupt Descriptor Table”), para serviços de sistemaacedidos pela instrução INT.
Nota: Linux apenas usa o GDT. Os LDTs são alocados para emulação do Windows.
Programação de Sistemas Segmentação e Protecção : 21/49
Gestão memória IA-32 (3)
C. Registos base
• As tabelas GDT, LDT e IDT são referenciadas pelosregistos GDTR, LDTR e IDTR.– GDTR e IDTR - 48 bits:
• 16 bits menos significativos determinam a dimensão da tabela.• 16 bits menos significativos determinam a dimensão da tabela.
• 32 bits mais significativos determinam o endereço base da tabela.
– LDTR: selector de 16 bits, indexa na tabela do GDT o LDT corrente.
Programação de Sistemas Segmentação e Protecção : 22/49
Descritores de segmentos IA-32 (1)
• A tabela GDT possuem dois tipos de descritores desegmentos.– Code Segment Descriptor ou Data Segment Descriptor.
Nota: a pilha é implementada por um Data Segment Descriptor.
– System Descriptor, subdividido em dois subtipos:– System Descriptor, subdividido em dois subtipos:• System Segment Descriptor: referenciam segmentos do sistema
(LDT e TSS)
• Gate Descriptor : referenciam pontos de entrada em rotinas.
• Por compatibilidade entre SOs, o primeiro descritor doGDT não é usado.
Programação de Sistemas Segmentação e Protecção : 23/49
Descritores de segmentos IA-32 (2)
• Cada descritor ocupa 8B, com o seguinte formato
Programação de Sistemas Segmentação e Protecção : 24/49
Figura 4-44, Modern Operating Systems
Descritores de segmentos IA-32 (3)
• Tipo de descritores descriminado pelo bit S– S=1 para aplicação (código e dados/pilha)
• Type: Executable (0-data,1-code), Expansion (0-up,1-down), Access (0-read only, 1-read/write)
– S=0 para sistema• 0010 - LDT• 0010 - LDT
• 1001 – porta de processo (“task”)
• 1011 – porta de processo
• 1100 – porta de entrada de rotina
• 1110 – porta de interrupção
Nota: 1011 evita processo entrar nele próprio
Programação de Sistemas Segmentação e Protecção : 25/49
Descritores de segmentos IA-32 (4)
Programação de Sistemas Segmentação e Protecção : 26/49
Figura 3-10, Intel Architecture Software Developer’s Manual Vol 3
Descritores de segmentos IA-32 (5)
1. Code Segment Descritor/Data Segment Descriptor.– Endereço base do segmento de 32B (virtual, ou físico,
dependendo do valor do bit PG do registo de controlo cr0).O endereço linear é calculado somando o endereço base, indicadopelo descritor (32B), com o deslocamento (32B).Nota: para apressar os cálculos, o CPU contém uma TLB com osNota: para apressar os cálculos, o CPU contém uma TLB com osdescritos usados mais recentemente.
Programação de SistemasFigura 4-45, Modern Operating Systems
Segmentação e Protecção : 27/49
Descritores de segmentos IA-32 (6)
• Se soma ultrapassaro limite indicadono descritor égerada umainterrupção. Assimsão garantidas duas
Programação de Sistemas Segmentação e Protecção : 28/49
são garantidas duasprotecções:
– Intraprocesso (códigonão executa dados oupilha)
– Interprocesso (processonão executa código de outro processo)
Figura 3-1, Intel Architecture Software Developer’s Manual Vol 3
Descritores de segmentos IA-32 (7)
2. Task State Segment Descriptor.• O índice da tabela de descritores, onde se encontra armazenado o
TSS-Task State Segment Descriptor, é armazendo no registoTR-Task Segment Register – 16 bits.
TSS = End. base tabela
Programação de Sistemas Segmentação e Protecção : 29/49
TSS = End. base tabela+ TR*8
Descritores de segmentos IA-32 (8)
• O TSS é acedido a partir do descritor do TSS.
Programação de Sistemas Segmentação e Protecção : 30/49
Descritores de segmentos IA-32 (9)
• O TSS, na realidade o PCB-Process Control Block, ocupa 26 quadwords com os seguintes campos:– Conteúdo dos selectores (CS,DS,SS,ES,FS e GS)
– Conteúdo dos registos de uso geral (EAX,EBX,ECX,EDX, ESP,EBP, ESI,EDI)
– Conteúdo do registo de bandeiras EIFLAGS– Conteúdo do registo de bandeiras EIFLAGS
– Conteúdo do EIP
– Conteúdo do LDTR (ponteiro para tabelas LDT)
– Conteúdo do IDTR (ponteiro para tabela de interrupções)
– Ponteiro para o descritor Call Gate
– Ponteiro para processo previamente executado
– …
Programação de Sistemas Segmentação e Protecção : 31/49
Descritores de segmentos IA-32 (10)
link
esp0ss0
esp1ss1
esp2ss2
PTDBEIP
ss0 ss0ss0 ss0
EFLAGSEAX
0
4
8
12
16
20
24
28
32
36
4026 longwords
32-bits
Programação de Sistemas
ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0ss0 ss0
ESCSSSDSFSGS
LDTRIOMAP TRAP
EAXECXEDXEBXESPEBPESIEDI
I/O permission bitmap
= campo ‘estático’
= campo ‘volátil’
= campo ‘reservado’
40
44
48
52
56
60
64
68
72
76
80
84
88
92
96
100
26 longwords
Segmentação e Protecção : 32/49
Descritores de segmentos IA-32 (11)
• Os segmentos definidos no TSS cobrem todo o espaço necessário à execução do mesmo.– Selectores de segmentos (CS,DS,SS e restantes).
– Ponteiros para pilhas de nível 0,1 e 2.
Programação de Sistemas Segmentação e Protecção : 33/49
GDT do Linux (1)
• No Linux, cada processador mantém uma GDT com– 18 descritores de segmentos
• 4 Descritores de código e de dados para código de utilizador e núcleo
• 1 Descritor TSS
• 1 Descritor TSS especial “double fault”
• 1 Descritor Local, usado por todos os processos
• 3 TLS - Thread Local Storage (para dados locais a cada thread, emaplicações multithreaded)
• 3 APM - Advanced Power Management
• 5 PnP - Plug and Play
– 14 entradas nulas, ou reservadas.
Programação de Sistemas Segmentação e Protecção : 34/49
GDT do Linux (2)
Programação de Sistemas Segmentação e Protecção : 35/49
Registos de controlo IA-32 (1)
• Registos de controlo do modo no IA-32 (32 bits)– cr0 (controlo das operações básicas)
– cr1 (reservado)
– cr2 (endereço linear da última página em falta)
– cr3 (endereço base do directório)
– cr4 (activar mecanismos avançados)– cr4 (activar mecanismos avançados)
• Flags do cr0• PG (bit 31) paginação:
Nota 1: Se PG=1, o endereço é virtual e o segmento é dividido em páginas. : Se PG=0, o endereço é físico.Nota 2: cr2 e cr3 válidos apenas se PG=1
• CD (bit 30) cache inibida.
• WP (bit 16) escrita protegida.• EM (bit 2) unidade processamento vírgula flutuante (FPU) ausente.
• PE (bit 0) modo protegido.
Programação de Sistemas Segmentação e Protecção : 36/49
Segmentação
Registos de controlo IA-32 (2)
• Enquanto a paginação pode ser suspensa, a segmentaçãonão pode (devido à necessidade de garantia de protecção).
Endereço Lógico
Endereço Linear
Programação de Sistemas
Page-directory base-address
1231
0
34PCD
PWT 0
PCD=Page Cache-Disable PWT=Page Write ThroughSegmentação e Protecção : 37/49
• cr3 contém o endereço base do directório (PDBR): 20 bits
Endereço Linear
Endereço Físico
Paginação
Protecção (1)
• O 80386+ suporta 4 níveis de protecção, entre 0 (maior privilégio) e 3 (menor privilégio).
• O Linux usa apenas os• O Linux usa apenas osníveis– 0 para o núcleo, e
– 3 para utilizador
Programação de Sistemas
Figura 4-47, Modern Operating Systems
Segmentação e Protecção : 38/49
Protecção (2)
• O nível de protecção é indicado no campo RPL do selector.– Cada processo pode aceder a dados ou chamar rotinas de níveis
superiores (menos privilegiados).– Tentativas de acessos ilegais a níveis mais privilegiados geram
TRAP.TRAP.
• Algumas instruções (ex: carregamento do registo cr3) apenas pode ser executadas no nível 0.
Programação de Sistemas Segmentação e Protecção : 39/49
Protecção (3)
Espaço núcleo (anel 0)TSS
GDT
GDTR
TR
Programação de Sistemas
Espaço núcleo (anel 0)
TEXT
DATA
BSS
heap
STACKshared runtime library
ProcessoCS
DS
SSSP
IPCriado na compilação
Instruções (espaço persistente)
Dados inicializados (espaço persistente)
Dados não inicializados (espaço persistente)
Criado durante execução
Espaço utilizador (anel 3)
Dados locais (espaço transitório)
Segmentação e Protecção : 40/49
Protecção (4)
[Problema] Como o processo de utilizador pode chamar umarotina de nível mais privilegiado?
• Para chamar rotina de nível mais privilegiado, o CALL indica um descritor específico, designado por call gate,que recolhe o endereço de outro descritor de código.indica um descritor específico, designado por call gate,que recolhe o endereço de outro descritor de código.Vantagens:– O utilizador não pode entrar no meio de uma chamada de sistema.– Garante que as verificações de segurança, executadas no início da
rotina, não sejam torneadas por a rotina chamadora entrar mais à frente na rotina chamada.
Programação de Sistemas Segmentação e Protecção : 41/49
Protecção (5)
• O descritor do call gate contém 6 elementos:– descritor de código da rotina alvo,– ponto de entrada da rotina alvo,– nível de privilégio que a rotina chamadora necessita de ter para poder entrar,– se a rotina alvo exigir substituição de pilha, indica o número de parâmetros a
copiar da rotina chamadora para a rotina chamada,– dimensão dos parâmetros a carregar na pilha da rotina chamada (16-bit ou 32-bit),– dimensão dos parâmetros a carregar na pilha da rotina chamada (16-bit ou 32-bit),– validade do descritor call-gate.
Programação de Sistemas Segmentação e Protecção : 42/49
Figura 4-7, Intel Architecture Software Developer’s Manual Vol 3
Protecção (6)
• O endereço do ponto de entrada da rotina chamada não é acedido directamente pela rotina chamadora!O endereço do ponto de entrada é igual ao deslocamentoindicado no descritor call-gate mais o endereço base indicado pelo selector do segmento.
Programação de Sistemas Segmentação e Protecção : 43/49Figura 4-8, Intel Architecture Software Developer’s Manual Vol 3
• Descritores envolvidos numa chamada a uma rotina de nível mais privilegiado
Protecção (7)
TASK
STATE
SEGMENT
Stack pointerparams
call-instructionCS:IP
code-segment
code-segment
called procedure
Programação de Sistemas
STACK
SEGMENT
Stack pointer
STACK
SEGMENT
params
params
Global Descriptor Table
gate-descriptor
TSS-descriptor TR
GDTR
Segmentação e Protecção : 44/49
Rotina chamadora
Rotina chamada
Protecção (8)
• Existem 4 instruções que provocam a mudança de tarefa:– Salto longo, sem retorno para um descritor TSS instalado no GDTljmp $task_selector, 0
– Chamada longa , para mais tarde retornar, para um descritor TSS instalado no GDT lcall $task_selector, 0lcall $task_selector, 0
– TRAP (por task-gate)int 0x80
Nota: código da função de sistema indicada no registo EAX
– A tarefa corrente retorna de interrupção (bit NT de EPLAGS a 1)iret
Programação de Sistemas Segmentação e Protecção : 45/49
Interrupções (1)
• A tabela IDT-”Interrupt Descriptor Table”, residente num segmento de memória dedicado, contém ponteiros para tratamento de interrupções.interrupções.
• O endereço base da IDT é identificado pelo registo IDTR, de 48 bits.
Programação de Sistemas
NOTA: Instruções de escrita e leitura do IDTR (sidt, lidt) e do GDTR (sgdt, lgdt) apenas podem ser executadas no anel de nível 0.
Segmentação e Protecção : 46/49
Figura 5-1, Intel Architecture Software Developer’s Manual Vol 3
Interrupções (2)
• Tal como no GDT, existem vários tipos descritores de interrupções designados por portas (gates):– Task gate (ISR tratada como comutação de processo – necessário
em caso de falha de pilha quando CPL=0, ou “double fault”).– Interrupt gate (ISR tratada como chamada normal a rotina e utiliza
a pilha do processo interrompido para EIP e CS)a pilha do processo interrompido para EIP e CS)– Trap gate.
• A única diferença entre o Trap gate e o Interrupt gate é o CPU limpar, ou não limpar, o bit IF do registo EFLAGS.A diferença é necessária quando a rotina de serviço dainterrupção (ISR) é executado fora do nível de protecção0-não podendo executar as instruções cli ou sti.
Programação de Sistemas Segmentação e Protecção : 47/49
Interrupções (3)
• O interrupt-gate é muito semelhante ao call-gate.
• O endereço ISR é igual ao deslocamento indicado no descritor interrupt-gate mais o endereço base indicadopelo selector de segmento.
Programação de Sistemas Segmentação e Protecção : 48/49
Figura 5-2, Intel Architecture Software Developer’s Manual Vol 3
Interrupções (4)
Interrupt-gate
Interrupt DescriptorTable (256 entradas) ISR
code-segment
Programação de Sistemas
GDTR
IDTR
code-descriptor
Global Descriptor Table
INT ID
Segmentação e Protecção : 49/49