¿Cuál es la diferencia entre Userland y Kernel?

¿Cuál es la diferencia entre Userland y Kernel?

Estoy tratando de entender exactamente qué es el territorio de usuario. todos los que pregunto dicen: "Todo lo que no sea kernel". pero no es tangible para mí. Cuando leo que el kernel puede ejecutar ese controlador en el espacio del usuario o algo así; ¡No puedo imaginarme qué pasará!. Así que agradecería que alguien me aclarara este aspecto.

Respuesta1

En un nivel conceptual, el kernel es todo lo que se ejecuta en un nivel "más privilegiado" de protección de hardware. Eso sería como anillo 0 en procesadores x86, modo de sistema en ARM, modo kernel en MIPS, modo supervisor en 68xxx, etc. El kernel suele estar controlado por interrupciones, ya sea interrupciones de software (llamadas al sistema) o interrupciones de hardware (unidades de disco, red). tarjetas, temporizadores de hardware).

En ese mismo nivel conceptual, "tierra de usuario" es lo que se ejecuta en el modo menos privilegiado (anillo 3 en CPU x86, modo de usuario en ARM o MIPS, etc.). User Land aprovecha la forma en que el kernel suaviza las diferencias menores de hardware, presentando la misma API a todos los programas. Por ejemplo, algunas tarjetas inalámbricas pueden tener registros de control adicionales con respecto a otras, o contener más o menos buffer incorporado para los paquetes entrantes. El código del controlador tiene en cuenta estas diferencias (a veces ignorando características avanzadas o inusuales) y presenta la misma API de socket para todos los programas.

Algunos procesadores (por ejemplo, x86, VAX, Alpha AXP) tienen más de dos modos, pero la arquitectura genérica Unix no utiliza los modos intermedios.

Los programas y procesos que ve ejecutándose en Unix, Linux o *BSD son propiedad del usuario. Dado que los procesos son preventivos, en realidad nunca verá ejecutarse el kernel, solo verá efectos secundarios, como read()el retorno de una llamada al sistema o la ejecución de una función de controlador de señales.

Para responder a su pregunta específica, en Unix, Linux, *BSD un "controlador" suele ser una pequeña pieza de software que se ocupa de las peculiaridades específicas de alguna pieza de hardware: una tarjeta de red, una unidad de disco, una tarjeta de video. El software del controlador casi siempre necesita ejecutarse en Ring 0/modo supervisor/espacio del kernel para tener acceso a las interrupciones del hardware, o a la memoria asignada del hardware o lo que sea. El controlador se encarga de características específicas del hardware y hace que ese hardware encaje en la visión estandarizada o convencional del código del núcleo sobre cómo debería funcionar el hardware. Por lo tanto, ejecutar un controlador en el terreno del usuario requiere que el kernel muestre al programa del terreno de usuario cosas como memoria asignada o registros de dispositivo o interrupciones u otras características especiales. Esto puede ser complicado, ya que las características especiales que un dispositivo puede requerir no encajan fácilmente en la API habitual de estilo Unix que se presenta a los programas terrestres de los usuarios. Además, la programación es un problema, ya que los programas de usuario no suelen responder a las interrupciones con tanta rapidez.

Respuesta2

La mayoría de las CPU modernas tienen unnúcleoo modo supervisor, y un modo restringidousuariomodo. Esta es una característica de hardware de la CPU. "Userland" es otro nombre para el código que se ejecuta en modo de usuario.

Una gran diferencia entre los modos es cómo actúa la MMU de la mayoría de las CPU modernas bajo ellos.

Una MMU permite que un kernel reorganice bloques (o páginas) de RAM para que parezcan codificar en un orden diferente al que están físicamente en la RAM, y también hace que el código en modo de usuario se modifique.trampao "falla"volver al modo kernel si se accede a ciertas páginas. El modo de usuario no puede cambiar lo que hace la MMU, solo el modo kernel puede hacerlo.

Entonces, la MMU permite que el código en modo kernel haga todo tipo de cosas interesantes, como:

  • "organizar" o "asignar" la memoria al código de modo de usuario para que dicho código piense que tiene RAM contigua.
  • implementar un esquema de administración de memoria dinámica donde un proceso necesitaría solicitar memoria antes de intentar usarla.
  • detener los procesos del usuario si utilizan la memoria que no deben.
  • cambie las páginas menos utilizadas al disco si la memoria libre se agota y vuelva a intercambiarlas cuando un proceso intente acceder a ellas.

Puede ver que la MMU, junto con el modo kernel/usuario, es la piedra angular de un sistema operativo multitarea, y utilizando estas herramientas se puede crear un sistema que funcione con cosas de nivel superior como la idea de procesos. Un kernel mantiene tablas de páginas para cada proceso y básicamente reprograma la MMU antes de que cambie al modo de usuario y le dé control a un proceso para su segmento de tiempo. Cosas como mallocy cosas en las que un proceso adquiere memoria hacen que el núcleo modifique las tablas de páginas MMU.

