Notas de montagem do Windows 32 (1): conhecimento básico
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. Modo de trabalho do processador 80x86
1.1 Modo real
Visão geral do modo real
O Modo Real é o modo de trabalho mais antigo suportado pelo processador 80x86 e também o modo de trabalho mais básico. O modo real é usado principalmente nos primeiros sistemas operacionais MS-DOS e em outros ambientes operacionais simples. No modo real, o processador tem acesso direto a 1 MB de espaço de memória física. Este modo é totalmente compatível com o funcionamento do processador 8086, daí o nome "modo real".
Recursos do modo real
-
Restrições de espaço de endereço
- No modo real, o processador só pode acessar 1 MB de espaço de memória (de 0x00000 a 0xFFFFF).
- O espaço de memória é limitado pelo barramento de endereços de 20 bits.
-
Endereço de segmento e endereço de deslocamento
- O modo real usa o método segment:offset (segmento) para endereçamento de memória.
- O endereço do segmento é multiplicado por 16 (ou seja, deslocado 4 bits para a esquerda) e adicionado ao endereço de deslocamento para formar um endereço físico de 20 bits.
- Por exemplo, se o endereço do segmento for 0x1234 e o endereço de deslocamento for 0x5678, o endereço físico será: Endereço físico = (0x1234×16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8text{endereço físico} = (0x1234 vezes 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8 endereço físico=(0x1234×16)+0x5678=0x12340+0x5678=0x179B8
-
Sem proteção de memória
- O modo real não possui mecanismo de proteção de memória e o programa pode acessar arbitrariamente todo o espaço de memória de 1 MB, incluindo a área do sistema operacional e áreas de outros programas.
- Isso possibilita que os programas interfiram uns com os outros e levem facilmente a falhas no sistema.
-
acesso direto ao hardware
- O modo real permite acesso direto a dispositivos de hardware e portas de E/S.
- No modo real, os programas podem interagir diretamente com dispositivos de hardware usando instruções de E/S como IN e OUT.
-
Interrupções e inicialização do processador
- O modo real suporta interrupções de hardware e interrupções de software, que são gerenciadas usando a Interrupt Vector Table (IVT).
- A tabela de vetores de interrupção é armazenada na área de memória inferior de 1 KB (de 0x00000 a 0x003FF).
- Depois que o processador for ligado ou reiniciado, ele entrará automaticamente no modo real e começará a executar o código do endereço 0xFFFF0.
-
Limitações no código executável
- O tamanho do segmento de código executável em modo real é limitado, geralmente um segmento de código tem até 64 KB (0x0000 a 0xFFFF).
Layout de memória em modo real
No modo real, o layout da memória geralmente inclui as seguintes partes:
-
Área BIOS
- Memória de última geração (de 0xF0000 a 0xFFFFF) geralmente é usada para armazenar código e dados do BIOS.
- Ao ligar ou reiniciar, o processador começa a executar o código BIOS em 0xFFFF0.
-
Tabela de vetores de interrupção
- A área de memória mais baixa de 1 KB (de 0x00000 a 0x003FF) armazena a tabela de vetores de interrupção.
- Cada vetor de interrupção ocupa 4 bytes (endereço de segmento de 2 bytes e endereço de deslocamento de 2 bytes).
-
Sistemas operacionais e aplicativos
- A área restante da memória é usada para código do sistema operacional, código do aplicativo e dados.
1.2 Modo de proteção
Visão geral
O Modo Protegido é um modo de trabalho avançado introduzido pelo processador 80x86. Em comparação com o modo real, ele fornece funções de proteção e gerenciamento de memória mais poderosas. O modo protegido foi introduzido pela primeira vez no processador 80286 e foi estendido e aprimorado ainda mais nos processadores 80386 e posteriores.
Recursos do modo protegido
-
Espaço de endereço de memória estendido
- O modo protegido suporta barramento de endereço de 24 ou 32 bits e pode acessar 4 GB de espaço de memória física (no 80386 e posterior).
- Seletores e descritores de segmento são usados para gerenciamento de memória, permitindo layout e gerenciamento de memória mais complexos.
-
proteção de memória
- Através de descritores de segmento e tabelas de páginas, o modo protegido pode implementar proteção de memória para evitar que programas acessem ilegalmente a memória de outros programas ou sistemas operacionais.
- Suporta segmentos de código e dados de diferentes níveis de privilégio (nível 0 a nível 3) para obter isolamento entre o modo de usuário e o modo kernel.
-
Mecanismo de paginação
- Suporta mecanismo de paginação e mapeia endereços virtuais para endereços físicos por meio de tabelas de páginas para aprimorar ainda mais os recursos de gerenciamento de memória.
- O tamanho da página geralmente é de 4 KB, mas páginas grandes (como 4 MB) também são suportadas.
-
Multitarefa com suporte de hardware
- Fornece comutação multitarefa com suporte de hardware, incluindo Task State Segment (TSS) e Task Register (Task Register).
- Suporta porta de tarefas para comutação e proteção entre tarefas.
-
Tratamento aprimorado de interrupções e exceções
- No modo protegido, a Interrupt Descriptor Table (IDT) é usada para gerenciar interrupções e tratamento de exceções.
- O IDT oferece suporte a descritores de portas (Gate Descriptor), incluindo portas de interrupção, portas de armadilha e portas de tarefas.
-
Memória virtual
- Suporta memória virtual e implementa espaço de endereço virtual por meio do mecanismo de paginação, permitindo que o programa use um espaço de endereço maior do que a memória física real.
Gerenciamento de memória em modo protegido
-
Seletores de segmento e descritores de segmento
- Cada seletor de segmento aponta para um descritor de segmento, que contém o endereço base do segmento, o limite do segmento e os atributos do segmento (como permissões e tipo).
- Os seletores e descritores de segmento são gerenciados pela Tabela de Descritores Globais (GDT) e pela Tabela de Descritores Locais (LDT).
-
Mecanismo de paginação
- O mecanismo de paginação divide o endereço virtual em diretório de páginas (Diretório de páginas), tabela de páginas (Tabela de páginas) e quadro de página (Quadro de página).
- Por meio do diretório de páginas e da tabela de páginas, os endereços virtuais são mapeados para endereços físicos para obter proteção e gerenciamento de memória.
Aplicativo em modo protegido
O modo protegido é amplamente utilizado em sistemas operacionais modernos, como Windows, Linux, Unix, etc. Eles usam as características do modo protegido para implementar funções avançadas, como multitarefa, multiusuário e proteção de memória. Através do modo protegido, o sistema operacional pode gerenciar efetivamente os recursos de hardware e fornecer um ambiente operacional estável e seguro.
O modo protegido é a base dos sistemas operacionais e aplicativos modernos, aproveitando ao máximo os recursos avançados do processador 80x86 para melhorar a estabilidade e a segurança do sistema.
1.3 Modo 8086 virtual
Visão geral do modo Virtual 8086
Modo Virtual 8086 (Modo Virtual 8086) é um modo especial fornecido pelo processador 80x86 em modo protegido, permitindo ao processador executar programas 8086 como se fossem executados em modo real. Este modo é usado principalmente para compatibilidade com versões anteriores, permitindo que versões mais antigas de programas DOS sejam executadas em sistemas operacionais modernos, como Windows e Linux, sem sair do modo protegido.
Recursos do modo 8086 virtual
-
Compatibilidade com modo real
- O modo Virtual 8086 permite que o processador simule o ambiente operacional em modo real e suporta o conjunto de instruções e o espaço de endereço do 8086.
- O processador pode executar programas 8086 em modo protegido, mantendo os recursos e benefícios do modo protegido.
-
Mecanismos de paginação e proteção
- No modo 8086 virtual, o processador ainda pode usar o mecanismo de paginação em modo protegido para implementar memória virtual e proteção de memória.
- Através da tabela de páginas, o espaço de endereço no modo virtual 8086 pode ser mapeado para a memória física, proporcionando isolamento e proteção da memória.
-
Tratamento de interrupções e exceções
- O modo Virtual 8086 oferece suporte ao tratamento de interrupções e exceções, que pode ser gerenciado por meio da tabela de descritores de interrupção (IDT) do modo protegido.
- Interrupções e exceções podem ser tratadas pelo monitor 8086 virtual (geralmente o kernel do sistema operacional), garantindo estabilidade e segurança do sistema.
-
Suporte para virtualização de hardware
- Alguns processadores modernos fornecem tecnologia de virtualização suportada por hardware que pode implementar o modo 8086 virtual com mais eficiência.
- Por exemplo, as tecnologias VT-x da Intel e AMD-V da AMD podem fornecer suporte de virtualização acelerada por hardware e melhorar o desempenho.
Gerenciamento de memória no modo 8086 virtual
-
Segmento: endereçamento offset
- No modo virtual 8086, o método de endereçamento de memória é o mesmo que no modo real, usando o modo segmento: offset (segmento).
- O endereço de segmento e o endereço de deslocamento juntos formam um endereço físico de 20 bits, que pode acessar até 1 MB de espaço de memória.
-
Mecanismo de paginação
- O modo 8086 virtual suporta o mecanismo de paginação, que pode mapear o endereço do modo real de 20 bits para o espaço de endereço virtual no modo protegido.
- Através de tabelas de páginas, a proteção e o isolamento da memória podem ser alcançados para evitar que programas no modo 8086 virtual acessem ilegalmente outras áreas da memória.
Aplicação do modo 8086 virtual
-
Execute programas DOS mais antigos
- O modo Virtual 8086 é usado principalmente para executar versões mais antigas de programas e aplicativos DOS, fornecendo compatibilidade com versões anteriores.
- Nos sistemas operacionais modernos, o modo 8086 virtual permite executar alguns programas antigos que devem ser executados em modo real.
-
Máquinas virtuais e emuladores
- Algumas máquinas virtuais e emuladores utilizam o modo 8086 virtual para oferecer suporte a sistemas operacionais e softwares mais antigos.
- Por exemplo, emuladores como o DOSBox simulam o ambiente DOS através do modo 8086 virtual, permitindo aos usuários executar jogos e aplicativos DOS clássicos.
Limitações do modo 8086 virtual
-
espaço de endereço de memória
- No modo virtual 8086, o programa só pode acessar 1 MB de espaço de endereço de memória, que é restrito pelo modo real.
-
Sobrecarga de desempenho
- A implementação do modo 8086 virtual requer o suporte do modo protegido, o que pode causar certa sobrecarga de desempenho.
- O tratamento de interrupções e exceções requer a intervenção do monitor 8086 virtual (kernel do sistema operacional), o que aumenta a complexidade do processamento.
-
Limitações de hardware
- Nem todo hardware oferece suporte total ao modo 8086 virtual e alguns recursos de hardware podem não estar disponíveis no modo 8086 virtual.
Resumir
O modo Virtual 8086 é um modo especial fornecido pelo processador 80x86 em modo protegido, principalmente para compatibilidade com versões anteriores de programas DOS. O modo Virtual 8086 permite que o processador simule um ambiente operacional em modo real no modo protegido, mantendo os recursos e vantagens do modo protegido. Este modo é amplamente utilizado para executar software legado, máquinas virtuais e emuladores.
2. Gerenciamento de memória do Windows
2.1 Disposição de memória do sistema operacional DOS
O gerenciamento de memória do sistema operacional DOS (Disk Operating System) é baseado principalmente no modelo de memória de modo real do processador 8086/8088. O espaço de endereço da memória em modo real é de 1 MB, de 0x00000 a 0xFFFFF. Este espaço de endereço de 1 MB é dividido em diversas áreas principais, cada uma com uma finalidade específica. A seguir está uma introdução detalhada ao arranjo de memória do sistema operacional DOS.
modelo de memória em modo real
No Modo Real, o endereço da memória é acessado combinando o endereço do segmento e o endereço de deslocamento em um endereço físico de 20 bits. O endereço do segmento é deslocado 4 bits para a esquerda e o endereço de deslocamento é adicionado para formar o endereço físico real.
layout de memória
O layout do espaço de memória de 1 MB em modo real é aproximadamente o seguinte:
-
Tabela de vetores de interrupção (IVT): 0x00000 - 0x003FF
- Ocupa 1 KB (256 vetores, 4 bytes cada).
- Armazene o endereço de entrada e as informações relacionadas da rotina de serviço de interrupção.
-
Área de dados do BIOS (BDA): 0x00400 - 0x004FF
- Cerca de 256 bytes.
- Armazena parâmetros do sistema e do dispositivo de hardware, como disco rígido, porta serial, porta paralela, etc.
-
Memória legada (memória convencional): 0x00500 - 0x9FFFF
- 640 KB, usado principalmente para sistemas operacionais DOS, aplicativos DOS e programas de memória residente (TSR).
- Pode ser usado como código de programa, dados, pilha, etc.
-
Buffer de exibição: 0xA0000 - 0xBFFFF
- A área de memória usada pelo adaptador de vídeo.
- 0xA0000 - 0xAFFFF: 64 KB, normalmente usado no modo gráfico de placas gráficas EGA/VGA.
- 0xB0000 - 0xB7FFF: 32 KB, geralmente usado para adaptadores de vídeo monocromáticos (MDA).
- 0xB8000 - 0xBFFFF: 32 KB, geralmente usado para exibição de texto colorido (modo de texto CGA, EGA, VGA).
-
Área de dados estendida do BIOS (EBDA): 0xC0000 - 0xC7FFF
- Cerca de 32 KB, que armazena alguns dados estendidos do BIOS e código do BIOS do adaptador.
-
Área de extensão do BIOS: 0xC8000 - 0xEFFFF
- Usado principalmente para BIOS e drivers de placas de expansão (como adaptadores de rede, controladores SCSI, etc.).
-
BIOS do sistema: 0xF0000 - 0xFFFFF
- 64 KB, armazena o código do BIOS do sistema.
- Fornece inicialização básica do sistema, rotina de serviço de interrupção, controle de hardware e outras funções.
2.2 Mecanismo de endereçamento de memória 80386
O processador Intel 80386 introduziu um mecanismo de endereçamento de memória mais avançado, fornecendo gerenciamento de memória e recursos de proteção mais poderosos do que seus antecessores. O 80386 suporta dois modos principais de endereçamento de memória:modo realemodo protegido . No modo protegido, um mecanismo de paginação também é introduzido para aprimorar ainda mais os recursos de gerenciamento de memória. A seguir está uma introdução detalhada:
1. Modo real
No modo real, o processador 80386 possui o mesmo método de endereçamento de memória que o 8086/8088. Ele usa um barramento de endereço de 20 bits e pode acessar 1 MB de espaço de memória. O endereço é calculado a partir do endereço do segmento e do endereço de deslocamento:
- endereço do segmento: Desloca 4 bits para a esquerda.
- endereço de deslocamento: Adicionado ao resultado do deslocamento para a esquerda do endereço do segmento, o endereço físico de 20 bits é obtido.
物理地址 = (段地址 << 4) + 偏移地址
2. Modo protegido
O modo protegido é o principal modo de trabalho do processador 80386, que fornece proteção aprimorada de memória e funções de gerenciamento. O endereçamento de memória em modo protegido envolve duas camadas de mecanismos:mecanismo de segmentaçãoeMecanismo de paginação。
2.1 Mecanismo de segmentação
No modo protegido, o processador 80386 usa o seletor de segmento e o descritor de segmento para gerenciar segmentos. Os descritores de segmento são armazenados na tabela de descritores globais (GDT) ou na tabela de descritores locais (LDT).
-
seletor de segmento: 16 bits, incluindo três campos:
- índice: 13 bits, especifica a posição do descritor de segmento em GDT ou LDT.
- TI (Indicador de tabela): 1 bit, indicando se deve usar GDT (0) ou LDT (1).
- RPL (Nível de privilégio solicitado): 2 bits, especificando o nível de privilégio solicitado.
-
descritor de segmento: 8 bytes, incluindo os seguintes campos:
- Endereço Base: 32 bits, endereço inicial do segmento.
- Limite de segmento (Limite): 20 bits, tamanho do segmento.
- Direitos de acesso e propriedades: 12 bits, descrevendo o tipo de segmento, nível de privilégio, etc.
O cálculo do endereço linear no mecanismo de segmentação é o seguinte:
线性地址 = 段基址 + 偏移地址
2.2 Mecanismo de paginação
O mecanismo de paginação é outro método de gerenciamento de memória fornecido pelo processador 80386 em modo protegido. Ele realiza virtualização e proteção de memória convertendo endereços lineares em endereços físicos. O mecanismo de paginação envolve diretórios de páginas, tabelas de páginas e quadros de páginas.
- diretório de páginas: Contém entradas de diretório de páginas (PDEs), cada PDE aponta para uma tabela de páginas.
- tabela de páginas: Contém entradas da tabela de páginas (PTEs), cada PTE aponta para um quadro de página.
- quadro de página: O bloco de memória física real, geralmente de 4 KB.
A tradução de endereço do mecanismo de paginação é a seguinte:
- Os endereços lineares são divididos em três partes: diretório, tabela e deslocamento intrapágina.
- A seção do diretório indexa o diretório da página para localizar o PDE correspondente.
- A seção da tabela indexa a tabela de páginas para encontrar o PTE correspondente.
- O deslocamento intrapágina é adicionado ao endereço base do quadro da página para obter o endereço físico.
物理地址 = 页帧基址 + 页内偏移
Diagrama esquemático do mecanismo de paginação:
+----------------+----------------+----------------+
| 页目录(10位) | 页表(10位) | 页内偏移(12位)|
+----------------+----------------+----------------+
3. Unidade de gerenciamento de memória 80386 (MMU)
A MMU (Memory Management Unit) do 80386 é responsável pela segmentação e tradução de endereços de paginação e implementa proteção de memória.
-
Registro CR0: Registro de controle para ativar/desativar modo protegido e paginação.
- Bit PE (habilitação de proteção): Habilite o modo protegido.
- Bit PG (ativação de paginação): Habilite a paginação.
-
Registro CR3: o endereço base do diretório da página de armazenamento.
-
Registro CR2: Armazena o endereço linear da última falha de página.
4. Mecanismo de proteção
No modo protegido, o processador 80386 fornece uma variedade de mecanismos de proteção para garantir a segurança da memória e do sistema:
- Níveis de privilégio : De 0 a 3, existem quatro níveis no total, sendo o nível 0 o mais alto. Controle o acesso ao código e aos dados.
- proteção de segmento: implemente a verificação de limite de segmento e controle de acesso por meio dos campos de atributos no descritor de segmento.
- proteção de página: Através do campo de atributo no PTE é realizado o controle de permissão de leitura, escrita e execução da página.
2.3 Organização da memória do Windows
1. Memória virtual
O sistema operacional Windows usa gerenciamento de memória virtual, que combina memória física (RAM) e arquivos de memória virtual (arquivos de página) no disco rígido para fornecer um espaço de endereço virtual independente para cada processo. Cada processo geralmente possui 4 GB de espaço de endereço virtual (sistemas de 32 bits), dos quais 2 GB são usados por programas no modo de usuário e 2 GB são usados pelo modo kernel. Os sistemas de 64 bits possuem um espaço de endereço virtual maior.
2. Layout do espaço de endereço virtual
O espaço de endereço virtual é dividido em regiões de modo de usuário e de modo kernel:
espaço de endereço do modo de usuário
- 0x00000000 - 0x7FFFFFFF: Espaço de endereço no modo de usuário, para uso por aplicativos.
- Pilha: Área de alocação dinâmica de memória, a aplicação aloca e libera memória em tempo de execução.
- Pilha: Cada thread possui sua própria pilha para chamadas de função e variáveis locais.
- Memoria compartilhada: segmentos de dados compartilhados entre diferentes processos.
espaço de endereço do modo kernel
- 0x80000000 - 0xFFFFFFFF: Espaço de endereço no modo kernel, usado pelo kernel e drivers do sistema operacional.
- Código e dados do kernel: O código e os dados globais do kernel do sistema operacional.
- Cache do sistema: usado para cache do sistema de arquivos para melhorar o desempenho do acesso a arquivos.
- driver do dispositivo: Código e dados do driver.
3. Paginação de memória
O Windows usa um mecanismo de paginação para gerenciar a memória e converter endereços virtuais em endereços físicos. A unidade básica de paginação é uma página, geralmente de 4 KB.
Estrutura da tabela de páginas
- Diretório de páginas: Contém a entrada do diretório de páginas (PDE), apontando para a tabela de páginas.
- Tabela de páginas: contém entradas de tabela de páginas (PTEs) que apontam para páginas reais da memória física.
4. Unidade de gerenciamento de memória (MMU)
A unidade de gerenciamento de memória (MMU) do processador é responsável por converter endereços virtuais em endereços físicos, realizando substituição de páginas e proteção de memória. O sistema operacional Windows implementa as seguintes funções através do MMU:
- tradução de endereço: mapeia endereços virtuais para endereços físicos.
- proteção de memória: Controla as permissões de acesso à página (leitura, gravação, execução).
- Substituição de página: troque as páginas usadas com pouca frequência pelo arquivo de paginação do disco rígido para liberar memória física.
5. Proteção de memória
O sistema operacional Windows protege a memória por meio dos seguintes mecanismos:
- Nível de privilégio: certifique-se de que os programas em modo de usuário não possam acessar diretamente a memória em modo kernel.
- Permissões de página: Controle o tipo de acesso (leitura, gravação, execução) de cada página.
- Controle de acesso: o kernel do sistema operacional define permissões de acesso para impedir o acesso não autorizado à memória.
6. Alocação de memória
O Windows usa diversas estratégias e estruturas de dados para alocação de memória:
- alocador de paginação: gerencia a alocação de paginação e a liberação de memória virtual.
- Gerenciador de pilha: fornece alocação e desalocação eficientes de memória para aplicativos.
- alocador de memória do kernel: gerencia a memória do modo kernel, incluindo alocador de pool e pool não paginável.
7. API de gerenciamento de memória
O Windows fornece um conjunto de APIs de gerenciamento de memória para uso pelos aplicativos e pelo sistema:
- VirtualAlloc/VirtualFree: Aloque e libere memória virtual.
- HeapAlloc/Livre de Heap: Aloque e libere memória no heap.
- GlobalAlloc/GlobalFree: Aloque e libere blocos de memória global.
- LocalAlloc/LocalLivre: Aloque e libere blocos de memória local.
8. Arquivo de paginação
O Windows usa o arquivo de paginação (Pagefile.sys) como parte da memória virtual. Quando a memória física é insuficiente, as páginas usadas com pouca frequência são trocadas no arquivo de paginação. A localização e o tamanho do arquivo de paginação são configuráveis pelo usuário.
3. Proteção de privilégios do Windows
3.1 80386 interrupções e exceções
1. Classificação de interrupções e exceções
Interrupções e exceções podem ser divididas nas seguintes categorias:
- Interrupções de hardware: Enviado por dispositivos externos, como teclado, mouse, disco rígido, etc.
- Interrupções de software: Aprovado por software
INT
O comando é acionado. - Exceções: Acionado por erros ou condições especiais detectadas pelo processador, como erros de divisão por zero, falhas de página, etc.
2. Tabela de Vetores de Interrupção (IVT)
O processador 80386 usa uma tabela de vetores de interrupção para gerenciar interrupções e exceções. O IVT é uma tabela de 256 entradas, cada uma ocupando 4 bytes, armazenando o endereço de um manipulador de interrupção ou exceção. O endereço base do IVT é armazenado no IDTR (Interrupt Descriptor Table Register).
3. Tabela Descritora de Interrupção (IDT)
No modo protegido, o processador 80386 usa uma tabela descritora de interrupções (IDT) para armazenar manipuladores de interrupções e exceções. IDT contém descritores de porta de interrupção, porta de armadilha e porta de tarefa, cada descritor ocupa 8 bytes.
- Portão de interrupção: Usado para interrupções de hardware e software, limpando automaticamente IF (sinalizador de interrupção).
- Portão de Armadilha: Usado para tratamento de exceções, IF não é limpo.
- Portão de Tarefas: Usado para alternar tarefas.
O endereço base e os limites do IDT são armazenados no IDTR.
4. Interromper o fluxo de processamento
Quando ocorre uma interrupção ou exceção, o processador 80386 executa as seguintes etapas:
- salvar contexto: Salve o CS (registro de segmento de código), EIP (registro de ponteiro de instrução) e EFLAGS (registro de sinalizadores) atuais na pilha.
- Encontrar IDT: Encontre o descritor correspondente do IDT com base no número de interrupção ou exceção.
- Verifique as permissões: verifique o nível de privilégio atual (CPL) e o nível de privilégio alvo (DPL) para garantir a conversão de permissão legal.
- pular para o manipulador: Carregue novos CS e EIP, pule para o manipulador de interrupção ou exceção.
- Lidar com interrupções ou exceções:Executa o código do manipulador.
- restaurar contexto:passar
IRET
A instrução restaura CS, EIP e EFLAGS e retorna ao estado anterior à ocorrência da interrupção ou exceção.
5. Tipo de exceção
O processador 80386 suporta múltiplas exceções, cada exceção possui diferentes códigos de erro e métodos de tratamento:
- Falhas, panes: uma exceção recuperável quando o manipulador retornar, a instrução que causou a exceção será executada novamente.
- Armadilhas: uma exceção usada para depuração ou rastreamento. Quando o manipulador retorna após a ocorrência da exceção, a próxima instrução continua a ser executada.
- Aborta: Erro grave, geralmente irrecuperável.
Exceções comuns incluem:
- Erro de divisão: gerado quando o divisor é zero.
- Único passo: Usado para depuração, gerado ao executar uma única etapa.
- Ponto de interrupção: gerado ao depurar pontos de interrupção.
- Transbordar:usar
INTO
Gerado quando a instrução detecta um overflow. - Intervalo BOUND excedido: gerado quando o acesso ao array sai dos limites.
- Código de operação inválido: Gerado ao executar uma instrução ilegal.
- Dispositivo não disponível: gerado quando o coprocessador está indisponível.
- Dupla Falha: uma exceção ocorre novamente ao tratar uma exceção.
- Superação do segmento do coprocessador: Gerado por operações do coprocessador.
- TSS inválido: gerado quando o segmento de status da tarefa é ilegal.
- Segmento não presente: gerado quando um segmento inexistente é acessado.
- Falha de pilha: gerado quando ocorre um erro de operação de pilha.
- Falha de proteção geral: Acionado quando as regras de proteção são violadas.
- Falha de página: gerado quando a operação de paginação é anormal.
6. Manipuladores de interrupções e exceções
Manipuladores de interrupções e exceções são rotinas especiais usadas para tratar interrupções ou exceções específicas. Eles geralmente são fornecidos pelo sistema operacional e são responsáveis por restaurar o estado do sistema, registrar informações de erro, executar as operações de recuperação necessárias ou interromper a resposta.
7. Prioridade de interrupção e mascaramento
O processador 80386 suporta prioridade de interrupção e mecanismos de mascaramento, e gerencia a prioridade e mascaramento de interrupções de hardware através do PIC (Controlador de Interrupção Programável). As interrupções de alto nível podem interromper o processamento de interrupções de baixo nível para garantir uma resposta oportuna a eventos críticos.
3.2 Mecanismo de proteção de 80386
1. Proteção de segmentação
O processador 80386 usa um mecanismo de segmentação para gerenciar a memória. Cada segmento possui um descritor que contém o endereço base, limites e direitos de acesso do segmento. A proteção de segmentação garante que os processos possam acessar apenas áreas de memória para as quais estão autorizados.
descritor de segmento
Os descritores de segmento são armazenados na tabela de descritores globais (GDT) e na tabela de descritores locais (LDT). Cada descritor contém as seguintes informações:
- Endereço Base: O endereço inicial do segmento.
- Limite: O tamanho do segmento, indicando o endereço final do segmento.
- Tipo (Tipo) e nível de privilégio (DPL): O tipo de segmento (segmento de código, segmento de dados, segmento de sistema) e direitos de acesso.
- Bit de presença de segmento (P): Se o segmento está na memória.
Implementação de proteção de segmentação
Ao acessar a memória, o processador procura o descritor de segmento com base no seletor de segmento e realiza as seguintes verificações:
- Verificação de endereço base e limites: certifique-se de que o endereço de acesso esteja dentro do intervalo do segmento.
- Verificação de permissão: certifique-se de que os direitos de acesso correspondam ao tipo e ao nível de privilégio no descritor.
2. Proteção de paginação
O mecanismo de paginação refina ainda mais o gerenciamento de memória, com cada página tendo seus próprios direitos de acesso. O mecanismo de proteção de paginação é implementado por meio de diretórios de páginas e tabelas de páginas.
Diretórios de páginas e tabelas de páginas
- Diretório de páginas: Contém a entrada do diretório de páginas (PDE), apontando para a tabela de páginas.
- Tabela de páginas: contém entradas de tabela de páginas (PTEs) que apontam para páginas reais da memória física.
Cada entrada da tabela de páginas contém as seguintes informações:
- Endereço base da página: O endereço inicial da página de memória física.
- Bit de presença (P): Se a página está na memória.
- Bit de leitura/gravação (R/W): se a página é gravável.
- Bit de usuário/superusuário (EUA): permissões de acesso para a página.
Implementação de proteção de paginação
Ao acessar a memória, o processador realiza as seguintes verificações:
- Verificação de existência de página: Verifique se a página está na memória, caso contrário, acione uma falha de página (Falha de página).
- verificação de leitura/gravação: Verifique se a página é gravável. Se você tentar gravar em uma página não gravável, uma falha de proteção será acionada.
- Verificação de usuário/superusuário: verifique as permissões de acesso para garantir que o código do modo de usuário não possa acessar as páginas do modo kernel.
3. Nível de privilégio
O processador 80386 suporta 4 níveis de privilégio (Privilege Levels), de 0 a 3. Quanto menor o nível, maior o privilégio.
- Nível de privilégio 0 (anel 0): O nível de privilégio mais alto, geralmente usado no kernel do sistema operacional.
- Nível de privilégio 1 (anel 1)ePrivilégio Nível 2 (Anel 2): Nível de privilégio intermediário, raramente usado.
- Nível de privilégio 3 (Anel 3): o nível de privilégio mais baixo, normalmente usado por aplicativos de modo de usuário.
Implementação de níveis de privilégio
Os níveis de privilégio são implementados através dos seguintes mecanismos:
- Nível de privilégio de segmento de código (CPL): o nível de privilégio do código atualmente em execução.
- Nível de privilégio do segmento de dados (DPL): o nível de privilégio do segmento de dados, que determina quais CPLs podem acessar o segmento.
- Solicitar Nível de Privilégio (RPL): o nível de privilégio do seletor de segmento, indicando a permissão de acesso solicitada.
Ao realizar uma operação de acesso, o processador verifica o CPL, o DPL e o RPL para garantir a conformidade com as regras de nível de privilégio. Se não corresponder, uma Falha de Proteção Geral será acionada.
4. Segmento do sistema e descritores de porta
O processador 80386 suporta descritores de segmentos e portas do sistema para comutação de tarefas e tratamento de interrupções.
segmento do sistema
- Segmento de status de tarefa (TSS): contém informações contextuais da tarefa e é usado para alternância de tarefas.
- Tabela de descritores locais (LDT): contém descritores de segmento específicos da tarefa.
descritor de portão
- Portão de interrupção: Usado para processamento de interrupções, saltando para o manipulador de interrupções.
- Portão de Armadilha: Usado para tratamento de exceções e não mascara interrupções.
- Portão de Tarefas: Usado para troca de tarefas, troca de tarefas por meio do TSS.
5. Troca de tarefas
O processador 80386 oferece suporte à alternância de tarefas de hardware, que é implementada por meio do segmento de status de tarefa (TSS). A alternância de tarefas pode ser acionada por interrupções, exceções ou portas de tarefas.
Segmento de status de tarefa (TSS)
O TSS contém o estado do registro da tarefa, registros de segmento, ponteiro de pilha e links de tarefa. Ao alternar tarefas, o processador salva o status da tarefa atual no TSS e carrega o status da nova tarefa.
Processo de troca de tarefas
- Salvar o status atual da tarefa: Salve os registros e registros de segmento da tarefa atual no TSS.
- Carregar o novo status da tarefa: carrega registros e registros de segmento do TSS da nova tarefa.
- Atualizar registro de tarefas (TR): aponta para o TSS da nova tarefa.
6. Tratamento de interrupções e exceções
O tratamento de interrupções e exceções são partes importantes do mecanismo de proteção do processador 80386. Interrupções e exceções são gerenciadas por meio da tabela descritora de interrupções (IDT), e verificações de permissão e trocas de contexto são realizadas durante o processamento.
Procedimentos de tratamento de interrupções e exceções
- salvar contexto: Salve o CS, EIP e EFLAGS atuais na pilha.
- Encontrar IDT: Encontre o descritor correspondente do IDT com base no número de interrupção ou exceção.
- Verificação de permissão: Verifique CPL e DPL para garantir a conversão de permissão legal.
- pular para o manipulador: Carregue novos CS e EIP e execute o manipulador.
- restaurar contexto:passar
IRET
Restaure CS, EIP e EFLAGS e retorne ao estado anterior à ocorrência da interrupção ou exceção.
3.3 Mecanismo de proteção do Windows
1. Modo de usuário e modo kernel
O sistema operacional Windows divide o modo de execução do processador em modo de usuário (modo de usuário) e modo kernel (modo kernel):
- modo de usuário: executa um aplicativo com acesso restrito e sem acesso direto ao hardware ou às estruturas de dados do kernel.
- modo kernel: executa os principais componentes do sistema operacional e drivers de dispositivo com acesso total e pode executar instruções privilegiadas.
Alternando entre o modo de usuário e o modo kernel
A alternância entre o modo de usuário e o modo kernel geralmente é implementada por meio de chamadas de sistema. O aplicativo solicita serviços de kernel chamando a API do sistema e o sistema operacional alterna a solicitação para o modo kernel para processamento.
2. Proteção de memória
Memória virtual
O Windows usa um mecanismo de memória virtual para fornecer a cada processo um espaço de endereço independente. Este mecanismo evita que os processos acessem diretamente a memória uns dos outros, melhorando assim a segurança e a estabilidade do sistema.
- tabela de páginas: Cada processo possui uma tabela de páginas independente que mapeia endereços virtuais para endereços físicos.
- troca de páginas: quando a memória física está baixa, o sistema operacional troca as páginas usadas com pouca frequência pelo arquivo de paginação no disco rígido.
segmento de memória
O Windows usa segmentos de memória para dividir diferentes tipos de dados e códigos, e cada segmento possui diferentes direitos de acesso e mecanismos de proteção. Por exemplo, o segmento de código é somente leitura, enquanto o segmento de dados é leitura-gravação.
3. Controle de acesso
O sistema operacional Windows usa a Lista de Controle de Acesso (ACL) para gerenciar direitos de acesso de usuários e processos aos recursos.
Identificador de segurança (SID)
Cada usuário, grupo e computador possui um identificador de segurança (SID) exclusivo que os identifica.
Lista de controle de acesso (ACL)
Cada objeto (como um arquivo, diretório, chave de registro, etc.) possui uma lista de controle de acesso, que contém um conjunto de itens de controle de acesso (ACEs) que definem os direitos de acesso de diferentes usuários e grupos ao objeto.
4. Gerenciamento de privilégios
O Windows controla o que os processos e usuários podem fazer por meio do gerenciamento de privilégios. Certos privilégios são concedidos apenas a grupos de usuários específicos (como administradores), como instalação de drivers, acesso a logs do sistema, etc.
estratégia de segurança
O Windows fornece uma série de políticas de segurança que podem configurar o controle de conta de usuário (UAC), políticas de senha, políticas de auditoria, etc.
5. Tratamento de interrupções e exceções
Os sistemas operacionais Windows usam mecanismos de tratamento de interrupções e exceções para gerenciar interrupções de hardware, interrupções de software e exceções de processador.
Tratamento de interrupções
O manipulador de interrupções (Interrupt Service Routine, ISR) é responsável por lidar com interrupções de hardware e garantir que os dispositivos externos possam responder a tempo.
Manipulação de exceção
Os manipuladores de exceções tratam exceções do processador, como erros de divisão por zero, falhas de página, etc., para garantir que o sistema possa tomar medidas de recuperação apropriadas quando ocorrerem exceções.
6. Multitarefa
O Windows permite que vários processos e threads sejam executados ao mesmo tempo por meio do mecanismo multitarefa. O sistema operacional usa um agendador para gerenciar a execução de processos e threads e garantir que os recursos do sistema sejam alocados de forma justa.
Agendamento de tópicos
O Windows usa um algoritmo de agendamento de prioridade para alocar intervalos de tempo de CPU com base na prioridade e no status do thread (como pronto, em espera, em execução, etc.).
isolamento de processo
Cada processo possui espaço de endereço virtual e recursos independentes, evitando que um processo afete a operação de outro processo e melhorando a estabilidade do sistema.
7. Recursos de segurança
O Windows fornece uma série de recursos de segurança, como Prevenção de Execução de Dados (DEP), Randomização de Layout de Espaço de Endereço (ASLR), etc., para aprimorar os recursos de proteção do sistema.
Prevenção de Execução de Dados (DEP)
A DEP impede a execução de código no segmento de dados, marcando certas áreas da memória como não executáveis por meio de uma combinação de hardware e software.
Randomização de layout de espaço de endereço (ASLR)
ASLR randomiza o espaço de endereço de memória de um processo, tornando mais difícil para os invasores explorarem vulnerabilidades.