Interface Hardware-Software
Modo Protegido de Operação de
Processadores x86 – Introdução
Arquitetura IA-32
A arquitetura IA-32 lançada com o 80386 possibilitou um espaço de endereçamento maior
Registradores de 32 bits
Endereços de 32 bits, espaço endereçável de 232 Bytes ou
4GB
Mas, maior contribuição foi dar suporte a um ambiente sofisticado de multiprogramação
Modo Protegido - Vantagens
Permite um aproveitamento maior dos recursos de HW
Possibilita vários programas rodando simultaneamente
Inclui suporte a multi-tarefas
Proteção
Diferentes programas não devem interferir um no outro Níveis de privilégios para diferentes classes de programa
Gerenciamento mais eficiente da memória
Proteção - Vantagens
Aplicações mais robustas
Confinamento de danos provocados por códigos mal escritos (acidentalmente)
Confinamento de danos provocados por códigos mal intencionados
Mudanças na Arquitetura
Registradores de propósito geral de 32 bits
Novos registradores de propósito específico
Registradores de controle (CR0-CR4) Registradores de depuração (DR0-DR7)
Registradores associados a segmentos (GDTR,LDTR,IDTR,TR)
Modificação da implementação de algumas instruções
Principalmente instruções de desvio de fluxo de controle
Registradores de Controle
Determina o modo de operação e características da tarefa que está executando no processador
Registrador CR0
Determina o modo de operação e estado do processador
- PE (Protection Enabled) – 0, modo real, 1, modo protegido - TS (Task Switch) – 0, não houve troca de tarefa, 1, houve
troca de tarefa
- CD (Cache Disable)- 0, permite escrita na cache, 1, desabilita
escrita na cache
- PG (Paging) – 0, desabilita paginação, 1, habilita paginação
Registrador CR2
Guarda o endereço linear (virtual) de 32 bits que causou a última falta de página
Registrador CR3
Determina o endereço base da tabela de páginas de mais alto nível (diretório de tabelas de páginas)
- PCD (Page-level Cache Disable) – 0, tabela não pode ser
armazenada na cache , 1, tabela pode ser armazenada na cache
- PWT (Page-level Write-Through) – 0, tabela é modificada
usando mecanismo de write-back , 1, utiliza mecanismo de write-through
Somente 20 bits mais significativos do endereço base do diretório precisam ser especificados
Registrador CR4
Contém flags que possibilitam uma série de extensões de arquitetura (acrescentadas em novas versões)
- PSE (Page Size Extensions) – 0, páginas de 4KB, 1, permite
páginas de 4MB
- PAE (Physical Address Extensions) – 0, endereços físicos de
Segmentação em Modo Protegido
Uma das maiores diferenças entre modo real e modo protegido é o mecanismo de segmentação de código e dados
Um registrador de segmento em modo protegido contém um índice de uma tabela de (descritores de) segmentos que aponta para o endereço inicial do segmento
Registradores de segmento armazenam seletores de segmentos
Registradores de Segmentos (Modo Real)
CS SS DS ES FS GS Memória Segmento de código Segmento de pilha Segmento de dadosRegistradores de Segmentos (Protegido)
CS SS DS ES FS GS Memória Segmento de código Segmento de pilha Segmento de dados Tabela de Segmentos Seletor Seletor Seletor Descritor Descritor Descritor É possível acessar até 8192 entradas da tabela de segmentos
- TI indica que tipo de tabela o seletor está associado (GDT – Global Descriptor Table) ou (LDT – Local Descriptor Table)
Tabela de Descritores de Segmentos
Cada tabela de segmentos tem um conjunto de descritores como entradas
Cada descritor contém os atributos de cada segmento
As várias informações presentes nos descritores
Tipos de Tabela de Descritores de Segmentos
Todos os programas enxergam os descritores da tabela Tem 8191 entradas disponíveis (entrada 0 é reservada) Cada programa(tarefa) pode ter sua própria tabela
Tem 8192 entradas disponíveis
Tabela específica que aponta para rotinas de tratamento de
interrupções
Tem 256 entradas disponíveis
Mecanismos de Proteção Possíveis Utilizando
Descritores
Verificação de tipo de acesso
Exemplos:
CS só pode ser carregado com um seletor para um segmento de código;
SS só pode ser carregado com um seletor para um segmento de dados que permite escrita
Verificação de limites
Endereço acessado não pode ser fora dos limites do segmento
Restrições de: Acesso a dados Chamadas a procedimentos Instruções privilegiadas
Níveis de
Privilégio
Tipos de Descritores
Descritores de segmento contém atributos sobre os
segmentos
Código Dados
Descritores de sistema contém atributos sobre estruturas
de dados inicializadas e utilizadas apenas pelo sistema operacional
Segmentos de sistema (ex: para uma LDT) Gates
Descritores de Segmentos (Genérico)
Endereço base (32 bits) especifica onde o segmento começa
Limite (20 bits) especifica o tamanho do segmento
G - especifica a granularidade do limite
G = 0, granularidade de 1 Byte, tamanho máximo = 1MB G = 1, granularidade de 4KB, tamanho máximo = 4GB
Descritores de Segmentos (Genérico)
DPL (Descriptor Privilege Level) – Especifica o nível de
privilégio do segmento
Assume valores de 0 a 3
Descritores de Segmentos (Genérico)
S – Especifica o tipo de segmento
S = 0, segmento de sistema
Descritor de Segmento de Código
Segmentos de código são geralmente ou somente habilitados para execução ou execução e leitura
Descritor de Segmento de Código (Flags)
A (Acessed) – Especifica se o segmento está carregado no
registrador CS
A = 1, segmento carregado no CS
Descritor de Segmento de Código (Flags)
R (Readable) – Especifica se o segmento pode ser acessado
também para leitura
R = 0, segmento habilitado para apenas para execução R = 1, segmento habilitado para leitura e execução
Se R = 0, tentativa de ler dados do segmento gera a exceção “General Protection Exception”
Descritor de Segmento de Código (Flags)
C (Conforming) – Especifica se o segmento é “conforming” ou
“non-conforming”
Transferência de execução para um segmento conforming de maior privilégio permite que a execução ocorra no nível atual de privilégio Transferência de execução para um segmento non-conforming de um nível de privilégio diferente gera uma exceção, a não ser que se use um call-gate ou task-gate (veremos depois)
Descritor de Segmento de Código (Flags)
Bit 11 – Especifica se o segmento é de código ou de dados
0, segmento de dados 1, segmento de código
Descritor de Segmento de Código (Flags)
D (Default operand size) – Especifica o tamanho padrão dos
operandos
D = 0, operando de 16 bits D = 1, operando de 32 bits
Descritor de Segmento de Dados (Flags)
W (Writable) – Especifica se o segmento pode ser acessado
também para escrita
W = 0, segmento habilitado para apenas para leitura W = 1, segmento habilitado para leitura e escrita
Se W = 0, tentativa de escrever no segmento gera a exceção “General Protection Exception”
Para segmentos de pilha, necessariamente o segmento deve permitir escrita
Descritor de Segmento de Dados (Flags)
E (Expand-down) – Especifica se o segmento cresce do maior
endereço para o menor
Útil para segmentos de pilha
E = 0, segmento cresce para cima E = 1, segmento cresce para baixo
Se E = 1, o campo “limite” indica a borda inferior do segmento,
Descritor de Segmento de Dados (Flags)
D/B – Quando é um segmento de pilha, este campo é
referenciado como “B”, e define o tamanho da pilha
B = 0, pilha de 16 bits, referenciado pelo registrador SP B = 1, pilha de 32 bits, referenciado pelo registrador ESP
Endereçamento de Memória em Modo Protegido
Estrutura dos Registradores de Segmentos
Tabelas de descritores ficam na memória
Descritor de segmento fica armazenado na parte escondida do registrador de segmento
Evita acesso a memória a cada vez que se acessa o mesmo segmento que está sendo apontado pelo seletor
CPL (Current Privilege Level) é armazenado na parte escondida do registrador