Nuevamente, el modo de usuario no puede hacer nada con las tablas de páginas (y realmente no necesita saber que existen), si necesita memoria, necesitallamarel kernel, lo que provoca un cambio del modo de usuario al modo kernel. Las CPU proporcionan un mecanismo simple llamadointerrupción de softwarepara hacer esto,y hay otras formas más rápidas que utiliza el kernel de Linux.

Debido a esta protección que existe en el modo de usuario, si un programa falla o se vuelve loco y se sobrescribe, el kernel puede detener este proceso. En modo kernel, esta protección no existe, por lo que el kernel dejará de funcionar y por tanto todo su sistema también dejará de funcionar. Cuando ocurre un error irrecuperable como este en el modo kernel, se denomina pánico del kernel. Ver¿Qué es el "pánico del núcleo"?para detalles.

El kernel puede ejecutar ese controlador en el área de usuario.

El modo kernel o supervisor de las CPU también evita que el modo usuario acceda directamente a los dispositivos de E/S; la idea es que tiene que llamar al kernel para hacerlo. En Linux, el código que se comunica directamente con los dispositivos (se ejecutan en modo kernel) escontroladores de dispositivo(un tipo demódulo del núcleo, puedes manipularlos con comandos como lsmod, insmod, modprobey rmmod).

¿Qué sucede si el controlador de su dispositivo, que se ejecutaría en modo kernel con la configuración más simple, tiene un error y hace algo desagradable como sobrescribir cosas aleatorias en la RAM (y como está en modo kernel, tiene acceso ilimitado a toda la RAM y puede sobrescribir? el propio núcleo). Sería bueno si pudiéramos ejecutar el controlador del dispositivo en modo de usuario, de modo que no pueda hacer nada con el kernel ni con otros procesos.

Desafortunadamente, cambiar del modo de usuario al modo kernel (llamadocambio de contexto) es lento, ya que básicamente se debe activar y desactivar todo el estado de la CPU para cada proceso o para el propio núcleo. Entonces, tenemos dos cosas en desacuerdo, seguridad o velocidad, y por lo tanto es un punto de discordia y diseño.

Los kernels que intentan hacer todo lo posible en modo usuario se llamanmicronúcleos, y Linux es lo contrario, que se llamamonolítico. Existen controladores en modo de usuario para Linux (consulte FUSE para ver un ejemplo) e incluso hay unestructuraque lo permita.

Respuesta3

Basándonos en lo que dijo Bruce, se debe confiar en todo el código que se proporciona al kernel. Si hay alguna forma de que el kernel pueda ejecutar código malicioso, se acabó el juego. Ahí es donde entra en juego la separación de privilegios entre el código ejecutado por el usuario y el código ejecutado por el kernel. El código que ejecuta un usuario no necesariamente tiene que estar 100% libre de maldad. El kernel no lo ejecuta directamente.

Los programas del área de usuario simplemente interactúan con partes expuestas del kernel, como las API y los módulos cargados. Un ejemplo sería iptables. Hay varios módulos del kernel (.ko) o 'controladores' que realmente hacen el trabajo de iptables, son parte delmarco de filtro de red. Cuando ejecuta comandos usando, /sbin/iptablesestá utilizando el componente de usuario que a su vez se comunica con los módulos netfilter que están cargados en el kernel. Esto permite la separación para que el kernel no pueda ejecutar el código de usuario sin darse cuenta.

Respuesta4

En los sistemas operativos Unix/Linux, diferenciamos entreespacio de usuarioyespacio del núcleo. Esos son solo sinónimos de usuario y de dónde pertenece el kernel.

Puedes entenderlo de la siguiente manera. Puede interactuar con todo lo que sucede en el espacio del usuario. Lo cual no es el caso en el espacio del kernel. Los demonios, bibliotecas y aplicaciones pertenecen al espacio del usuario. Todo el código que se ejecuta fuera del núcleo del sistema operativo pertenece al espacio de usuario (tierra de usuario).

El espacio del núcleo es donde se ejecuta el propio núcleo. Es un área restringida a la que ni siquiera el root tiene acceso. Pero el usuario root puede manipular algunos parámetros del kernel mediante una interfaz proporcionada por el kernel (procfs, sysfs).

La memoria del sistema es un buen ejemplo para explicar la diferencia entre kernel y espacio de usuario. Un demonio (que se ejecuta en el espacio del usuario) necesita algo de memoria para ejecutarse. El kernel gestiona toda la memoria disponible. El demonio obtiene algo de "memoria virtual" del kernel, donde no sabe si se trata de memoria física o espacio de intercambio o lo que sea. El núcleo es el que determina qué tipo de memoria obtiene el proceso. Porque la gestión de la memoria ocurre en el espacio del kernel. Otras cosas que suceden en el espacio del kernel son la programación de procesos, la comunicación entre procesos, la protección y gestión de la memoria, las llamadas al sistema...

¿Qué es exactamente el territorio de usuario?

Entonces, el área de usuario es lo que hace (o puede hacer) el demonio cuando interactúa con los recursos del sistema operativo (E/S, red, memoria, tiempo de CPU). Esos recursos están ocultos del proceso en el espacio del kernel.

La respuesta corta:

Así es la cabina de un avión para el piloto.

información relacionada