¿Por qué las CPU x86 solo utilizan dos de cada cuatro «anillos»?

Al aprender más sobre cómo funcionan e interactúan los sistemas operativos y el hardware en el que se ejecutan, es posible que se sorprenda al ver lo que parecen ser rarezas o una infrautilización de los «recursos». ¿Porqué es eso? La publicación de preguntas y respuestas del superusuario 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 de superusuario AdHominem quiere saber por qué las CPU x86 solo usan dos de los cuatro anillos:

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

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

La respuesta

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

Hay dos razones principales.

La primera es que, aunque las CPU x86 ofrecen cuatro anillos de protección de memoria, la granularidad de la protección que se ofrece es solo a nivel de segmento. Es decir, cada segmento se puede configurar en un anillo específico (nivel de privilegio) junto con otras protecciones como deshabilitar la escritura. Pero no hay tantos descriptores de segmento disponibles. A la mayoría de los sistemas operativos les gustaría tener una granularidad mucho más fina de protección de memoria, 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 (tanto como pueden de todos modos) 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 bit «privilegiado». Este bit controla si el procesador tiene que estar o no 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 la memoria es solo dos: una página puede ser accesible desde el modo no privilegiado, o no. Por lo tanto, solo dos anillos. Para tener cuatro anillos posibles 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 números de anillo posibles (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 podía ser relativamente portátil para múltiples arquitecturas de procesadores, y que era algo bueno. Y algunos procesadores solo admiten dos anillos. Al no depender de varios 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 del desarrollo de Windows NT. Los diseñadores de NT (David Cutler y su equipo, a quienes Microsoft contrató en DEC Western Region Labs) tenían una amplia experiencia previa en VMS; de hecho, Cutler y algunos otros se encontraban 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 ejecutaban en los Rings 1 y 2 de VMS (Record Management Services y CLI, respectivamente) se dejaron fuera del diseño de NT. Ring 2 en VMS no se trataba realmente de seguridad del sistema operativo, sino más bien de preservar el entorno CLI del usuario de un programa a otro, y Windows no tenía ese concepto; la CLI se ejecuta como un proceso ordinario. En cuanto al anillo 1 de VMS , el código RMS en el anillo 1 tenía que llamar al anillo 0 con bastante frecuencia, y las transiciones de anillo son caras. Resultó ser mucho más eficiente simplemente ir al Anillo 0 y terminar con él en lugar de tener muchas transiciones del Anillo 0 dentro del Anillo 1 código (de nuevo, no es que NT tenga algo como RMS de todos modos).

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

Los sistemas operativos x86 modernos no solo ignoran en gran medida la segmentación (simplemente 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 señalar estructuras de datos clave del sistema operativo ), también ignoran en gran medida cosas como «segmentos de estado de tarea». El mecanismo TSS fue claramente diseñado para el cambio de contexto de subprocesos, pero resulta tener 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 realmente 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 tareas no existe, etc., y los sistemas operativos continúan usando solo dos anillos.


¿Tiene algo que agregar a la explicación? Habla en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange expertos en tecnología? Consulte el hilo de discusión completo aquí .

responroot

Entradas recientes

Steamlytics: La nueva herramienta imprescindible para los gamers de Steam

  El mundo del gaming ha experimentado un crecimiento exponencial en los últimos años. La…

1 año hace

Cuándo reemplazar su antigua unidad flash USB

Stokkete/Shutterstock.com ¿Sigue utilizando una unidad flash USB obsoleta para almacenar sus archivos? ¿Por qué no…

3 años hace

¿Qué es una pantalla Nano IPS?

LG Los fabricantes siempre intentan mejorar el rendimiento de imagen de los monitores. Como resultado,…

3 años hace

10 formas de jugar con un presupuesto bajo (o nulo)

Patty Chan/Shutterstock.com Si cree en lo que ve en las redes sociales, puede pensar en…

3 años hace

¿Demasiadas suscripciones? Aquí está cómo empezar a cortarlos

Seksan.TH/Shutterstock.com Los servicios de suscripción como Netflix, Game Pass y Spotify nos permiten consumir tantas…

3 años hace

Cómo configurar la puerta de enlace predeterminada en Linux

fatmawati achmad zaenuri/Shutterstock El acceso a Internet, oa cualquier otra red, se rige por la…

3 años hace