• Nenhum resultado encontrado

Programação de Sistemas

N/A
N/A
Protected

Academic year: 2021

Share "Programação de Sistemas"

Copied!
49
0
0

Texto

(1)

Programação de Sistemas

Segmentação e Protecção de

memória nos µP Intel

(2)

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

(3)

Introdução (2)

• Arquitectura IA-16

1978: 8086-29K transistores, 0.33 MIPS endereça 1MB

1982: 80286-134K transistores (MMU incorporado), 0.9 MIPS endereça 16MB de memória

• Arquitectura IA-32

1985: 80386-275K transistores, 5 MIPS endereça 4GB de memória

(4)

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 MIPS

1999: 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-64

2006: Core 2-151M transistores, 20_000 MIPS

(5)

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 o

IA-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

(6)

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.

(7)

Registos IA-32 (1)

Pentium possui

elevado número de

registos.

(8)

Registos IA-32 (2)

(9)

Registos IA-32 (3)

B. Bandeiras (“flags”) – 32 bits

(10)

Registos IA-32 (4)

C. Tabelas descritores

(11)

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

(12)

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,

Word

DI, 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

(13)

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çamento

A. 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 para

programas de grande dimensão. A segmentação permitiu alargar

endereçamento para 1MB.

(14)

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ão

podem ser sobrepostas.

podem ser sobrepostas.

• Árvore de derivação (“parsing”) • Tabela de símbolos

• Código

(15)

Segmentação (3)

Comparação entre paginação e segmentação

(16)

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 às rotinas

– ES (“Extra Segment”)

Segmentos podem ser torneados

indicando explicitamente o segmento

(ex: MOV AX,ES:var)

64KB

CS

(17)

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 por

1. Deslocar segmento 4bits para a esquerda

2. Somar endereço

Nota

: paginação substitui bits do prefixo, segmentação soma bits do

Nota

: paginação substitui bits do prefixo, segmentação soma bits do

prefixo

Ex1: para DS=0x0365, o endereço linear 0x42f corresponde ao endereço

físico 0x03650+0x42f=0x03a7f

Ex2: a instrução a executar encontra-se no endereço CS:IP, o push envia

dado para o endereço SS:SP

0 3 6 5

DS

0

0 4 2 f

0 3 a 7 f

endereço linear endereço físico

(18)

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

Code segment Stack segment 0xfffff

CS, DS e SS distintos

– Médio (“medium”):

DS=SS, CS distinto

– Pequeno (“small”): CS=DS=SS

Extra segment Data segment 0x00000

Nota

: o endereçamento puramente segmentado disponibilizado pelo

Pentium e Core 2 em modo real.

(19)

Gestão memória IA-16 (4)

• Multiprocessamento

implementado por

segmentos com

valores distintos em

cada processo.

Processo 1

0xfffff Code segment Code segment

cada processo.

Processo 2

0x00000

• No IA-16, espera-se que o programa não aceda a endereços

inexistentes. 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 instalar

informação na memória central: o IA-32 usa tabela de descritores.

(20)

Gestão memória IA-32 (1)

A gestão de memória do IA-32 é distinta do IA-16, mais

poderosa e complexa.

A. Selectores

• Os registos CS,… (mais FS e GS) passaram a designar-se

por selectores (da tabela de descritores).

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, DS

e SS têem de estar carregados

com selectores válidos.

(21)

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 designado

por 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 os

segmentos locais a cada programa (código, dados, pilha).

– IDT (“Interrupt Descriptor Table”), para serviços de sistema

acedidos pela instrução INT.

Nota

: Linux apenas usa o GDT. Os LDTs são alocados para emulação do

Windows.

(22)

Gestão memória IA-32 (3)

C. Registos base

• As tabelas GDT, LDT e IDT são referenciadas pelos

registos 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.

(23)

Descritores de segmentos IA-32 (1)

• A tabela GDT possuem dois tipos de descritores de

segmentos.

– 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 do

GDT não é usado.

(24)

Descritores de segmentos IA-32 (2)

Cada descritor ocupa 8B, com o seguinte formato

(25)

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

(26)

Descritores de segmentos IA-32 (4)

(27)

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, indicado

pelo

descritor

(32B),

com

o

deslocamento

(32B).

Nota

: para apressar os cálculos, o CPU contém uma TLB com os

Nota

: para apressar os cálculos, o CPU contém uma TLB com os

descritos usados mais recentemente.

(28)

Descritores de segmentos IA-32 (6)

• Se soma ultrapassar

o limite indicado

no

descritor

é

gerada

uma

interrupção. Assim

são garantidas duas

são garantidas duas

protecções:

– Intraprocesso (código não executa dados ou pilha)

– Interprocesso (processo não executa código de outro processo)

(29)

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 registo

TR-Task Segment Register – 16 bits.

TSS = End. base tabela

TSS = End. base tabela

(30)

Descritores de segmentos IA-32 (8)

(31)

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 – …

(32)

Descritores de segmentos IA-32 (10)

link esp0 ss0 esp1 ss1 esp2 ss2 PTDB EIP ss0 ss0 ss0 ss0 EFLAGS EAX 0 4 8 12 16 20 24 28 32 36 40 26 longwords 32-bits ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ss0 ES CS SS DS FS GS LDTR IOMAP TRAP EAX ECX EDX EBX ESP EBP ESI EDI

= 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

(33)

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.

(34)

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, em aplicações multithreaded)

• 3 APM - Advanced Power Management • 5 PnP - Plug and Play

(35)
(36)

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.

(37)

Segmentação

Registos de controlo IA-32 (2)

• Enquanto a paginação pode ser suspensa, a segmentação

não pode (devido à necessidade de garantia de protecção).

Endereço Lógico

Endereço Linear

Page-directory base-address

12 31

0

3 4 P C D P W T

0

PCD=Page Cache-Disable PWT=Page Write Through

• cr3

contém o endereço base do directório (PDBR): 20 bits

Endereço Linear

Endereço Físico

(38)

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 os

níveis

– 0 para o núcleo, e

– 3 para utilizador

(39)

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.

(40)

Protecção (3)

Espaço núcleo (anel 0)

TSS

GDT

GDTR TR

Espaço núcleo (anel 0)

TEXT

DATA

BSS

heap

STACK

shared runtime library

Processo

CS

DS

SS

SP

IP

Criado 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)

(41)

Protecção (4)

[Problema] Como o processo de utilizador pode chamar uma

rotina 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.

(42)

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.

(43)

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 deslocamento

indicado no descritor call-gate mais o endereço base

indicado pelo selector do segmento.

(44)

• Descritores envolvidos numa chamada a uma rotina de

nível mais privilegiado

Protecção (7)

TASK STATE SEGMENT

Stack pointer params

call-instruction CS:IP code-segment code-segment called procedure STACK SEGMENT Stack pointer STACK SEGMENT params params gate-descriptor TSS-descriptor TR GDTR Rotina chamadora Rotina chamada

(45)

Protecção (8)

• Existem 4 instruções que provocam a mudança de tarefa:

– Salto longo, sem retorno para um descritor TSS instalado no GDT

ljmp

$task_selector, 0

– Chamada longa , para mais tarde retornar, para um descritor TSS

instalado no GDT

lcall

$task_selector, 0

lcall

$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

(46)

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.

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.

(47)

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 da

interrupção (ISR) é executado fora do nível de protecção

0-não podendo executar as instruções cli ou sti.

(48)

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 indicado

pelo selector de segmento.

(49)

Interrupções (4)

Interrupt-gate

Interrupt Descriptor

Table (256 entradas)

ISR

code-segment

GDTR

IDTR

code-descriptor

Global Descriptor Table

Referências

Documentos relacionados

Este estudo, que tem como objetivo a investigação do imaginário de estudantes de Psicologia sobre o primeiro atendimento clínico, insere-se num

(Parábola do semeador). André Luiz; “Faça o mesmo” mens. 23, In: Sementeira de Fraternidade, Divaldo P. Joanna de Angelis; “Observa teu comportamento” mens. 30, In:

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

occurring in more than just enterprise and technology companies (2002: US – 83% / Europe – 47%).. • In the UK, France and Germany

- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar

O software PcModel pode ser uma ferramenta bastante útil, quando aplicado na previsão e estimativa do cálculo de energia envolvendo as conformações mais e menos estáveis do

Note on the occurrence of the crebeater seal, Lobodon carcinophagus (Hombron & Jacquinot, 1842) (Mammalia: Pinnipedia), in Rio de Janeiro State, Brazil.. On May 12, 2003,

A participação foi observada durante todas as fases do roadmap (Alinhamento, Prova de Conceito, Piloto e Expansão), promovendo a utilização do sistema implementado e a