Capítulo 3: Estructura del sistema operativo

Sistema operativo. Elementos y estructura del sistema operativo

Podríamos definir el concepto de Sistema Operativo como un programa, o un conjunto de programas que colaboran entre ellos para administrar los elementos físicos de un sistema informático, optimizando su uso y ofreciendo determinados servicios a los programas de aplicación.

Para referirse al sistema operativo suelen utilizarse las siglas SO (o bien, OS, del inglés Operating System).

Un sistema operativo se encargará de aspectos como el uso compartido ordenado de los recursos entre diferentes usuarios o la protección de recursos, evitando que un usuario acceda a recursos para los que no está autorizado.

Para que esta protección sea posible, el sistema informático debe ser capaz de ejecutar instrucciones en dos niveles diferentes:

  • En modo usuario: es el modo menos privilegiado de funcionamiento del sistema. En este modo no se permite el acceso directo al hardware.Las instrucciones que se ejecutan en este modo sólo pueden acceder a su propio espacio de direcciones de memoria y utilizan el API del sistema para requerir los servicios del sistema operativo. Este es el modo de ejecución que utilizan todos los programas de aplicación que tengamos instalados

  • En modo núcleo (también llamado modo kernel) o modo supervisor: En él, las instrucciones se ejecutan en un modo privilegiado, teniendo acceso directo a toda la memoria (incluidos los espacios de direcciones de todos los procesos que estén ejecutándose). También podrán acceder a todo el hardware disponible. En este modo sólo se ejecutan algunas partes del sistema operativo.

Desde un punto de vista comercial, los sistemas operativos se ofrecen como un software que incluye diferentes herramientas para proporcionar funcionalidades básicas al usuario. Esto hace que el usuario piense en el navegador web o en el editor de textos como partes del sistema operativo. Sin embargo, esta creencia es errónea, ya que el navegador web, el procesador de textos e incluso la propia interfaz gráfica que estamos utilizando forman parte del concepto de software de aplicación. El verdadero sistema operativo se encuentra oculto bajo estas y otras herramientas, haciendo de intermediario entre ellas y el hardware del ordenador.

Elementos de un sistema operativos

Como podemos imaginar, un sistema operativo es un programa muy complejo que debe estar muy bien organizado y estructurado internamente para llevar a cabo su trabajo de una forma muy eficiente. En este sentido, los sistemas operativos se subdividen en diferentes componentes que se encuentran especializados en aspectos muy concretos del mismo.

Elementos del SOLos elementos que constituyen la mayoría de los sistemas operativos son lo siguientes:

  • Gestor de procesos.

  • Gestor de memoria virtual.

  • Gestor de almacenamiento secundario.

  • Gestor de entrada y salida.

  • Sistema de archivos.

  • Sistemas de protección.

  • Sistema de comunicaciones.

  • Programas de sistema.

  • Gestor de recursos.

Como puede suponerse, cada uno de los elementos que componen el sistema operativo se encarga de una función particular. Más abajo estudiaremos las principales funciones que resuelve un sistema operativo.

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.

En este sentido, 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.

Estructura monolítica

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 este tipo de 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.

En inglés, también recibe el nombre de microkernel o μkernel.

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).

Estructura micronúcleo

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 Window, a partir de XP, y todas las versiones de Servidor. También se encuentra en esta categoría Mac OSX.

Estructura híbrida