es.phhsnews.com


es.phhsnews.com / ¿Por qué las CPU x86 solo utilizan dos de los cuatro "anillos"?

¿Por qué las CPU x86 solo utilizan dos de los cuatro "anillos"?


Al aprender más sobre cómo funcionan los sistemas operativos y el hardware que funcionan e interactúan entre ellos, puede sorprenderse para ver lo que parecen ser rarezas o subutilización de los "recursos" que ocurren. ¿Porqué es eso? La publicación de preguntas y respuestas 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, una agrupación de sitios de preguntas y respuestas impulsada por la comunidad.

Foto cortesía de Lemsipmatt (Flickr).

The Question

SuperUser reader AdHominem quiere saber por qué las CPU x86 solo usan dos de cuatro rings:

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

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

El colaborador de Superconductor Answer

Jamie Hanrahan tiene la respuesta para nosotros:

Hay dos razones principales.

El primero es que, aunque las CPU x86 ofrecen cuatro anillos de protección de memoria, la granularidad de la protección ofrecida es solo por nivel de segmento. Es decir, cada segmento se puede establecer en un anillo específico (nivel de privilegio) junto con otras protecciones, como escritura desactivada. Pero no hay tantos descriptores de segmento disponibles. A la mayoría de los sistemas operativos le gustaría tener una granularidad mucho más fina de la protección de la memoria, como ... para páginas individuales.

Por lo tanto, ingrese la protección basada en la tabla de páginas. La mayoría, si no todos, los modernos sistemas operativos x86 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 bajo orden 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 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 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 tabla de página para codificar uno de los cuatro números de timbre posibles (al igual que los descriptores de segmento). Sin embargo, no lo hacen.

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

Existe un tercer motivo específico para el desarrollo de Windows NT. Los diseñadores de NT (David Cutler y su equipo, a quienes Microsoft contrató fuera de DEC Western Region Labs) tenían 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 Anillos 1 y 2 de VMS (Servicios de administración de registros y CLI, respectivamente) quedaron fuera del diseño NT. Ring 2 en VMS no era realmente sobre la seguridad del sistema operativo, sino sobre la preservación del entorno CLI del usuario de un programa al siguiente, 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 Anillo 1 tuvo que llamar con frecuencia al Anillo 0 con bastante frecuencia, y las transiciones de timbre son costosas. Resultó ser mucho más eficiente ir a Anillo 0 y terminar con eso en lugar de tener muchas transiciones 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, está 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 NT o verdaderos kernels Unix-ish se implementaran en él, y no sabían realmente qué usaría el sistema operativo. No fue hasta que obtuvimos la aplicación de x86 que pudimos implementar kernels verdaderos Unix-ish o VMS.

Los sistemas operativos modernos x86 no solo ignoran la segmentación (simplemente configuran los segmentos C, D y S con una dirección base de 0 y tamaño de 4 GB; los segmentos F y G a veces se utilizan para señalar estructuras de datos del sistema operativo clave), también ignoran en gran medida cosas como "segmentos de estado de tarea". El mecanismo TSS fue diseñado claramente para el cambio de contexto de hilo, 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 realmente excepcionales, como una excepción de doble falla.

En cuanto a la arquitectura x64, se omitieron muchas de estas características en desuso. Para su crédito, AMD realmente habló con los equipos kernel del sistema operativo y les preguntó qué necesitaban de x86, qué no necesitaban o qué no deseaban, 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.


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


¿Cómo se realiza el aviso de Bash Cambiar los colores cuando se inicia sesión en un servidor?

¿Cómo se realiza el aviso de Bash Cambiar los colores cuando se inicia sesión en un servidor?

Si accede a varios servidores durante el día de trabajo, entonces podrá saber con cuál está trabajando en un mirada basada en un esquema de color puede ser muy útil. La publicación de preguntas y respuestas SuperUser de hoy ayuda al lector a lograr un colorido nirvana en su entorno de trabajo. La sesión de preguntas y respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, una agrupación de sitios de preguntas y respuestas.

(how-to)

La mejor forma de transmitir de Android a PS4

La mejor forma de transmitir de Android a PS4

Si tiene un dispositivo Android y una PlayStation 4, tal vez se pregunte cuál es la mejor manera de transmitir sus fotos y videos desde su teléfono o tableta a la PS4. Si haces una búsqueda en Google, obtendrás todo tipo de resultados con un montón de diferentes soluciones posibles.¡Probé la mayoría de ellos y me sorprendió descubrir que nada funcionaba realmente! La solu

(How-to)