Anéis de privilégio da CPU: Por que os anéis 1 e 2 não são usados?

102

Algumas perguntas sobre os anéis de privilégio de CPU x86:

  • Por que os anéis 1 e 2 não são usados ​​pela maioria dos sistemas operacionais? É apenas para manter a compatibilidade do código com outras arquiteturas ou há um motivo melhor?

  • Há algum sistema operacional que realmente use esses anéis? Ou eles estão completamente sem uso?

user541686
fonte

Respostas:

111

Como um escritor de sistema operacional amador, descobri que, como o paging (uma parte importante do modelo de proteção moderno) tem apenas um conceito de privilegiado (anel 0,1,2) e não privilegiado, o benefício para os anéis 1 e 2 diminuiu muito.

A intenção da Intel em ter os anéis 1 e 2 é que o sistema operacional coloque os drivers de dispositivo nesse nível, de modo que sejam privilegiados, mas um tanto separados do resto do código do kernel.

Os anéis 1 e 2 são, de certa forma, "principalmente" privilegiados. Eles podem acessar as páginas do supervisor, mas se tentarem usar uma instrução privilegiada, ainda terão o GPF como o anel 3 faria. Portanto, não é um lugar ruim para drivers como a Intel planejou ...

Dito isso, eles definitivamente têm uso em alguns designs. Na verdade, nem sempre diretamente pelo SO. Por exemplo, o VirtualBox , uma máquina virtual , coloca o código do kernel convidado no anel 1. Também tenho certeza de que alguns sistemas operacionais os utilizam, só não acho que seja um design popular no momento.

Evan Teran
fonte
28
wHOA VirtualBox usa o anel 1 ?! Isso é incrível! Muito obrigado pela informação, essa é uma ótima resposta! +1
user541686
10
OS / 2 usou o Anel 2 extensivamente para o código de E / S. É por isso que é tão difícil virtualizar.
kinokijuf de
De superuser.com/questions/1402537/… : "Executar o código do anel 0 no anel 1 causa uma série de falhas de instrução adicionais, já que o anel 1 não tem permissão para executar quaisquer instruções privilegiadas, das quais o anel 0 do convidado contém muitas. dessas falhas, o VMM deve intervir e emular o código para atingir o comportamento desejado. Embora isso funcione, emular milhares dessas falhas é muito caro e prejudica gravemente o desempenho do convidado virtualizado. "
Dustin Oprea
24

Do ponto de vista do design do SO, ter vários anéis privilegiados é uma raridade do x86 - a maioria das outras CPUs têm apenas dois modos (supervisor e usuário). Assim, projetar um sistema operacional para exigir vários modos privilegiados impedirá imediatamente que ele seja transferido para qualquer outra CPU. Além disso, muitos pacotes de virtualização modernos não emulam corretamente os níveis de privilégio diferentes de 0 e 3, tornando os sistemas operacionais que usam esses níveis muito mais difíceis de testar.

Crepúsculo-inativo-
fonte
7

De acordo com a página da Wikipedia sobre Ring Security , os anéis 1 e 2 são usados ​​para drivers (anel 1), sistemas operacionais convidados (anel 1) e código I / o privilegiado (anel 2), hipervisores ficam em -1/0 (dependendo de o hyper-visor) não 1 como afirmei anteriormente.

No entanto, os dois anéis extras nunca ajudaram muito e, portanto, raramente foram usados. TBH, a maioria dos códigos usando os anéis 1 e 2, eles os semi-reaproveitaram de seu uso original (como os hipervisores). A maioria dos códigos do Windows hoje em dia parece tratar o sistema como tendo apenas dois níveis (kernel e usuário), provavelmente devido à sobrecarga associada à entrada e saída do kernel.

Necrolis
fonte
1
Eu acho que você perdeu um -lugar. Tem certeza de que os hipervisores usam o anel 1?
user541686
Heh, não estava pensando, deveriam ser hyper-visores em -1 e sistemas operacionais convidados em 1, irão atualizar isso rápido
Necrolis
4
O Windows usa apenas dois anéis porque foi projetado para rodar em outros processadores (agora extintos) que tinham apenas dois.
David de
Em minha mente, há pouca sobrecarga para alternar os modos. Pelo que entendi, apenas o hardware poderia atribuir mais privilégios privilegiados à CPU (como se ocorresse uma interrupção de E / S). Se essa troca de privilégios acontecer no hardware, duvido que seja comum trocar de anéis. Acho que Windows, Linux ou MacOS usam apenas os dois anéis mais extremos porque os arquitetos reservam os anéis intermediários para coisas como virtualização hospedada no sistema operacional.
Nate Symer