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?


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.


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.


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.