Capítulo 4: Elementos y estructura del sistema operativo. Procesos
Estructura de un sistema operativo
Ahora que ya sabemos que el sistema operativo se divide en distintos elementos, podemos plantearnos el modo en el que dichos elementos se organizan dentro del sistema operativo para llevar a cabo su cometido. También será importante para el diseño del sistema establecer qué componentes del mismo se ejecutan en modo núcleo y cuáles en modo usuario.
El núcleo de un sistema operativo también suele recibir el nombre de kernel.
Los planteamientos que se aplican en los sistemas operativos más conocidos son los siguientes:
-
Monolítico.
-
Micronúcleo.
-
Núcleo híbrido.
Y para comprender sus diferencias, a continuación vamos a incluir algunos detalles sobre cada uno de ellos.
Sistemas operativos con estructura monolítica
En este tipo de sistemas, el núcleo concentra la mayor parte de la funcionalidad del sistema operativo (sistema de archivos, gestión de memoria, etc), de modo que todos sus componentes principales se ejecutarán en modo núcleo. Aunque estos componentes se programen de forma separada se unen durante el proceso de compilación mediante un enlazador (linker).
Para añadir flexibilidad a esta estructura, los sistemas operativos modernos que la utilizan (como es el caso de GNU/Linux) pueden cargar módulos ejecutables de forma dinámica, permitiéndole actuar, en cierto modo, como un micronúcleo.
En una estructura monolítica pura tendríamos un núcleo complejo y de gran tamaño que debería ser recompilado por completo ante cualquier modificación. Sin embargo, cuando se utiliza la carga dinámica de módulos, éstos pueden compilarse por separado y cargarse durante la ejecución del sistema. En cualquier caso, seguirán ejecutándose en modo privilegiado, lo que, comparado con un sistema con estructura de micronúcleo, lo hace más rápido, pero más vulnerable a errores de programación.
Como ejemplos de sistemas con estructura monolítica podemos nombrar Solaris, FreeBSD, OSX (versiones anteriores a la 9), GNU/Linux y las versiones de escritorio de Windows anteriores a XP.
Sistemas operativos con estructura de micronúcleo
En este tipo de sistemas, el núcleo sólo contiene la implementación de servicios básicos como el soporte de acceso a memoria de bajo nivel, la administración de tareas y la comunicación entre procesos (también conocida como IPC, del inglés, Inter-Process Communication).
En inglés, también recibe el nombre de microkernel o μkernel.
En esta arquitectura, el micronúcleo es el único componente que se ejecuta en modo privilegiado. El resto de las funciones del sistema, como los controladores de dispositivos (drivers), el sistema de archivos, la gestión de E/S, etc, se ejecutan en modo usuario. De esta forma, es más difícil que un error de programación en uno de los módulos afecten al funcionamiento del resto (haciendo que el sistema sea más fiable). Además, los módulos se pueden programar, compilar y cargar por separado.
Sin embargo, pueden presentar dificultades en la sincronización de sus componentes, pueden ocasionar una mayor complejidad del código resultante y puede ofrecer un bajo rendimiento por las continuas llamadas entre módulos y los constantes cambios en el modo de ejecución.
Como ejemplos de sistemas con estructura de micronúcleo podemos nombrar AIX, AmigaOS, Minix, Symbian (aunque en algunos textos aparece como monolítico con carga dinámica de módulos) y NeXTStep (aunque a veces lo encontramos entre los sistemas con núcleo híbrido).
Sistemas operativos con estructura de núcleo híbrido
Este tipo de arquitectura consiste básicamente en un esquema de micronúcleo que incluye algo de código complementario para hacerlo más rápido, aunque buena parte de las funciones del sistema operativo siguen ejecutándose en modo usuario.
Se trata de una solución de compromiso que han adoptado muchos de los sistemas operativos modernos, como las versiones de escritorio de Microsoft Windows, a partir de XP, y todas las versiones de Servidor. También se encuentra en esta categoría macOS.