Un sistema operativo de computadora moderno generalmente usa memoria virtual para proporcionar espacios de direcciones separados o regiones de un único espacio de direcciones, llamado espacio de usuario y espacio de núcleo . [ 1 ] [ a ] Esta separación proporciona principalmente protección de memoria y protección de hardware contra comportamientos de software maliciosos o erróneos.
El espacio del kernel está reservado exclusivamente para la ejecución del kernel del sistema operativo , sus extensiones y la mayoría de los controladores de dispositivos . En cambio, el espacio de usuario es el área de memoria donde se ejecutan las aplicaciones , los demonios y algunos controladores, generalmente con un espacio de direcciones por proceso.
Las vulnerabilidades que atacan el espacio de usuario se conocen coloquialmente como "exploits de espacio de usuario".
Descripción general
El término espacio de usuario (o userland ) se refiere a todo el código que se ejecuta fuera del núcleo del sistema operativo. [ 2 ] El espacio de usuario generalmente se refiere a los diversos programas y bibliotecas que el sistema operativo utiliza para interactuar con el núcleo: software que realiza entrada/salida , manipula objetos del sistema de archivos , software de aplicación , etc.
Cada proceso de espacio de usuario generalmente se ejecuta en su propio espacio de memoria virtual y, a menos que se le permita explícitamente, no puede acceder a la memoria de otros procesos. Esta es la base de la protección de memoria en los sistemas operativos convencionales actuales y un elemento fundamental 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 suyo, como ocurre con los depuradores . Los programas también pueden solicitar regiones de memoria compartida con otros procesos, aunque existen otras técnicas para permitir la comunicación entre procesos .
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 . Estos anillos, a su vez, se implementan mediante modos de CPU . Normalmente, los programas del espacio kernel se ejecutan en modo kernel , también llamado modo supervisor ; las aplicaciones estándar del espacio de usuario se ejecutan en modo usuario.
Algunos sistemas operativos utilizan un único espacio de direcciones, es decir, un único espacio de direcciones para todo el código en modo usuario. (El código en modo kernel puede estar en el mismo espacio de direcciones o en uno segundo). Otros sistemas operativos utilizan espacios de direcciones por proceso, con un espacio de direcciones independiente para cada proceso en modo usuario.
Véase también
Notas
- ↑ Los sistemas operativos más antiguos, como DOS y Windows 3.1x , no utilizan esta arquitectura.
Referencias
- ↑ "Espacio de direcciones" . Opciones de espacio de direcciones para sistemas de 32 bits.
- ↑ "userland, n." The Jargon File . Eric S. Raymond . Archivado del original el 18-07-2017 . Recuperado el 14-08-2016 .
- ↑ "Guía de administración README" . Repositorios git de Kernel.org .
Enlaces externos
- Definición del espacio del kernel de Linux
- Cómo acceder al modo de usuario en la Wayback Machine (archivado el 26 de marzo de 2016)
- Tecnología de sistemas operativos
- Controladores de dispositivos