Saltar al contenido
BIOS&TI
Sistemas Operativos

Componentes de un sistema operativo: kernel, espacio de usuario, shell y servicios

Descubre cómo se organiza un sistema operativo y qué función cumplen componentes como el kernel, el espacio de usuario, las llamadas al sistema, el shell, los servicios, los drivers y el sistema de archivos.

tavo7 min de lectura
CompartirFacebookLinkedInXWhatsApp
Componentes de un sistema operativo: aplicaciones, llamadas al sistema, kernel y hardware.

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.

Figura 1. Modelo conceptual simplificado de las capas y componentes de un sistema operativo.

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

El kernel necesita privilegios elevados porque debe administrar recursos fundamentales del sistema. Esto no significa que todo el software del sistema operativo deba ejecutarse con esos mismos privilegios.

¿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

Si un navegador falla, normalmente podemos cerrarlo y volver a abrirlo. Si un componente crítico ejecutándose con privilegios del kernel falla gravemente, las consecuencias pueden afectar a todo el sistema.

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

Figura 2. Modelo conceptual simplificado de una aplicación solicitando un servicio al sistema operativo.

Información

Una aplicación no necesariamente invoca directamente una llamada al sistema cada vez que realiza una operación. Habitualmente existen APIs, bibliotecas y otras capas de abstracción entre la aplicación y las interfaces del kernel.

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

Un navegador moderno puede utilizar múltiples procesos e hilos para separar pestañas, extensiones, renderizado, red y otras tareas. Esta arquitectura puede mejorar aspectos como aislamiento, estabilidad y capacidad de respuesta.

¿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

Terminal y shell no son exactamente lo mismo. La terminal proporciona el entorno mediante el cual interactuamos, mientras que el shell interpreta y ejecuta los comandos. Profundizaremos en esta diferencia en un artículo específico.

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

Debido a los privilegios con los que pueden operar determinados controladores, un driver vulnerable, defectuoso o malicioso puede representar un riesgo importante para la estabilidad y seguridad del sistema.

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:

  1. El shell o la interfaz gráfica permite iniciar la aplicación.
  2. El sistema crea y administra los procesos necesarios.
  3. Se asigna memoria.
  4. El navegador necesita acceder a archivos de configuración y caché.
  5. Solicita servicios de red para comunicarse con otros sistemas.
  6. El kernel coordina operaciones que requieren acceso a recursos del sistema.
  7. Los controladores permiten la comunicación con componentes como la tarjeta de red, almacenamiento, GPU, teclado o pantalla.
  8. 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

Una buena práctica para aprender seguridad consiste en comprender primero las fronteras de privilegios del sistema: qué se ejecuta en espacio de usuario, qué necesita privilegios elevados y qué mecanismos permiten cruzar esas fronteras de forma controlada.

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

  1. User Mode and Kernel Mode (abre en una nueva pestaña)Microsoft Learn
  2. The Linux kernel user-space API guide (abre en una nueva pestaña)The Linux Kernel Organization
  3. The Linux driver implementer’s API guide (abre en una nueva pestaña)The Linux Kernel Organization
  4. Kernel Architecture Overview (abre en una nueva pestaña)Apple Developer
  5. Operating System Concepts — 10th Edition (abre en una nueva pestaña)Wiley

Autoría editorial

tavo

CEO

BIOS&TI Cyber Brief

Seguridad que llega a tu bandeja.

Inteligencia, vulnerabilidades, herramientas y análisis de ciberseguridad directamente en tu correo.