Espacio de usuario y espacio del kernel
Un sistema operativo de computadora moderno generalmente segrega la memoria virtual en espacio de usuario y espacio de kernel. Principalmente, esta separación sirve para brindar protección a la memoria y al hardware contra comportamientos de software maliciosos o errantes.
El espacio del kernel está estrictamente reservado para ejecutar un kernel de sistema operativo privilegiado, extensiones de kernel y la mayoría de los controladores de dispositivos. Por el contrario, el espacio de usuario es el área de memoria donde se ejecutan el software de aplicación y algunos controladores.
Resumen
El término espacio de usuario (o área de usuario) se refiere a todo el código que se ejecuta fuera del núcleo del sistema operativo. El espacio de usuario generalmente se refiere a los diversos programas y bibliotecas que utiliza el sistema operativo para interactuar con el kernel: software que realiza entrada/salida, manipula objetos del sistema de archivos, software de aplicación, etc.
Cada proceso de espacio de usuario normalmente se ejecuta en su propio espacio de memoria virtual y, a menos que se permita explícitamente, no puede acceder a la memoria de otros procesos. Esta es la base para la protección de la memoria en los principales sistemas operativos actuales y un componente básico para la separación de privilegios. También se puede utilizar un modo de usuario independiente para crear máquinas virtuales eficientes; consulte los requisitos de virtualización de Popek y Goldberg. Con suficientes privilegios, los procesos pueden solicitar al núcleo que asigne parte del espacio de memoria de otro proceso al propio, como es el caso de los depuradores. Los programas también pueden solicitar regiones de memoria compartida con otros procesos, aunque también hay otras técnicas disponibles para permitir la comunicación entre procesos.
Modo de usuario | Aplicaciones de usuario | bash, LibreOffice, GIMP, Blender, 0 A.D., Mozilla Firefox,... | ||||
---|---|---|---|---|---|---|
Componentes del sistema | init daemon: OpenRC, Runit, systemd... | Demonios del sistema: polkitd, smbd, sshd, udevd... | Administrador de ventana: X11, Wayland, SurfaceFlinger (Android) | Gráficos: Mesa, AMD Catalyst,... | Otras bibliotecas: GTK, Qt, EFL, SDL, SFML, FLTK, GNUstep,... | |
C biblioteca estándar | fopen , execv , malloc , memcpy , localtime , pthread_create ... (hasta 2000 subrutinas)glibc pretende ser rápido, musl pretende ser ligero, uClibc sistemas integrados de objetivos, bionico fue escrito para Android, etc. Todo apunta a ser compatible con POSIX/SUS. | |||||
Modo de kernel | Linux kernel | stat , splice , dup , read , open , ioctl , write , mmap , close , exit , etc. (alrededor de 380 llamadas del sistema)La interfaz de llamada del sistema Linux (SCI), tiene como objetivo ser compatible con POSIX/SUS | ||||
Programación de procesos subsistema | IPC subsistema | Gestión de memoria subsistema | Archivos virtuales subsistema | Red subsistema | ||
Otros componentes: ALSA, DRI, evdev, klibc, LVM, mapper de dispositivos, Linux Network Scheduler, Netfilter Módulos de Seguridad Linux: SELinux, TOMOYO, AppArmor, Smack | ||||||
Hardware (CPU, memoria principal, dispositivos de almacenamiento de datos, etc.) |
Implementación
La forma más común de implementar un modo de usuario separado del modo kernel implica anillos de protección del sistema operativo. Los anillos de protección, a su vez, se implementan utilizando modos de CPU. Por lo general, los programas de espacio del kernel se ejecutan en modo kernel, también llamado modo supervisor; las aplicaciones normales en el espacio de usuario se ejecutan en modo de usuario.
Muchos sistemas operativos son sistemas operativos de un solo espacio de direcciones: tienen un solo espacio de direcciones para todo el código de modo de usuario. (El código de modo kernel puede estar en el mismo espacio de direcciones o puede estar en un segundo espacio de direcciones). Muchos otros sistemas operativos tienen un espacio de direcciones por proceso, un espacio de direcciones separado para todos y cada uno de los procesos en modo de usuario.
Otro enfoque adoptado en los sistemas operativos experimentales es tener un único espacio de direcciones para todo el software y confiar en la semántica de un lenguaje de programación para asegurarse de que no se pueda acceder a la memoria arbitraria; las aplicaciones simplemente no pueden adquirir ninguna referencia a la objetos a los que no tienen permitido acceder. Este enfoque se ha implementado en JXOS, Unununium y en el proyecto de investigación Singularity de Microsoft.
Contenido relacionado
Interferencia entre símbolos
Sobremodulación
Longitud de coherencia