/ / Por que as CPUs x86 usam apenas dois dos quatro "anéis"?

Por que as CPUs x86 usam apenas dois dos quatro "anéis"?

por que fazer x86-cpus-use-apenas-dois-de-quatro-anéis-00

Ao aprender mais sobre como os sistemas operacionaise o hardware que eles executam no trabalho e interagem entre si, você pode se surpreender ao ver o que parece ser esquisitice ou a subutilização de "recursos" ocorrendo. Por que é que? A postagem de perguntas e respostas do superusuário de hoje tem a resposta para a pergunta de um curioso leitor.

A sessão de perguntas e respostas de hoje é uma cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento da comunidade de sites de perguntas e respostas.

Foto cedida por Lemsipmatt (Flickr).

A questão

O leitor de superusuário AdHominem quer saber por que as CPUs x86 usam apenas dois de quatro toques:

Os sistemas x86 baseados em Linux e Windows usam apenas Anel 0 para o modo kernel e Anel 3 para o modo de usuário. Por que os processadores distinguem quatro anéis diferentes se todos acabam usando apenas dois deles? Isso mudou com a arquitetura AMD64?

Por que as CPUs x86 usam apenas dois de quatro anéis?

A resposta

O colaborador do superusuário Jamie Hanrahan tem a resposta para nós:

Existem duas razões principais.

A primeira é que, embora as CPUs x86 ofereçamquatro anéis de proteção de memória, a granularidade de proteção oferecida é apenas no nível por segmento. Ou seja, cada segmento pode ser configurado para um toque específico (nível de privilégio) junto com outras proteções, como desabilitado para gravação. Mas não há muitos descritores de segmento disponíveis. A maioria dos sistemas operacionais gostaria de ter uma granularidade muito mais fina da proteção de memória, como ... para páginas individuais.

Portanto, insira a proteção baseada em tabela da página. A maioria, se não todos, os sistemas operacionais x86 modernos ignoram mais ou menos o mecanismo de segmentação (o máximo possível) e contam com a proteção disponível dos bits de baixa ordem nas entradas da tabela de páginas. Um deles é chamado de bit "privilegiado". Este bit controla se o processador deve ou não estar em um dos níveis "privilegiados" para acessar a página. Os níveis "privilegiados" são PL 0, 1 e 2. Mas é apenas um pouco, então, na página por páginaNo nível de proteção, o número de “modos” disponíveis no que diz respeito à proteção de memória é de apenas dois: Uma página pode ser acessada no modo não privilegiado, ou não. Portanto, apenas dois anéis. Para ter quatro toques possíveis para cada página, eles precisariam ter dois bits de proteção em cada entrada da tabela de páginas para codificar um dos quatro números possíveis de toques (assim como os descritores de segmento). No entanto, eles não.

A outra razão é o desejo pelo sistema operacionalportabilidade. Não se trata apenas de x86; O Unix nos ensinou que um sistema operacional pode ser relativamente portátil para várias arquiteturas de processador e que isso é uma coisa boa. E alguns processadores suportam apenas dois anéis. Por não depender de vários anéis na arquitetura, os implementadores do sistema operacional tornaram os sistemas operacionais mais portáteis.

Há uma terceira razão específica paraDesenvolvimento Windows NT. Os designers da NT (David Cutler e sua equipe, que a Microsoft contratou da DEC Western Region Labs) tinham uma vasta experiência anterior no VMS; de fato, Cutler e alguns outros estavam entre os designers originais do VMS. E o processador VAX para o qual o VMS foi projetado possui quatro anéis (o VMS usa quatro anéis).

Mas os componentes que foram executados no VMS Anéis 1 e 2 (Record Management Services e CLI, respectivamente) foram deixados de fora do design do NT. Anel 2 no VMS não era realmente sobre sistema operacionalsegurança, mas sim sobre a preservação do ambiente da CLI do usuário de um programa para o outro, e o Windows não tinha esse conceito; a CLI é executada como um processo comum. Quanto aos VMS Anel 1, o código RMS em Anel 1 teve que chamar Anel 0 com bastante frequência, e as transições de anel são caras. Acabou sendo muito mais eficiente ir apenas para Anel 0 e acabar com isso em vez de ter um monte de Anel 0 transições dentro do Anel 1 código (novamente, não que o NT tenha algo parecido com o RMS).

Por que o x86 implementou quatro anéis enquantosistemas operacionais não os utilizaram, você está falando de sistemas operacionais com design muito mais recente que o x86. Muitos dos recursos de programação do sistema do x86 foram projetados muito antes da implementação do NT ou do verdadeiro kernel do Unix, e eles realmente não sabiam o que o sistema operacional usaria. Não foi até termos paginado no x86 que pudemos implementar os kernels verdadeiros do Unix-ish ou do VMS.

Os sistemas operacionais x86 modernos não apenasignorar a segmentação (eles apenas configuram os segmentos C, D e S com um endereço base de 0 e tamanho de 4 GB; os segmentos F e G às vezes são usados ​​para apontar para as principais estruturas de dados do sistema operacional), mas também ignoram amplamente coisas como "Segmentos de estado da tarefa". O mecanismo TSS foi claramente projetado para alternância de contexto de encadeamento, mas acaba tendo muitos efeitos colaterais, então os sistemas operacionais x86 modernos o fazem “manualmente”. O único momento em que o x86 NT altera as tarefas de hardware é para algumas condições verdadeiramente excepcionais, como uma exceção de falha dupla.

Em relação à arquitetura x64, muitos dessesrecursos desativados foram deixados de fora. Para seu crédito, a AMD conversou com as equipes de kernel do sistema operacional e perguntou o que eles precisavam do x86, o que eles não precisavam ou não queriam, e o que eles gostariam de adicionar. Os segmentos no x64 existem apenas no que pode ser chamado de forma vestigial, a alternância do estado da tarefa não existe etc., e os sistemas operacionais continuam usando apenas dois toques.


Tem algo a acrescentar à explicação? Som desligado nos comentários. Deseja ler mais respostas de outros usuários do Stack Exchange com conhecimento técnico? Confira o tópico de discussão completo aqui.