Modo protegido

O modo protegido é um modo de operação de processadores baseado na arquitetura x86 da Intel a partir do 80286 . Também está presente na série x86-64 em duas formas possíveis: 32 bits e 64 bits.

Características

A introdução do modo protegido visa agregar, ao lado do chamado modo real compatível com o existente, novos recursos para promover multitarefa e estabilidade do sistema, oferecendo assistência de hardware para os seguintes pontos:

A maioria dos sistemas operacionais x86 modernos, do Linux ao FreeBSD e ao Windows desde a versão 3.1 , funcionam neste modo. Por motivos de compatibilidade, um computador é inicializado em modo real e a alternância para o modo protegido ocorre. Esta é uma das primeiras tarefas que o sistema operacional realiza após a inicialização .

A segmentação

A segmentação não pode ser completamente desativada no modo protegido. Mas, ao contrário do modo real, os segmentos são totalmente programáveis.

É com a segmentação que os níveis de privilégio são estabelecidos ( anéis , veja abaixo). Cada segmento tem um nível de 0 a 3.

A segmentação também serve como suporte para a memória virtual . Na verdade, um segmento consiste em uma base (endereço físico - chamado de linear se a paginação for ativada - começando na memória) e um limite que define seu comprimento. Dentro de um segmento, o endereço lógico 0 corresponde à base desse segmento. Um segmento pode, portanto, ser movido com seus dados de forma transparente.

Além disso, o descritor de cada segmento contém um bit P para “presente” que indica se os dados estão na RAM ou não. Se este bit estiver desligado , quando este segmento for acessado, uma exceção é acionada que permite ao sistema operacional buscar os dados onde está localizado e copiá-los para a RAM.

A segmentação dificilmente é usada pelo Linux, que define segmentos correspondentes a toda a memória virtual.

Níveis de privilégio

Existem quatro níveis de privilégio no modo protegido x86 chamados Rings of Protection , numerados de 0 a 3. O nível 0 é o nível de privilégio mais alto e o nível 3 é o mais baixo. A proteção de memória é baseada em segmentos: o hardware não permite que um programa em execução em um segmento acesse segmentos de privilégio superior (portanto, localizado em um anel numerado inferior).

Na prática, a maioria dos sistemas operacionais modernos (incluindo Linux e Windows ) usa apenas dois desses níveis. O código de espaço do kernel (incluindo o kernel do sistema operacional ) é executado no Ring 0 , enquanto os aplicativos do usuário normalmente são executados no Ring 3, mais seguro e restritivo. Esses anéis são comumente chamados de "modo kernel" e "modo do usuário".

Paging

Como a segmentação não pode ser desativada, os endereços virtuais são processados ​​sistematicamente pela unidade de segmentação, que produz um endereço linear . Quando a paginação não está disponível (80286) ou desabilitada, este endereço linear é considerado diretamente como um endereço físico. No entanto, o 80386 e seus sucessores oferecem um poderoso mecanismo de paginação que permite que a memória virtual seja gerenciada com muita eficiência.

No caso mais frequente, a memória virtual (a que corresponde aos endereços lineares) divide-se em 4 páginas  KiB (mas também é possível ter 2 Mio ou 4  Mio páginas  ). Cada contexto tem um espaço de endereço de 4  GiB , ou 1.024 × 1.024 páginas, algumas das quais correspondem a quadros na RAM (que são do mesmo tamanho, então geralmente 4  KiB ). A associação entre páginas e frames é assegurada pela unidade de paginação.

Para limitar o tamanho da tabela da página (a priori uma tabela com mais de um milhão de entradas, mas muito vazia ), uma estrutura de dois níveis é colocada em prática:

Uma entrada de diretório ou tabela de página tem 32 bits, mas um endereço de quadro é fornecido em 20 bits (10 + 10). Restam, portanto, 12 bits adicionais, que correspondem a vários indicadores, incluindo o bit de presença , que indica que a página não está presente na memória. Quando isso ocorre, uma exceção de falha de página é lançada e deve ser tratada pelo sistema operacional. Surgem dois casos:

Compatibilidade com versões anteriores com modo real

Existe uma série de regras para que um programa operado em modo real seja binário compatível, ou seja, pode ser executado em modo protegido.

Na verdade, a maioria dos programas DOS quebrou essas regras. O 386 apresenta o modo virtual 8086 para remediar isso.

Modos protegidos de x86-64

O modo de 32 bits do x86 é mantido, chamado de modo legado . O x86-64 apresenta outro modo protegido nativo de 64 bits denominado modo Longo , com algumas diferenças notáveis:

Veja também

Artigos relacionados

links externos