Anillos de privilegios de CPU: ¿Por qué no se utilizan los anillos 1 y 2?

102

Un par de preguntas sobre los anillos de privilegios de la CPU x86:

  • ¿Por qué la mayoría de los sistemas operativos no utilizan los anillos 1 y 2? ¿Es solo para mantener la compatibilidad del código con otras arquitecturas o hay una mejor razón?

  • ¿Existe algún sistema operativo que realmente use esos anillos? ¿O están completamente sin usar?

usuario541686
fuente

Respuestas:

111

Como escritor de sistemas operativos aficionado, descubrí que debido a que la paginación (una parte importante del modelo de protección moderno) solo tiene un concepto de privilegiado (anillo 0, 1, 2) y no privilegiado, el beneficio de los anillos 1 y 2 se redujo considerablemente.

La intención de Intel al tener los anillos 1 y 2 es que el sistema operativo coloque los controladores de dispositivo en ese nivel, por lo que tienen privilegios, pero algo separados del resto del código del kernel.

Los anillos 1 y 2 son, en cierto modo, "en su mayoría" privilegiados. Pueden acceder a las páginas del supervisor, pero si intentan utilizar una instrucción privilegiada, seguirán usando GPF como lo haría el anillo 3. Así que no es un mal lugar para los conductores como planeó Intel ...

Dicho esto, definitivamente tienen uso en algunos diseños. De hecho, no siempre directamente por el sistema operativo. Por ejemplo, VirtualBox , una máquina virtual , coloca el código del kernel invitado en el anillo 1. También estoy seguro de que algunos sistemas operativos los utilizan, simplemente no creo que sea un diseño popular en este momento.

Evan Terán
fuente
28
¡¿Quién usa VirtualBox el anillo 1 ?! ¡¡Eso es pura maravilla !! Muchas gracias por la información, ¡es una gran respuesta! +1
user541686
10
OS / 2 usó Ring 2 ampliamente para el código de E / S. Por eso es tan difícil de virtualizar.
kinokijuf
De superuser.com/questions/1402537/… : "La ejecución del código del anillo 0 en el anillo 1 provoca muchos fallos de instrucción adicionales, ya que el anillo 1 no puede ejecutar ninguna instrucción privilegiada, de las cuales el anillo 0 del invitado contiene muchas. Con cada de estas fallas, el VMM debe intervenir y emular el código para lograr el comportamiento deseado. Si bien esto funciona, emular miles de estas fallas es muy costoso y perjudica gravemente el rendimiento del huésped virtualizado ".
Dustin Oprea
24

Desde la perspectiva del diseño del sistema operativo, tener múltiples anillos con privilegios es una rareza de x86: la mayoría de las otras CPU solo tienen dos modos (supervisor y usuario). Como tal, diseñar un sistema operativo para requerir múltiples modos privilegiados evitará inmediatamente que se transfiera a cualquier otra CPU. Además, muchos paquetes de virtualización modernos no emulan correctamente niveles de privilegios distintos de 0 y 3, lo que hace que los sistemas operativos que utilizan estos niveles sean mucho más difíciles de probar.

anochecer-inactivo-
fuente
7

Según la página de Wikipedia sobre Ring Security , los anillos 1 y 2 se utilizan para controladores (anillo 1), sistemas operativos invitados (anillo 1) y código privilegiado de E / S (anillo 2), los hipervisores se encuentran en -1/0 (según el hiper-visor) no 1 como dije anteriormente.

Sin embargo, los dos anillos adicionales nunca ayudaron realmente y, por lo tanto, rara vez se usaron. TBH, la mayoría de los códigos que usan los anillos 1 y 2 los han semi-reutilizado de su uso original (como los hipervisores). La mayoría del código de Windows en estos días parece tratar el sistema como si solo tuviera dos niveles (kernel y usuario), probablemente debido a la sobrecarga asociada con la entrada y salida de la tierra del kernel.

Necrolis
fuente
1
Creo que te perdiste un -lugar. ¿Estás seguro de que los hipervisores usan el anillo 1?
user541686
Je, no estaba pensando, debería haber hipervisores en -1 y sistemas operativos invitados en 1, se actualizará así de rápido
Necrolis
4
Windows solo usa dos anillos porque fue diseñado para ejecutarse en otros procesadores (ahora desaparecidos) que solo tenían dos.
David
En mi opinión, hay pocos gastos generales para cambiar de modo. Por lo que tengo entendido, solo el hardware podría asignar más privilegios privilegiados a la CPU (como si ocurriera una interrupción de IO finalizada). Si este cambio de privilegios ocurre en el hardware, dudo que no sea trivial cambiar de anillo. Creo que Windows, Linux o MacOS solo usan los dos anillos más extremos porque los arquitectos reservan los anillos del medio para cosas como la virtualización alojada en el sistema operativo.
Nate Symer