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.
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 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.
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".
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:
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.
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: