x86 cpu privileges

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



privileges (3)

Como escritor de sistema operativo aficionado, encontré que debido a que la búsqueda (una parte importante del modelo de protección moderna) solo tiene un concepto de privilegiado (anillo 0,1,2) y sin privilegios, el beneficio para los anillos 1 y 2 disminuyó enormemente.

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

Los anillos 1 y 2 son en cierta forma, "mayormente" privilegiados. Pueden acceder a páginas de supervisor, pero si intentan usar una instrucción privilegiada, aún así GPF les gustaría que ring 3 lo hiciera. Entonces, no es un mal lugar para los conductores ya que Intel planeó ...

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 , pone el código del kernel invitado en el anillo 1. También estoy seguro de que algunos sistemas operativos sí los usan, simplemente no creo que sea un diseño popular en este momento.

Un par de preguntas sobre el anillo de privilegios de la CPU x86:

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

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


De acuerdo con la wikipedia ( http://en.m.wikipedia.org/wiki/Ring_(computer_security) ), los anillos 1 y 2 se usan para los controladores (anillo 1), los sistemas operativos invitados (anillo 1) y los privilegios de entrada y salida. código (anillo 2), los hipervisores están en -1/0 (dependiendo del hipervisor) no en 1, como dije anteriormente.

Sin embargo, los dos anillos extra 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 redistribuido parcialmente de su uso original (como los hipervisores). La mayoría del código de Windows en estos días parece tratar el sistema como que solo tiene dos niveles (kernel y usuario), probablemente debido a la sobrecarga asociada con la entrada y salida de la tierra del kernel.


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, el diseño de un sistema operativo para requerir múltiples modos con privilegios evitará inmediatamente que se transmita a otra CPU. Además, muchos paquetes de virtualización modernos no emulan correctamente los niveles de privilegio distintos de 0 y 3, lo que hace que los sistemas operativos que utilizan estos niveles sean mucho más difíciles de probar.