Transición del espacio de usuario al espacio del kernel

Transición del espacio de usuario al espacio del kernel

Tanto físicamente (hardware, anillos) como lógicamente (software), ¿qué es la transición del espacio del usuario al espacio del kernel? Y viceversa.

O, de manera más general, ¿qué sucede cuando se produce una transición de "espacio" (o anillo)? ¿Y qué lo hace costoso (uno de los principales problemas de Minix)?

Esta pregunta sigue para los comentarios enesterespuesta.

Respuesta1

Desde la perspectiva del sistema operativo, el espacio del usuario es la ejecución de código desde un proceso y el espacio del kernel es la ejecución de código desde el kernel. Una transición del espacio del usuario al espacio del kernel es la entrada a unllamada al sistema, y una transición del espacio del kernel al espacio del usuario es el retorno de una llamada al sistema.

Desde la perspectiva del procesador, el espacio del usuario y el espacio del kernel son niveles de privilegio. “Anillo 3” y “anillo 0” son los nombres utilizados en los procesadores Intel x86 (hay anillos 1 y 2, pero la mayoría de los Unices no los usan porque no tienen mucho uso). Otros tipos de CPU usan nombres diferentes, por ejemplo, modo de usuario y modos privilegiados (o de sistema) en ARM.

La transición entre modos se realiza mediante instrucciones que cambian el modo del procesador y saltan a una dirección diferente; El detalle de estas instrucciones depende en gran medida del tipo de CPU. Además de cambiar el modo del procesador y saltar a una dirección diferente, las instrucciones de transición de modo generalmente realizan otras tareas, como intercambiar el valor de algunos registros (nuevamente, esto depende en gran medida de la CPU).

Una transición del modo de usuario al modo kernel tiene que saltar a una dirección fija, que ha sido configurada por el kernel. Para mantener la seguridad del sistema, no se puede permitir que el código en modo usuario cambie el procesador al modo kernel excepto para invocar un fragmento de código (el punto de entrada de la llamada al sistema) que ha sido especialmente diseñado para funcionar de forma segura sin importar cuál sea la situación. el código de modo de usuario ha estado haciendo. El punto de entrada de llamadas al sistema primero guarda los valores de registro en un área de memoria designada y realiza cualquier otra contabilidad necesaria, luego lee los parámetros de la llamada al sistema y envía la llamada al sistema a la función apropiada. Dependiendo del tipo de procesador, la contabilidad puede implicar establecer elMMUtablas adecuadamente. El núcleo puede decidir en cualquier momento pausar el proceso de llamada y programar otro proceso.

Una transición del modo kernel al modo usuario puede ocurrir en cualquier lugar que el kernel considere adecuado. El kernel restaura los registros guardados, la configuración de MMU y cualquier otra cosa que sea necesaria, escribe el valor de retorno de la llamada al sistema y finalmente regresa a la instrucción en el proceso después de la llamada al sistema.

información relacionada