it-swarm-es.com

¿Qué significa que cuando se ejecuta el código en el modo [Kernel | Usuario]?

¿Qué significa cuando el código se ejecuta en el kernel o en el modo de usuario?

14
Luc M

Modo Kernel

Un programa que se ejecuta en este modo tiene acceso completo al hardware subyacente. Puede ejecutar cualquier instrucción de CPU, acceder a cualquier dirección de memoria y, esencialmente, hacer lo que quiera.

El modo de usuario El código que se ejecuta en este modo está restringido a la modificación de hardware a través de la API del sistema operativo. It no puede Acceda al hardware directamente en absoluto.

Lo interesante aquí es que en las arquitecturas comunes, esto se aplica a través de hardware, no solo el sistema operativo. En particular, la arquitectura x86 tiene anillos de protección .

La gran ventaja de este tipo de separación es que cuando un programa se bloquea que se ejecuta en modo de usuario, no siempre es fatal. De hecho, en los sistemas modernos, it por lo general no.

Echa un vistazo a Jeff's Writeup. Es su buena cosa habitual.

15
gvkv

La respuesta corta es: Simplemente le dice dónde están pasando los programas su tiempo.

Para una respuesta más larga, lo explicaré en dos pasos. Primero:

1. Entrar en el modo Kernel

Cada código regular que escribe, se ejecuta en "Modo de usuario".

Los programas pueden usar las bibliotecas para hacer tareas comunes para ellos. Este es también el código de modo de usuario.

En algún momento, el programa puede requerir una función central del sistema. Por ejemplo:

  • accediendo contenidos de archivos desde el disco.
  • reservando una parte la memoria libre
  • conseguir el marco de video de un controlador de webcam
  • envío de datos de imagen a la tarjeta gráfica.
  • enviando un paquete de red.

Este esencial, cerca de Hardware, la funcionalidad es parte del núcleo. Ese es el programa central detrás de todo en su computadora. Gestiona todo lo que los programas necesitan para funcionar.

Para usar una función en el kernel, la ruta de ejecución del programa literalmente hace un salto del modo de usuario al código del kernel. El kernel hace su trabajo, y pliega el camino de ejecución al modo de usuario.

Cuando un programa pasa mucho tiempo en el modo Kernel, a menudo significa que está haciendo mucha actividad relacionada con el hardware. Por ejemplo, el disco busca o transmisión de video. El hardware también podría estar mal funcionamiento; Hacer que el procesamiento sea lento y causando que el programa gaste una cantidad de tiempo inusual en el espacio del kernel.


2 la diferencia

El código en el espacio del kernel es alto rendimiento. Las otras partes del kernel pueden llamarlo directamente, y el código tiene acceso directo a cada recurso del sistema, sin ninguna revisión de límites. El cambio entre el kernel/modo de usuario también es una operación costosa, que se evita completamente ejecutando todo en el código del kernel.

Sin embargo, dentro del kernel, no hay mucho espacio para la verificación de seguridad, protección contra choques, o escribir en las partes incorrectas de la memoria. Estos son servicios que el kernel puede proporcionar a otros programas. Trucos Programas para creer que el mundo se ve diferente (los programas viven en un entorno virtual, arqueroso/restringido) y, por lo tanto, todo lo que viene dentro/fuera de los programas se puede traducir y proteger.

El kernel en sí no puede tener mucha protección porque no hay nada detrás de él para protegerlo. Es el corazón del sistema, y ​​cuando eso se detiene, todo termina. Obtienes un pánico del kernel, o en Windows, el famoso BSOD.

Ese es también el riesgo de código basado en el núcleo, y la razón por la que se mueven más subsistemas con requisitos de bajo rendimiento al espacio de usuario. Sin embargo, sin embargo, las piezas relacionadas con el hardware esencial son generalmente el código del kernel que no va a cambiar en cualquier momento pronto.

3
vdboor

Es la distinción de si el código de ejecución actualmente está permitido interactuar directamente con varias piezas de hardware. El código de modo kernel puede escribir en buses de dispositivos, cambiar las asignaciones de memoria, cambiar los procesos de ejecución, etc. El modo de usuario puede hacer computación, y puede hacer que las llamadas del sistema en el kernel interactúen con el resto del mundo.

2
Phil Miller