GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué el núcleo se asigna al mismo espacio de direcciones que los procesos?

Para responder a otra parte de la pregunta:el kernel se asigna a cada espacio de direcciones de procesos parcialmente por razones de eficiencia/rendimiento (también hay otros, estoy seguro).

En la mayoría del hardware moderno, es más rápido cambiar el nivel de seguridad (lo que permite el acceso a las páginas que de otro modo están protegidas, como se menciona en la respuesta de Alexey) para realizar llamadas al sistema y otras funciones proporcionadas por el kernel que cambiar el nivel de seguridad y todo el mapa de memoria virtual, junto con todos los vaciados de caché TLB asociados y todo lo demás involucrado en un cambio de contexto completo.

Dado que las llamadas al sistema pueden ser eventos bastante frecuentes, el diseño que ha evolucionado en Linux y muchos otros lugares para tratar de minimizar la sobrecarga de utilizar los servicios del kernel y mapear el código del kernel y (al menos algunos de los) datos en cada proceso es parte de eso.


Un proceso "posee" todo el espacio de direcciones virtuales aquí, el núcleo y las porciones de usuario.

Su incapacidad para mirar y pinchar el código y los datos del kernel no se debe a los diferentes espacios de direcciones, se debe a los diferentes derechos/permisos de acceso establecidos en las tablas de páginas. Las páginas del kernel están configuradas de tal manera que las aplicaciones normales no pueden acceder a ellas.

Sin embargo, es costumbre referirse a las dos partes de un todo como el espacio del kernel y el espacio del usuario y eso puede ser confuso.


Imagínese lo que sucedería si el kernel no está mapeado en cada espacio de direcciones de proceso. Tendría una falla triple porque, digamos que ocurre la interrupción del temporizador, luego el procesador llama a la rutina ISR usando IDT (Tabla de descriptores de interrupción). Si el kernel no está mapeado, entonces la dirección IDT deja de ser válido y, por lo tanto, se producirá una falla triple.


Otra razón importante por la que decimos que el núcleo está en el espacio de direcciones del proceso es que el núcleo puede acceder al código/datos de usuario del proceso ACTUAL, es decir, el espacio de direcciones virtuales 0~3G.

Lo siento por mi pobre inglés. No soy un hablante nativo de inglés.


Linux
  1. ¿Por qué el Pgid de los procesos secundarios no es el Pid del padre?

  2. ¿Por qué `md5sum` no da el mismo hash que Internet?

  3. Si los procesos heredan el entorno de los padres, ¿por qué necesitamos exportar?

  4. Linux:¿por qué no hay un sistema de archivos Rootfs presente en el sistema?

  5. ¿Por qué varias instancias de terminal de pareja tienen el mismo Pid?

Comprensión de la compatibilidad con direcciones virtuales de 52 bits en el kernel Arm64

Espacio de direcciones del proceso de 32 bits en Linux de 64 bits

¿Por qué se implementa el servidor NFS de Linux en el kernel en lugar del espacio de usuario?

¿Por qué los enlaces duros parecen ocupar el mismo espacio que los originales?

¿De qué sirve tener una parte del núcleo en el espacio de memoria virtual de los procesos de Linux?

múltiples interfaces físicas con IP en la misma subred