2011-07-15 11 views
64

Un par de preguntas con respecto a los anillos de privilegio CPU x86:Anillos Privilege de CPU: ¿Por qué los anillos 1 y 2 no se utilizan?

  • ¿Por qué no están los anillos 1 y 2 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?

+0

esto podría ayudar http://compgroups.net/comp.lang .asm.x86/Privilege-levels-1-and-2 – alexius

Respuesta

59

Como escritor sistema operativo aficionado, he encontrado que debido paginación (una parte importante del modelo de protección moderna) sólo tiene un concepto de privilegio (anillo 0,1,2) y sin privilegios, el beneficio para los anillos 1 y 2 fueron disminuidos grandemente.

La intención de Intel de tener anillos 1 y 2 es que el sistema operativo coloque los controladores de dispositivo 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 cierto modo, "en su mayoría" 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. Así que no es un mal lugar para los conductores como Intel planeó ...

Dicho esto, definitivamente tienen uso en algunos diseños. De hecho, no siempre directamente por el sistema operativo. Por ejemplo, VirtualBox, Virtual Machine, pone el código del kernel invitado en el anillo 1. También estoy seguro de que algunos sistemas operativos sí los usan, pero no creo que sea un diseño popular en este momento.

+16

wHOA VirtualBox usa el anillo 1 ?! ¡Eso es pura maravilla! Muchas gracias por la información, ¡esa es una gran respuesta! +1 – Mehrdad

+13

¡Sí, consulte http://www.virtualbox.org/manual/ch10.html#idp13729504 para obtener más detalles! –

+8

OS/2 usó el anillo 2 extensamente para el código de E/S. Es por eso que es tan difícil de virtualizar. – kinokijuf

16

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.

3

De acuerdo con wikipedia (http://en.m.wikipedia.org/wiki/Ring_(computer_security)), los anillos 1 y 2 se usan para controladores (anillo 1), sistemas operativos invitados (anillo 1) y código de e/s privilaged (anillo 2), hipervisores situados en -1/0 (dependiendo del hipervisor) no 1 como dije previamente.

Sin embargo, los dos anillos extra nunca ayudaron realmente y, por lo tanto, se usaron muy poco. 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 entrar y salir del kernel

+1

Creo que te perdiste un '-' en algún lado. ¿Estás seguro de que los hipervisores usan el anillo 1? – Mehrdad

+0

Heh, no estaba pensando, debería haber hipervisores en -1 y SO invitados en 1, actualizará ese rápido – Necrolis

+2

Windows solo usa dos timbres porque fue diseñado para ejecutarse en otros procesadores (ahora desaparecidos) que solo tenían dos. – David

Cuestiones relacionadas