En el artículo anterior vimos que un sistema operativo administra los recursos de una computadora y proporciona un entorno para que las aplicaciones puedan ejecutarse. Pero detrás de esa definición existe una arquitectura formada por diferentes componentes que trabajan de manera coordinada. Cuando abres un navegador, ejecutas un comando, guardas un archivo o conectas un dispositivo, intervienen elementos como el kernel, los procesos, la memoria, los controladores, el sistema de archivos y diferentes servicios del sistema. Comprender cómo se relacionan estos componentes permite construir un modelo mental mucho más preciso de lo que ocurre dentro de Windows, GNU/Linux, macOS y otros sistemas operativos.
¿De qué está compuesto un sistema operativo?
No existe una única arquitectura utilizada por todos los sistemas operativos. Windows, GNU/Linux, macOS, Android y otros sistemas presentan diferencias importantes en su diseño e implementación. Sin embargo, podemos utilizar un modelo conceptual para identificar varias capas y componentes fundamentales.
Kernel: el núcleo del sistema operativo
El kernel es uno de los componentes centrales de un sistema operativo. Se ejecuta con un nivel elevado de privilegios y proporciona mecanismos fundamentales para administrar los recursos del sistema. Entre sus responsabilidades se encuentran, dependiendo de la arquitectura, la planificación de la ejecución, la administración de memoria, la comunicación con dispositivos, las operaciones de entrada y salida, las funciones de red y otros servicios esenciales. Las aplicaciones convencionales no necesitan implementar directamente toda esta lógica. En su lugar, utilizan interfaces proporcionadas por el sistema para solicitar determinadas operaciones.
Entre las funciones asociadas al kernel podemos encontrar:
- Administración del procesador.
- Planificación de tareas.
- Administración de memoria.
- Comunicación entre procesos.
- Entrada y salida.
- Interacción con dispositivos.
- Funciones relacionadas con sistemas de archivos.
- Funciones de red.
- Mecanismos de protección y aislamiento.
¿Qué es el kernel space?
El término kernel space hace referencia, de forma conceptual, al entorno privilegiado en el que se ejecutan el kernel y determinados componentes del sistema. El código que opera con estos privilegios puede acceder a recursos que normalmente están restringidos para una aplicación convencional. Esta separación es importante porque un error en código altamente privilegiado puede tener consecuencias mucho mayores que un error dentro de una aplicación aislada.
Información
¿Qué es el user space?
El user space o espacio de usuario es el entorno en el que se ejecuta gran parte del software que utilizamos normalmente. Navegadores, editores, herramientas de desarrollo, clientes de correo y numerosas utilidades del sistema funcionan normalmente con restricciones mayores que el kernel. La separación entre espacio de usuario y espacio del kernel ayuda a limitar el impacto que puede tener un fallo y proporciona una frontera fundamental para el aislamiento y la seguridad.
Ejemplo
¿Cómo se comunica una aplicación con el kernel?
Una aplicación necesita realizar continuamente operaciones que dependen del sistema operativo: abrir archivos, reservar memoria, crear procesos, comunicarse mediante la red o interactuar con dispositivos. Para ello existen mecanismos controlados de comunicación. Uno de los conceptos fundamentales son las llamadas al sistema o system calls. Una llamada al sistema permite que un programa solicite al sistema operativo una operación que requiere sus servicios.
Información
Procesos e hilos
Cuando ejecutamos un programa, el sistema operativo crea y administra las estructuras necesarias para su ejecución. Un proceso puede entenderse, de forma introductoria, como una instancia de un programa en ejecución que dispone de recursos y un espacio de memoria asociado. Dentro de un proceso pueden existir uno o varios hilos de ejecución, que representan secuencias de ejecución que pueden realizar diferentes trabajos dentro del mismo proceso.
Ejemplo
¿Qué es un shell?
Un shell proporciona una interfaz mediante la cual una persona o un programa puede interactuar con diferentes funciones del sistema. Muchos shells proporcionan una interfaz de línea de comandos en la que podemos ejecutar programas, navegar por directorios, administrar archivos, automatizar tareas y combinar herramientas. Algunos ejemplos conocidos son Bash, Zsh y PowerShell.
Información
Servicios y procesos en segundo plano
Un sistema operativo necesita realizar muchas tareas aunque el usuario no esté interactuando directamente con ellas. Para ello existen procesos que proporcionan funciones en segundo plano. En Windows encontramos servicios, mientras que en sistemas Unix y similares se utiliza frecuentemente el término daemon para determinados procesos que ofrecen servicios del sistema o de aplicaciones.
Algunos pueden encargarse de:
- Red.
- Registro de eventos.
- Sincronización.
- Actualizaciones.
- Impresión.
- Acceso remoto.
- Bases de datos.
- Servidores web.
- Tareas programadas.
Drivers: comunicación con los dispositivos
Los drivers o controladores permiten que el sistema operativo pueda interactuar con determinados dispositivos y componentes. Una tarjeta de red, una GPU, un dispositivo USB o un controlador de almacenamiento presentan características específicas que el sistema necesita conocer para utilizarlos correctamente. Los controladores proporcionan parte de esa lógica de comunicación entre el sistema operativo y el dispositivo.
Recomendación de seguridad
El sistema de archivos
El almacenamiento físico contiene datos, pero necesitamos estructuras que permitan organizarlos y acceder a ellos de forma útil. Los sistemas de archivos proporcionan mecanismos para trabajar con archivos, directorios, nombres, rutas, permisos, metadatos y otras estructuras. Windows utiliza ampliamente NTFS, muchos sistemas GNU/Linux utilizan sistemas como ext4, y macOS utiliza actualmente APFS, entre otras posibilidades.
Cómo trabajan juntos estos componentes
Los componentes anteriores no funcionan de forma aislada. Cada vez que utilizamos una aplicación se producen interacciones entre múltiples capas del sistema.
Supongamos que abrimos un navegador y visitamos BIOS&TI.
De forma simplificada:
- El shell o la interfaz gráfica permite iniciar la aplicación.
- El sistema crea y administra los procesos necesarios.
- Se asigna memoria.
- El navegador necesita acceder a archivos de configuración y caché.
- Solicita servicios de red para comunicarse con otros sistemas.
- El kernel coordina operaciones que requieren acceso a recursos del sistema.
- Los controladores permiten la comunicación con componentes como la tarjeta de red, almacenamiento, GPU, teclado o pantalla.
- El sistema operativo continúa distribuyendo recursos mientras otras aplicaciones también se ejecutan.
¿Todos los sistemas operativos funcionan igual?
No. Los sistemas operativos pueden utilizar arquitecturas, componentes, interfaces y decisiones de diseño diferentes. Windows se construye alrededor de la familia Windows NT; los sistemas GNU/Linux utilizan el kernel Linux acompañado de diferentes componentes de espacio de usuario; y macOS utiliza tecnologías basadas en Darwin y el kernel XNU. Aunque las implementaciones son diferentes, conceptos como procesos, memoria, archivos, privilegios, servicios, dispositivos y comunicación entre aplicaciones y kernel aparecen de distintas formas en estas plataformas.
¿Por qué es importante comprender esta arquitectura?
Comprender las capas y componentes de un sistema operativo permite avanzar con mayor facilidad hacia temas más especializados. En administración de sistemas necesitamos entender procesos, servicios, usuarios, permisos y archivos. En desarrollo necesitamos comprender cómo las aplicaciones utilizan los servicios proporcionados por el sistema. En redes necesitamos saber cómo los procesos se comunican y cómo el sistema administra sus interfaces. Y en ciberseguridad estos conceptos son fundamentales para analizar privilegios, vulnerabilidades, persistencia, comportamiento de procesos, registros, malware y actividad anómala.
Recomendación de seguridad
Hemos construido el mapa; ahora vamos a recorrerlo
Ya tenemos una visión general de los principales componentes de un sistema operativo y de cómo se relacionan entre sí. A partir de ahora podemos estudiar cada pieza por separado y comprender con mayor profundidad qué ocurre desde el momento en que encendemos una computadora hasta que una aplicación comienza a ejecutarse.
Próximo artículo
¿Qué ocurre cuando enciendes una computadora? BIOS/UEFI, bootloader y proceso de arranque
Seguiremos el proceso desde que presionas el botón de encendido hasta que el sistema operativo comienza a ejecutarse.
Continúa aprendiendo: Si todavía no has leído la introducción de esta serie, comienza con ¿Qué es un sistema operativo y cómo funciona?
Referencias
- User Mode and Kernel Mode (abre en una nueva pestaña)Microsoft Learn
- The Linux kernel user-space API guide (abre en una nueva pestaña)The Linux Kernel Organization
- The Linux driver implementer’s API guide (abre en una nueva pestaña)The Linux Kernel Organization
- Kernel Architecture Overview (abre en una nueva pestaña)Apple Developer
- Operating System Concepts — 10th Edition (abre en una nueva pestaña)Wiley

