Página principal » cómo » ¿Por qué las CPU x86 solo usan dos de cada cuatro “anillos”?

    ¿Por qué las CPU x86 solo usan dos de cada cuatro “anillos”?

    Al aprender más acerca de cómo los sistemas operativos y el hardware en el que funcionan e interactúan entre sí, es posible que se sorprenda al ver lo que parece ser una rareza o una infrautilización de los "recursos". ¿Porqué es eso? La publicación de preguntas y respuestas de SuperUser de hoy tiene la respuesta a la pregunta de un lector curioso.

    La sesión de Preguntas y Respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, un grupo de sitios web de preguntas y respuestas impulsado por la comunidad..

    Foto cortesía de Lemsipmatt (Flickr)..

    La pregunta

    El lector SuperUser AdHominem quiere saber por qué las CPU x86 solo usan dos de cuatro anillos:

    Linux y Windows basados ​​en sistemas x86 solo usan Anillo 0 para modo kernel y Anillo 3 para el modo de usuario. ¿Por qué los procesadores distinguen cuatro anillos diferentes si todos terminan usando dos de todos modos? Ha cambiado esto con la arquitectura AMD64?

    ¿Por qué las CPU x86 solo usan dos de cuatro anillos??

    La respuesta

    El colaborador de SuperUser Jamie Hanrahan tiene la respuesta para nosotros:

    Hay dos razones principales.

    La primera es que, aunque las CPU x86 sí ofrecen cuatro anillos de protección de memoria, la granularidad de protección que se ofrece es solo a nivel por segmento. Es decir, cada segmento se puede configurar para un anillo específico (nivel de privilegio) junto con otras protecciones como la escritura deshabilitada. Pero no hay tantos descriptores de segmento disponibles. La mayoría de los sistemas operativos desearían tener una granularidad de protección de memoria mucho más fina, como ... para páginas individuales.

    Entonces, ingrese la protección basada en tablas de páginas. La mayoría, si no todos, los sistemas operativos x86 modernos ignoran más o menos el mecanismo de segmentación (todo lo que pueden) y confían en la protección disponible de los bits de orden inferior en las entradas de la tabla de páginas. Uno de estos se llama el bit "privilegiado". Este bit controla si el procesador debe estar en uno de los niveles "privilegiados" para acceder a la página. Los niveles "privilegiados" son PL 0, 1 y 2. Pero es solo un bit, por lo que en el nivel de protección página por página, el número de "modos" disponibles en lo que respecta a la protección de memoria es solo dos: se puede acceder a una página desde el modo sin privilegios, o no. Por lo tanto, sólo dos anillos. Para tener cuatro posibles anillos para cada página, tendrían que tener dos bits de protección en cada entrada de la tabla de páginas para codificar uno de los cuatro posibles números de anillo (al igual que los descriptores de segmento). Sin embargo, no lo hacen.

    La otra razón es el deseo de portabilidad del sistema operativo. No se trata solo de x86; Unix nos enseñó que un sistema operativo podría ser relativamente portátil a múltiples arquitecturas de procesador, y que era algo bueno. Y algunos procesadores soportan solo dos anillos. Al no depender de los múltiples anillos en la arquitectura, los implementadores del sistema operativo hicieron que los sistemas operativos fueran más portátiles..

    Hay una tercera razón que es específica para el desarrollo de Windows NT. Los diseñadores de NT (David Cutler y su equipo, a quienes Microsoft contrató de DEC Western Region Labs) tenían una amplia experiencia previa en VMS; de hecho, Cutler y algunos de los otros estaban entre los diseñadores originales de VMS. Y el procesador VAX para el que se diseñó VMS tiene cuatro anillos (VMS usa cuatro anillos).

    Pero los componentes que se ejecutan en VMS Anillos 1 y 2 (Record Management Services y CLI, respectivamente) quedaron fuera del diseño de NT. Anillo 2 en VMS no se trataba realmente de la seguridad del sistema operativo, sino de preservar el entorno CLI del usuario de un programa a otro, y Windows no tenía ese concepto; El CLI se ejecuta como un proceso ordinario. En cuanto a los VMS Anillo 1, el código RMS en Anillo 1 tuvo que llamar a Anillo 0 con bastante frecuencia, y las transiciones en anillo son caras. Resultó ser mucho más eficiente simplemente ir a Anillo 0 y terminar con esto en lugar de tener una gran cantidad de Anillo 0 transiciones dentro del Anillo 1 código (una vez más, no es que NT tenga nada como RMS de todos modos).

    En cuanto a por qué x86 implementó cuatro anillos mientras que los sistemas operativos no los usaron, se habla de sistemas operativos de diseño mucho más reciente que x86. Muchas de las funciones de programación del sistema de x86 se diseñaron mucho antes de que se implementaran NT o los verdaderos núcleos Unix-ish en él, y no sabían realmente qué utilizaría el sistema operativo. No fue hasta que obtuvimos la paginación en x86 que pudimos implementar verdaderos núcleos Unix-ish o como VMS.

    Los sistemas operativos x86 modernos no solo ignoran en gran medida la segmentación (solo configuran los segmentos C, D y S con una dirección base de 0 y un tamaño de 4 GB; los segmentos F y G a veces se usan para apuntar a estructuras de datos clave del sistema operativo). ), también ignoran en gran medida cosas como "segmentos de estado de tarea". El mecanismo de TSS fue claramente diseñado para el cambio de contexto de subprocesos, pero resulta que tiene demasiados efectos secundarios, por lo que los sistemas operativos x86 modernos lo hacen "a mano". La única vez que x86 NT cambia las tareas de hardware es para algunas condiciones verdaderamente excepcionales, como una excepción de doble falla.

    Con respecto a la arquitectura x64, muchas de estas características en desuso quedaron fuera. Para su crédito, AMD en realidad habló con los equipos del kernel del sistema operativo y les preguntó qué necesitaban de x86, qué no necesitaban o no querían, y qué les gustaría agregar. Los segmentos en x64 existen solo en lo que podría llamarse forma vestigial, el cambio de estado de tarea no existe, etc., y los sistemas operativos continúan usando solo dos anillos.


    ¿Tienes algo que agregar a la explicación? Apaga el sonido en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange con experiencia en tecnología? Echa un vistazo a la discusión completa aquí.