GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿diferencia entre el espacio del usuario y el espacio del kernel?

¿Se utiliza el espacio de Kernel cuando Kernel se ejecuta en nombre del programa de usuario, es decir, System Call? ¿O es el espacio de direcciones para todos los subprocesos del Kernel (por ejemplo, el programador)?

Si es el primero, ¿significa que el programa de usuario normal no puede tener más de 3 GB de memoria (si la división es 3 GB + 1 GB)? Además, en ese caso, ¿cómo puede el kernel usar la memoria alta, porque a qué dirección de memoria virtual se asignarán las páginas de la memoria alta, ya que 1 GB de espacio del kernel se asignará lógicamente?

Respuesta aceptada:

¿Se utiliza el espacio de Kernel cuando Kernel se ejecuta en nombre del programa de usuario, es decir, System Call? ¿O es el espacio de direcciones para todos los subprocesos del Kernel (por ejemplo, el programador)?

Sí y sí.

Antes de continuar, debemos decir esto sobre la memoria.

La memoria se divide en dos áreas distintas:

  • El espacio de usuario , que es un conjunto de ubicaciones donde se ejecutan los procesos de usuario normales (es decir, todo lo que no sea el kernel). La función del kernel es administrar las aplicaciones que se ejecutan en este espacio para que no interfieran entre sí y con la máquina.
  • El espacio del kernel , que es la ubicación donde se almacena el código del núcleo y se ejecuta bajo.

Los procesos que se ejecutan en el espacio del usuario tienen acceso solo a una parte limitada de la memoria, mientras que el kernel tiene acceso a toda la memoria. Los procesos que se ejecutan en el espacio del usuario también no tener acceso al espacio del núcleo. Los procesos del espacio de usuario pueden solo acceder a una pequeña parte del kernel a través de una interfaz expuesta por el núcleo:el sistema llama . Si un proceso realiza una llamada al sistema, se envía una interrupción de software al núcleo, que luego envía el controlador de interrupción apropiado y continúa su trabajo una vez que el controlador ha terminado.

El código de espacio del kernel tiene la propiedad de ejecutarse en "modo kernel", que (en su computadora típica de escritorio -x86-) es lo que llama código que se ejecuta bajo el anillo 0 . Por lo general, en la arquitectura x86, hay 4 anillos de protección . Anillo 0 (modo kernel), Anillo 1 (puede ser utilizado por hipervisores o controladores de máquinas virtuales), Anillo 2 (puede ser utilizado por controladores, aunque no estoy tan seguro de eso). El anillo 3 es bajo el que se ejecutan las aplicaciones típicas. Es el anillo con menos privilegios y las aplicaciones que se ejecutan en él tienen acceso a un subconjunto de las instrucciones del procesador. El anillo 0 (espacio del kernel) es el anillo más privilegiado y tiene acceso a todas las instrucciones de la máquina. Por ejemplo, una aplicación "simple" (como un navegador) no puede usar instrucciones de ensamblaje x86 lgdt para cargar la tabla de descriptores globales o hlt para detener un procesador.

Si es el primero, ¿significa que el programa de usuario normal no puede tener más de 3 GB de memoria (si la división es 3 GB + 1 GB)? Además, en ese caso, ¿cómo puede el kernel usar la memoria alta, porque a qué dirección de memoria virtual se asignarán las páginas de la memoria alta, ya que 1 GB de espacio del kernel se asignará lógicamente?

Para obtener una respuesta a esto, consulte la excelente respuesta de wag aquí

Relacionado:Visibilidad de la barra de estado de Nautilus:¿comprobar rápidamente el espacio libre?
Linux
  1. Diferencia entre los comandos "su" y "su -" en Linux

  2. ¿Diferencia entre el usuario de Sudo y el usuario raíz?

  3. Linux – ¿Diferencia entre Pts y Tty?

  4. Diferencia entre rutas absolutas y relativas en Linux

  5. Diferencia entre los comandos 'ifconfig' e 'ip'

Comprender la diferencia entre los comandos sudo y su en Linux

¿Cuál es la diferencia entre los núcleos de macOS y Linux?

¿Cuál es la diferencia entre Linux y Unix?

diferencia entre netstat y ss en linux?

diferencia de linux entre sudo crontab -e y simplemente crontab -e

¿Cuál es la diferencia entre el espacio de usuario y el espacio del kernel?