Tema 15. Sistemas operativos. Componentes. Estructura. Funciones. Tipos.
1. Índice
2. Vinculación curricular
- SMR / Sistemas operativos monopuesto → Identifica los elementos funcionales y la arquitectura para la instalación y configuración básica en equipos microinformáticos.
- SMR / Sistemas operativos en red → Selecciona sistemas de archivos y prepara el almacenamiento para administrar dominios y compartir recursos.
- ASIR / Implantación de sistemas operativos → Administra procesos, memoria y perfiles de usuario para asegurar el funcionamiento del software base.
- DAW - DAM / Sistemas informáticos → Analiza las características y funciones del sistema operativo para planificar despliegues y probar aplicaciones.
3. Introducción
Un sistema operativo es el software que actúa como interfaz entre el hardware del computador y los programas de usuario. Su propósito consiste en ocultar la complejidad de los componentes electrónicos y ofrecer una representación abstracta uniforme. Así, cuando un programa necesita leer un archivo, invoca una función estándar en lugar de enviar señales eléctricas directas al disco duro.
El origen de este software se remonta a la década de 1950 con la transición del procesamiento en serie hacia los sistemas por lotes. Estos sistemas consisten en la agrupación de trabajos consecutivos para automatizar su ejecución secuencial. Empresas como General Motors desarrollaron los primeros programas monitores para agilizar el cambio entre tareas en equipos como el IBM 701 y reducir los tiempos muertos del procesador.
Un computador dispone de procesadores, memoria y periféricos finitos que múltiples programas solicitan al mismo tiempo. El sistema operativo resuelve el problema de la multiplexación, que es la técnica de compartir estos recursos limitados. Para lograrlo, el sistema asigna fracciones de tiempo de la unidad central de procesamiento y porciones del espacio de memoria física entre procesos concurrentes de forma equitativa.
En los años 60, proyectos como el sistema CTSS (Compatible Time-Sharing System) y Multics sentaron las bases del tiempo compartido. Esta técnica permite intercalar la ejecución de programas muy rápidamente para dar servicio a varios usuarios interactivos de forma simultánea. La complejidad que alcanzó el proyecto Multics influyó de manera directa en la filosofía de diseño minimalista de UNIX.
El nombre era un juego de palabras que bromeaba con que el nuevo sistema era un Multics castrado o "eunuco" (eunuchs, en inglés). Para evitar problemas corporativos, la ortografía se cambió finalmente a UNIX.
El estudio del sistema operativo trasciende el diseño de software. El conocimiento de su arquitectura interna permite al profesional informático diagnosticar cuellos de botella, definidos como los puntos donde la capacidad de un componente limita el rendimiento general del sistema. Comprender la gestión de memoria o la planificación de disco facilita la administración eficiente de servidores de red o dispositivos móviles.
4. Desarrollo
4.1. Evolución histórica de los sistemas operativos
4.1.1. Los primeros computadores y el procesamiento en serie
Los primeros computadores, desarrollados entre finales de la década de 1940 y mediados de los años cincuenta, carecen de sistema operativo.
El programador interactúa directamente con el hardware del equipo desde una consola física equipada con luces indicadoras e interruptores. El usuario carga los programas y los datos en la memoria mediante dispositivos de entrada manuales, como los lectores de tarjetas perforadas, que consisten en cartulinas de papel con agujeros que representan información en formato binario.
La máquina ejecuta un único programa a la vez. Definimos el procesamiento en serie como el modo de operación donde los usuarios acceden al computador de forma secuencial. Este modelo presenta problemas operativos derivados de la planificación y del tiempo de configuración. El usuario reserva bloques de tiempo fraccionados para usar el equipo. Si el programa termina antes de agotar el bloque de tiempo asignado, el procesador permanece inactivo y el sistema desperdicia tiempo de máquina.
La preparación del entorno exige montar cintas magnéticas y cargar el compilador manualmente. Si ocurre un error, el programador inspecciona los registros internos del procesador para encontrar el fallo. El operador humano repite estos pasos para cada nuevo programa. Los desarrolladores crean entonces las primeras bibliotecas de funciones comunes, enlazadores y cargadores para agilizar el procesamiento en serie.
4.1.2. El procesamiento por lotes simple
General Motors desarrolla a mediados de los años cincuenta el primer sistema operativo para el computador IBM 701. Este sistema implementa el procesamiento por lotes, que consiste en agrupar trabajos con necesidades de ejecución similares para procesarlos de forma continua. El usuario ya no accede directamente a la máquina, sino que entrega sus tarjetas perforadas a un operador humano.
El operador introduce los trabajos agrupados en un dispositivo de entrada. El componente central de este modelo es el monitor, un software residente en la memoria principal que transfiere el control de un programa a otro automáticamente. El monitor lee las instrucciones redactadas en el lenguaje de control de trabajos para configurar el entorno del siguiente programa.
Este modelo reduce el tiempo de configuración y disminuye la intervención humana directa. El procesador, sin embargo, sigue pasando gran parte de su tiempo de operación inactivo. Los dispositivos mecánicos de entrada y salida operan a velocidades muy inferiores a las del procesador electrónico. Cuando un programa lee o escribe un registro, el procesador interrumpe sus cálculos y espera a que el dispositivo termine la acción.
Podemos expresar la utilización del procesador mediante la fórmula matemática:
Donde representa el tiempo dedicado a la ejecución de instrucciones y denota el tiempo consumido en operaciones de entrada/salida. En cálculos con alta carga de lectura y escritura, adopta valores muy bajos y el rendimiento general disminuye.4.1.3. La multiprogramación y la optimización de recursos
Los ingenieros introducen nuevas características en el hardware para mejorar la utilización del procesador. Desarrollan la interrupción, una señal física o lógica que detiene la ejecución actual del procesador para atender un evento del sistema. También implementan el acceso directo a memoria (DMA), un mecanismo que permite al controlador del periférico transferir datos a la memoria sin usar el procesador central.
La combinación de estas tecnologías hace posible la multiprogramación, que definimos como la técnica de mantener varios programas cargados en la memoria principal al mismo tiempo. Cuando un proceso solicita una operación de entrada/salida, el procesador no se queda inactivo. El sistema operativo asigna el procesador a otro trabajo que está listo para realizar cálculos.
La multiprogramación busca mezclar trabajos limitados por el procesador con trabajos limitados por la entrada/salida para equilibrar la carga. Esta concurrencia introduce retos técnicos para el diseño del sistema operativo. El sistema requiere algoritmos de gestión de memoria para ubicar varios programas simultáneamente y proteger sus datos. También necesita algoritmos de planificación, que son conjuntos de reglas para decidir qué trabajo ejecutar a continuación.
4.1.4. Sistemas de tiempo compartido e interacción
El procesamiento por lotes mejora la eficiencia general del sistema, pero elimina la interacción directa del programador con su trabajo. Para corregir esta carencia, surge el tiempo compartido, un modelo donde el procesador alterna rápidamente su tiempo de ejecución entre múltiples usuarios conectados simultáneamente a través de terminales.
El sistema operativo entrelaza la ejecución de los programas asignando a cada uno un cuanto de tiempo, que representa una fracción fija de tiempo de procesador. El cambio de contexto ocurre tan rápido que cada usuario percibe la ilusión de disponer de un equipo dedicado en exclusiva. El MIT desarrolla en 1961 el sistema CTSS, considerado el primer sistema de tiempo compartido en entrar en servicio de rutina.
Los investigadores inician proyectos como MULTICS para perfeccionar la compartición de hardware en la década de 1960. A diferencia de los sistemas por lotes que maximizan la utilización del procesador, el tiempo compartido busca minimizar el tiempo de respuesta, definido como el tiempo que transcurre desde que el usuario emite una petición hasta que recibe la primera reacción del sistema.
| Característica | Multiprogramación por lotes | Tiempo compartido |
|---|---|---|
| Objetivo principal | Maximizar el uso del procesador | Minimizar el tiempo de respuesta |
| Fuente de órdenes | Lenguaje de control de trabajos | Terminal del usuario |
| Interacción | Nula durante la ejecución del programa | Directa y continua con el sistema |
4.1.5. Computación personal e interfaces gráficas
En la década de 1980, el abaratamiento de los microprocesadores facilita la creación de las computadoras personales y las estaciones de trabajo. El procesamiento se distribuye al escritorio del usuario en lugar de requerir el envío de datos a un centro de cálculo corporativo. Sistemas operativos tempranos como MS-DOS inician su andadura en estos equipos sin dar soporte inicial para la multiprogramación.
El software integra paulatinamente la interfaz gráfica de usuario (GUI), que proporciona un entorno de trabajo visual basado en ventanas, iconos y menús. La GUI facilita el manejo del sistema mediante dispositivos apuntadores como el ratón, ocultando la complejidad de los componentes de hardware subyacentes. Los entornos gráficos de sistemas operativos se ejecutan como un programa especializado sobre los servicios del núcleo.
Aparece el concepto de multitarea monousuario, que permite a una persona ejecutar varios programas en el mismo instante. El usuario edita un texto en un procesador de palabras, descarga archivos de la red y reproduce sonido de forma simultánea. El sistema operativo de escritorio aplica algoritmos de tiempo compartido para intercalar la atención del procesador entre todas las aplicaciones activas.
4.1.6. Computación en red y sistemas distribuidos
Con la expansión de las redes de área local y la estandarización del conjunto de protocolos TCP/IP, las computadoras dejan de operar de manera aislada. Surge el sistema operativo de red, un tipo de software que permite a las computadoras intercambiar datos y compartir recursos, como impresoras, mientras conserva la autonomía del sistema local en cada nodo.
El desarrollo tecnológico evoluciona hacia el sistema operativo distribuido, que presenta al usuario una red de equipos físicos independientes como un único sistema centralizado. El software gestiona los recursos de hardware distribuidos y proporciona servicios integrados como el acceso a la memoria y a los archivos remotos de forma transparente para las aplicaciones.
El diseño del hardware incorpora la arquitectura de multiprocesamiento simétrico (SMP) para aumentar la capacidad de cálculo. En un computador SMP, dos o más procesadores comparten el acceso a la memoria principal y ejecutan la misma copia del sistema operativo. El planificador del sistema distribuye los procesos en cualquier procesador disponible para incrementar la velocidad global de las tareas.
La arquitectura cliente-servidor aprovecha las redes para dividir el trabajo computacional. Las máquinas cliente presentan la interfaz al usuario final y consumen servicios que las máquinas servidoras proporcionan desde bases de datos centralizadas.
Un clúster agrupa varias computadoras interconectadas para actuar como un recurso de computación unificado que ofrece mayor disponibilidad frente a fallos. Los sistemas operativos actuales fusionan las técnicas de red, de distribución de carga y de seguridad para dar soporte a estas infraestructuras complejas.
4.2. Componentes del sistema operativo
4.2.1. Arquitectura y capas de abstracción
Un sistema operativo se estructura en una serie de capas superpuestas que aíslan la complejidad del hardware subyacente. La organización por capas delimita las responsabilidades de cada módulo de software.
Las capas inferiores interactúan directamente con los componentes físicos del equipo. Las capas superiores presentan una interfaz abstracta y estandarizada a los programas de usuario. El objetivo de esta división radica en mejorar la mantenibilidad y organizar el acceso a los recursos de manera segura.
El sistema divide el mapa de memoria en dos grandes regiones aisladas entre sí. El espacio de usuario alberga el código y los datos de las aplicaciones regulares. El espacio de núcleo aloja el código del sistema operativo y sus estructuras de control. Un programa que opera en el espacio de usuario nunca accede a las instrucciones que residen en el espacio de núcleo. Esta separación de memoria previene que el fallo de una aplicación colapse la máquina entera.
La interacción entre las distintas capas ocurre mediante interfaces bien definidas. Un proceso de la capa superior solicita servicios a la capa inmediatamente inferior pasando parámetros y esperando un resultado. Esta arquitectura previene que un fallo en una aplicación de usuario afecte a la estabilidad de las rutinas de gestión del procesador o la memoria. El sistema operativo mantiene un control centralizado de todo el entorno de ejecución.
4.2.2. Núcleo o kernel
El núcleo o kernel representa la porción de software del sistema operativo que permanece residente en la memoria principal. Controla las operaciones centrales del equipo y coordina la actividad de todos los componentes. Se ejecuta en modo privilegiado, lo que le otorga acceso sin restricciones a las instrucciones del procesador y a los registros de control. El núcleo administra la unidad central de procesamiento, la memoria y los mecanismos de comunicación entre procesos.
Para realizar su función, el núcleo mantiene tablas de datos con el estado de cada recurso. Crea un bloque de control de proceso (PCB) para cada programa en ejecución, donde almacena el valor de sus registros y su estado actual.
Asigna tiempos de ejecución a las aplicaciones activas mediante algoritmos de planificación. Si un proceso agota su tiempo de procesador asignado, el núcleo interviene, guarda el contexto de ejecución y cede la unidad de procesamiento al siguiente proceso de la lista.
El diseño interno del núcleo define el tipo de sistema operativo. Los núcleos monolíticos agrupan la planificación, el sistema de archivos y los manejadores de dispositivos en un único bloque de código compilado.
Las arquitecturas de micronúcleo reducen el código residente en modo privilegiado a la planificación básica y la comunicación entre procesos. En los micronúcleos, los servicios restantes operan como procesos independientes en el espacio de usuario, mejorando la tolerancia a fallos.
4.2.3. Modos de ejecución y llamadas al sistema
Para mantener la seguridad, el hardware del procesador implementa dos estados de funcionamiento. El modo usuario cuenta con un conjunto limitado de instrucciones disponibles y restringe el acceso a los dispositivos periféricos. El modo núcleo o modo supervisor habilita la ejecución del juego completo de instrucciones de la máquina. El procesador utiliza un bit de estado en la palabra de estado del programa para distinguir el modo activo.
Cuando un programa de usuario necesita acceder a un recurso físico, genera una llamada al sistema o system call. Esta acción desencadena una interrupción por software, conocida como trampa o trap. La trampa transfiere el control al núcleo y cambia el bit de estado del procesador al modo privilegiado. El núcleo procesa la solicitud, realiza la operación requerida y devuelve el control al programa restaurando el modo usuario.
La protección de memoria requiere el uso de registros de hardware que limitan las direcciones accesibles por un proceso. El registro base almacena la dirección física inicial asignada al proceso. El registro límite especifica el tamaño total de dicho espacio de memoria. El hardware verifica cada referencia a la memoria aplicando la siguiente condición matemática:
Cualquier intento de acceso a una dirección de memoria fuera de este rango genera una excepción de hardware. Esta excepción transfiere inmediatamente el control de la unidad de procesamiento al núcleo. El sistema operativo evalúa la infracción y generalmente aborta el programa que causó el error de direccionamiento. Este mecanismo garantiza el aislamiento estricto entre procesos.
4.2.4. Interfaz de programación de aplicaciones
La interfaz de programación de aplicaciones (API) constituye un conjunto de bibliotecas de software que permite a los programas de usuario solicitar servicios al núcleo. En lugar de escribir instrucciones en lenguaje ensamblador para invocar una llamada al sistema, el programador utiliza funciones predefinidas de alto nivel. La biblioteca de la API envuelve la llamada al sistema, prepara los parámetros en los registros adecuados y lanza la interrupción de software.
Las bibliotecas de la API estandarizan el acceso a los servicios del núcleo a través de diferentes plataformas de hardware. El estándar POSIX define la API para los sistemas basados en UNIX y Linux, implementada frecuentemente mediante la biblioteca estándar de C. En los sistemas operativos de Microsoft, la interfaz principal para los programadores recibe el nombre de API Win32.
| Característica | Interfaz de programación (API) | Llamada al sistema (System Call) |
|---|---|---|
| Nivel de ejecución | Modo usuario | Modo núcleo |
| Abstracción | Alta (funciones estructuradas) | Baja (instrucciones de máquina) |
| Portabilidad | Alta (código fuente compatible) | Nula (dependiente del procesador) |
| Ejemplo | printf() en lenguaje C |
write() en núcleo UNIX |
La API oculta la complejidad del funcionamiento interno del sistema operativo al desarrollador de software. Si un programa requiere abrir un archivo, invoca una función específica de la API de manejo de archivos. La biblioteca toma esta solicitud, transfiere los argumentos a la pila de ejecución y desencadena el salto al código del núcleo. El programa receptor solo evalúa el valor numérico devuelto que indica el éxito o fallo de la tarea.
4.2.5. Controladores de dispositivo
Los controladores de dispositivo o drivers son módulos de software que actúan como traductores entre las rutinas genéricas del núcleo y el hardware físico. Traducen las llamadas genéricas del sistema operativo en la secuencia de instrucciones específica que cada periférico individual comprende. Los fabricantes de hardware desarrollan estos módulos para integrar sus dispositivos en un entorno informático sin modificar el código fuente original del núcleo.
Para facilitar la gestión, el sistema operativo define una interfaz uniforme de operaciones de entrada y salida. El núcleo solicita acciones estándar como inicializar, leer, escribir o detener. El controlador recibe la petición y envía comandos de bajo nivel a los registros de estado, control y datos de la tarjeta de red, disco o tarjeta gráfica. Esta modularidad permite añadir nuevos periféricos al equipo de manera dinámica.
Sistemas operativos modernos como Linux soportan la carga dinámica de controladores mientras el equipo permanece en funcionamiento. Cuando se conecta un dispositivo, el sistema lo identifica e inserta el módulo de controlador correspondiente en la memoria del núcleo. El controlador configura el dispositivo, reserva las líneas de interrupción necesarias y habilita los puertos de transferencia de información.
Durante la ejecución de las operaciones, los controladores utilizan áreas de memoria temporal llamadas buffers para acumular los datos. Una vez que el dispositivo físico completa la transferencia de información, envía una interrupción electrónica al procesador. El manejador de interrupciones del controlador procesa esta señal y avisa al sistema operativo para que reanude el proceso que esperaba los datos del dispositivo.
4.2.6. Intérprete de comandos e interfaz gráfica
El intérprete de comandos o shell y la interfaz gráfica de usuario (GUI) exponen las herramientas y servicios del sistema al usuario final. Permiten la ejecución de programas, la gestión de directorios, la visualización de archivos y la configuración general del entorno. Estas aplicaciones capturan las acciones del operador y las transforman en llamadas a la API del sistema operativo. Operan estrictamente en el modo usuario del procesador.
El intérprete de comandos proporciona un entorno interactivo basado en texto donde el usuario introduce instrucciones secuenciales. Lee la cadena de caracteres introducida en el teclado, localiza el programa ejecutable asociado en el almacenamiento y ordena al núcleo la creación de un nuevo proceso para su ejecución. Intérpretes como soportan la creación de guiones o scripts, permitiendo la automatización de tareas administrativas repetitivas.
El intérprete permite la redirección de las entradas y salidas de datos mediante un mecanismo de tuberías o pipes. El flujo de salida de texto de un programa opera como el flujo de entrada directo del programa subsiguiente. Esta característica fomenta la combinación de múltiples utilidades informáticas sencillas para procesar cadenas de texto o realizar cálculos combinados.
La interfaz gráfica de usuario utiliza un modelo de ventanas, iconos y un dispositivo apuntador para facilitar el uso del computador. El operador selecciona objetos visuales en la pantalla para ejecutar las rutinas subyacentes de gestión de archivos. En los sistemas tipo UNIX, la interfaz gráfica recae sobre servidores de visualización que operan separados del núcleo, manteniendo una gestión visual independiente de los procesos lógicos del sistema.
4.3. Estructura de los sistemas operativos
4.3.1. Arquitectura monolítica
La arquitectura monolítica agrupa todo el sistema operativo y sus servicios en un único archivo binario ejecutable. Este diseño aglutina la gestión de memoria, la planificación y los controladores en un único espacio de direcciones (bloque de memoria contiguo asignado para la ejecución de un programa).
El sistema completo opera de manera íntegra en modo supervisor (nivel de ejecución con acceso sin restricciones al hardware). Las aplicaciones de los usuarios acceden a los servicios internos mediante llamadas al sistema que cambian el modo de ejecución del procesador.
Los diferentes componentes del sistema interactúan mediante llamadas a funciones directas en lenguaje C o ensamblador. Esta característica elimina la necesidad de emplear mecanismos de comunicación complejos para el intercambio de información entre los módulos internos del núcleo.
El diseño monolítico ofrece un rendimiento muy alto en la ejecución de tareas. La ausencia de barreras de protección entre los módulos internos reduce el tiempo de respuesta ante las interrupciones generadas por el hardware físico.
Sin embargo, un error de programación en cualquier controlador de dispositivo provoca la caída completa del sistema operativo. El código no goza de aislamiento interno para prevenir la corrupción de memoria entre módulos, lo que dificulta la localización de averías.
El sistema operativo UNIX tradicional representa el ejemplo más conocido de esta estructura. El núcleo proporciona el sistema de archivos, la planificación de la CPU y la gestión de la memoria de forma conjunta a través de un diseño entrelazado.
4.3.2. Arquitectura por capas y anillos de protección
Para reducir la complejidad del software, los diseñadores dividen el sistema operativo en una jerarquía funcional. La arquitectura por capas organiza las funciones de manera que cada nivel ofrece servicios exclusivamente a la capa superior e invoca operaciones de la capa inferior.
El sistema operativo THE, desarrollado por Dijkstra, introdujo este enfoque mediante seis niveles. El nivel cero se encargaba de la asignación del procesador, el nivel uno gestionaba la memoria, y los niveles superiores administraban los dispositivos y los programas de usuario.
Podemos ver una evolución de este modelo en la estructura de anillos de protección (niveles concéntricos de privilegio implementados por el procesador). El sistema Multics introdujo este esquema para asegurar el aislamiento de la información y proteger los datos del sistema.
El anillo cero alberga el núcleo del sistema operativo. Los anillos exteriores contienen los servicios del sistema y las aplicaciones de los usuarios. Las reglas de diseño prohíben que un programa situado en un anillo exterior modifique los datos de un anillo interior.
Para solicitar un servicio de un nivel más protegido, el proceso ejecuta un trap (excepción de software que transfiere el control a una rutina específica del sistema operativo). El procesador verifica los parámetros de la solicitud antes de autorizar el cambio de estado.
La arquitectura de procesadores Intel x86 soporta cuatro anillos de protección en su hardware. Sin embargo, la mayoría de los sistemas operativos contemporáneos emplean únicamente el anillo cero para el núcleo y el anillo tres para los procesos de usuario.
4.3.3. Arquitectura de micronúcleo
El diseño de micronúcleo extrae la mayor cantidad de código posible del modo supervisor. El sistema operativo mantiene en modo privilegiado solo la planificación básica, la gestión de memoria de bajo nivel y la sincronización.
El resto de los servicios tradicionales se desplazan al espacio de usuario (área de memoria sin privilegios de acceso directo al hardware). Los sistemas de archivos, la pila de protocolos de red y los controladores de dispositivos operan como procesos normales sin privilegios especiales.
Esta delegación de responsabilidades incrementa notablemente la fiabilidad del sistema informático. Si un controlador de red sufre un error de ejecución y termina de forma inesperada, el núcleo detecta el fallo y reinicia el proceso sin provocar el colapso del equipo.
La modularidad extrema facilita la adaptación del sistema a nuevas plataformas de hardware. El código dependiente de la arquitectura del procesador queda confinado en un archivo de tamaño muy reducido, lo que acelera el trabajo de los desarrolladores de sistemas.
La comunicación entre los componentes exige el uso del paso de mensajes a través del núcleo. El procesador efectúa múltiples cambios de contexto para atender una única solicitud de entrada o salida, lo que reduce la velocidad de procesamiento.
El tiempo total de respuesta en esta arquitectura aumenta según la cantidad de mensajes requeridos. Podemos calcular el tiempo total mediante la siguiente función de coste temporal:
Donde define el tiempo de procesamiento útil, indica el número de mensajes intercambiados, marca el retardo del cambio de contexto del procesador y representa el coste de enviar y recibir el mensaje en la memoria.
4.3.4. Modelo cliente-servidor en el sistema operativo
La arquitectura de micronúcleo facilita la implementación del modelo cliente-servidor (patrón de diseño donde un consumidor de recursos solicita datos a un proveedor de servicios independientes) dentro de la misma computadora.
Las aplicaciones de usuario adoptan el rol de clientes. Los componentes del sistema operativo, como el gestor de memoria, el administrador de ventanas o el sistema de archivos, actúan como servidores de procesos separados.
El cliente envía una solicitud al micronúcleo mediante un formato de mensaje estándar. El micronúcleo valida los identificadores del remitente y transfiere la unidad de datos al servidor correspondiente para su evaluación y procesamiento.
El servidor procesa la petición en su propio espacio de memoria sin interferir con otras tareas. Tras finalizar la validación de seguridad o la lectura del disco físico, devuelve el resultado al proceso cliente mediante la emisión de un nuevo mensaje.
Este modelo estandariza las interfaces de programación. El cliente no necesita conocer si el servidor ejecuta en el procesador local o en una computadora remota conectada a través de una red de comunicaciones.
4.3.5. Arquitectura híbrida y módulos cargables
Las arquitecturas puras presentan limitaciones de rendimiento o de mantenimiento de código. La industria de la computación desarrolla la arquitectura híbrida (diseño que combina la velocidad del núcleo monolítico con la organización y separación del micronúcleo).
El sistema operativo agrupa los servicios de mayor demanda en el espacio del núcleo para evitar la penalización de los cambios de contexto. Al mismo tiempo, conserva una estructura de servicios separados para funciones menos frecuentes o interfaces de usuario gráficas.
Para mantener la flexibilidad del sistema, los diseñadores emplean módulos cargables (archivos de código compilado que el núcleo enlaza y desenlaza de forma dinámica durante la ejecución). Este mecanismo evita la necesidad de reiniciar el sistema para añadir funciones.
El sistema operativo Linux utiliza un núcleo monolítico pero incorpora el soporte de módulos para cargar nuevos controladores de red o sistemas de archivos. Cuando el usuario conecta un dispositivo de almacenamiento, el núcleo reserva memoria y carga el módulo correspondiente.
El sistema operativo Windows implementa un núcleo híbrido muy estructurado. Integra un nivel ejecutivo en modo supervisor que aloja los gestores de memoria virtual y la seguridad, delegando la presentación visual a subsistemas independientes en modo usuario.
| Arquitectura | Ventaja principal | Desventaja principal | Ejemplo representativo |
|---|---|---|---|
| Monolítica | Alto rendimiento de ejecución | Falta de aislamiento de errores | MS-DOS, núcleo Linux base |
| Micronúcleo | Fiabilidad y alta seguridad | Sobrecarga por paso de mensajes | MINIX 3, L4, Mach |
| Híbrida | Equilibrio de velocidad y diseño | Estructura de código muy compleja | Windows NT, macOS |
4.3.6. Máquinas virtuales e hipervisores
Las máquinas virtuales (entornos de ejecución aislados basados en software) permiten abstraer el hardware de una única computadora física. El sistema crea la ilusión de proporcionar múltiples computadoras privadas independientes sobre los mismos componentes electrónicos.
Cada entorno simulado puede ejecutar su propio sistema operativo invitado de forma simultánea. El usuario de la computadora cambia entre los diferentes sistemas operativos del mismo modo en que alterna entre procesos de aplicaciones de usuario en un entorno tradicional.
Para gobernar la compartición de recursos, la arquitectura incorpora un hipervisor (software responsable de multiplexar el hardware físico y planificar la ejecución de las máquinas virtuales). El hipervisor intercepta las instrucciones privilegiadas enviadas por los invitados.
El hipervisor de tipo 1 o bare-metal opera directamente sobre el hardware puro, sustituyendo por completo al sistema operativo anfitrión. Asigna la memoria física, administra el almacenamiento en disco y controla las tarjetas de red de forma directa para garantizar el aislamiento.
El hipervisor de tipo 2 o alojado funciona como una aplicación estándar sobre un sistema operativo anfitrión. Utiliza los controladores del sistema base para acceder a los dispositivos físicos, centrando su tarea en simular el comportamiento del procesador virtual y la memoria asignada.
La llegada de procesadores con soporte integrado de virtualización, como Intel VT-x o AMD-V, resolvió problemas de ejecución de instrucciones sensibles. El hardware permite que el hipervisor controle los registros del procesador sin recurrir a costosas técnicas de traducción binaria de código.
4.4. Funciones principales del sistema operativo
El sistema operativo actúa como un administrador de recursos que coordina el hardware y el software. Sus funciones se dividen en módulos que gestionan diferentes aspectos del equipo. Estos módulos operan en conjunto para proporcionar un entorno de ejecución predecible y seguro para las aplicaciones de usuario. A continuación se detallan estas responsabilidades técnicas.
4.4.1. Gestión de procesos e hilos
El sistema operativo se encarga de crear, planificar y terminar la ejecución de los programas. Un proceso representa un programa en ejecución que posee su propio espacio de memoria y recursos asignados. Para aumentar la concurrencia, los sistemas emplean hilos. Un hilo (thread) constituye la unidad de utilización del procesador dentro de un proceso.
Los hilos de un mismo proceso comparten el código, los datos y los archivos abiertos. El sistema operativo asigna el procesador a los diferentes hilos y procesos mediante un mecanismo denominado planificación (scheduling). El planificador decide qué proceso obtiene tiempo de procesador y durante cuánto tiempo.
El planificador se divide en tres niveles. El planificador a corto plazo selecciona el proceso que ejecutará el procesador en el siguiente instante. El planificador a medio plazo retira procesos de la memoria principal y los transfiere al disco para liberar espacio. El planificador a largo plazo determina qué programas se admiten en el sistema para su procesamiento.
Para controlar estas tareas, el sistema operativo mantiene un bloque de control de proceso (PCB) que almacena el estado de cada tarea. Los estados abarcan las fases de nuevo, listo, en ejecución, bloqueado y terminado. El procesador cambia entre estos estados según las decisiones del planificador y las operaciones de entrada o salida.
4.4.2. Sincronización y manejo de interbloqueos
La ejecución concurrente de procesos exige mecanismos para evitar que modifiquen los mismos datos simultáneamente. La sincronización coordina el acceso a recursos compartidos. El sistema operativo provee herramientas como los semáforos, que son variables enteras utilizadas para indicar la disponibilidad de un recurso.
El sistema también ofrece monitores, que encapsulan variables y procedimientos para garantizar la exclusión mutua de forma estructurada. Los procesos necesitan intercambiar información constantemente para operar en conjunto. La comunicación entre procesos (IPC) se implementa principalmente mediante el paso de mensajes y la memoria compartida.
El paso de mensajes permite enviar y recibir datos mediante llamadas al sistema. La memoria compartida establece una región de la memoria donde varios procesos leen y escriben datos directamente, requiriendo control de concurrencia explícito.
| Característica | Memoria compartida | Paso de mensajes |
|---|---|---|
| Velocidad | Alta (acceso directo a memoria) | Media (requiere llamadas al sistema) |
| Sincronización | Responsabilidad del programador | Gestionada por el sistema operativo |
| Implementación | Mapeo de direcciones físicas | Colas de mensajes en el kernel |
Cuando varios procesos compiten por los mismos recursos, se produce un interbloqueo (deadlock). Un interbloqueo ocurre si un conjunto de procesos se bloquea indefinidamente porque cada uno espera un recurso que retiene otro proceso del mismo conjunto.
Para que ocurra un interbloqueo, deben cumplirse cuatro condiciones. La exclusión mutua requiere que al menos un recurso no sea compartible. La retención y espera implica que un proceso retiene recursos mientras solicita otros nuevos. La ausencia de expropiación significa que el sistema no retira un recurso a la fuerza. Por último, la espera circular establece una cadena cerrada de procesos en espera.
4.4.3. Gestión de la memoria principal y virtual
El administrador de memoria reparte la memoria física disponible entre los procesos activos. El procesador genera direcciones lógicas que los programas utilizan durante su ejecución. El sistema operativo utiliza hardware especializado para traducir estas direcciones lógicas a direcciones físicas, que corresponden a ubicaciones reales en los chips de memoria.
Las técnicas de asignación varían. La asignación contigua entrega a cada proceso un bloque único de memoria, lo que causa fragmentación externa. Para evitar este problema, los sistemas actuales utilizan la paginación. La paginación divide la memoria física en bloques de tamaño fijo llamados marcos (frames) y la memoria lógica en bloques del mismo tamaño llamados páginas.
Otra técnica es la segmentación, que divide el espacio de direcciones en bloques de tamaño variable según la lógica del programa (código, datos, pila). A menudo, el sistema operativo combina paginación y segmentación. El sistema mantiene una tabla de páginas para cada proceso que relaciona las páginas con los marcos físicos.
Para superar los límites de la memoria física, el sistema implementa la memoria virtual. Esta técnica utiliza el disco de almacenamiento para simular una memoria principal más extensa. El sistema carga en la memoria física solo las páginas que el proceso necesita inmediatamente.
Si el procesador requiere una página que no está en la memoria principal, se produce un fallo de página. El sistema operativo detiene la ejecución, localiza la página en el disco y la transfiere a un marco libre. Los algoritmos de reemplazo, como LRU (menos recientemente usada), deciden qué página descartar cuando la memoria está llena.
4.4.4. Administración de entrada y salida
El sistema operativo oculta las particularidades del hardware a las aplicaciones mediante módulos de software. Utiliza un controlador de dispositivo (driver) para cada componente físico. El controlador conoce el funcionamiento del periférico y expone una interfaz estándar al resto del sistema.
Para absorber las diferencias de velocidad entre el procesador y los periféricos, el sistema administra búferes. Un búfer es un área de memoria principal que almacena datos temporalmente durante las transferencias. El sistema emplea búferes dobles o circulares para que el procesador lea de un área mientras el dispositivo escribe en otra.
El sistema operativo también gestiona las colas de impresión (spooling). Este mecanismo almacena temporalmente en disco los trabajos enviados a una impresora. El procesador retoma su actividad de inmediato, mientras que el sistema operativo transfiere los trabajos al periférico en segundo plano.
En el almacenamiento secundario, el sistema realiza la planificación de acceso a discos. Los algoritmos de planificación ordenan las solicitudes de lectura y escritura para reducir el movimiento de los cabezales magnéticos. Algoritmos como SCAN organizan las peticiones según la posición física de los datos para optimizar los tiempos de acceso.
El manejo de interrupciones permite al hardware notificar al sistema operativo cuando finaliza una operación de entrada o salida. En lugar de interrogar constantemente al dispositivo, el procesador atiende a otros procesos. La interrupción fuerza al procesador a ejecutar una rutina específica que procesa los datos entrantes.
4.4.5. Gestión del sistema de archivos
El sistema operativo estructura la información en las unidades de almacenamiento masivo. Proporciona el concepto de archivo, que agrupa datos lógicamente relacionados de forma persistente. Para administrar miles de archivos, el sistema emplea directorios, contenedores que organizan archivos y otros subdirectorios.
Los directorios establecen una organización jerárquica en forma de árbol. El sistema de archivos mantiene el control de atributos para cada entidad almacenada. Estos atributos incluyen metadatos como el tamaño, el usuario creador, la fecha de creación y la ubicación física en el disco.
El sistema operativo implementa la gestión del espacio libre en los dispositivos de almacenamiento. Utiliza estructuras como mapas de bits o listas enlazadas para identificar qué bloques del disco están disponibles. Al crear o ampliar un archivo, el sistema consulta estas estructuras y asigna bloques libres.
Junto con la gestión del espacio, el sistema aplica un modelo de permisos para cada archivo. Los permisos definen qué operaciones realiza cada usuario. Las reglas típicas regulan la lectura, la escritura y la ejecución de la información. El sistema de archivos comprueba estos permisos en cada solicitud de acceso.
4.4.6. Protección y seguridad del sistema
El sistema operativo defiende los recursos del equipo contra accesos no permitidos y daños deliberados. La autenticación de usuarios verifica la identidad de cada persona que intenta utilizar el sistema. El sistema contrasta contraseñas, tokens físicos o características biométricas antes de permitir el inicio de sesión.
Tras verificar la identidad, el sistema aplica el control de acceso a los recursos. El sistema emplea matrices de acceso o listas de control de acceso (ACL) para relacionar sujetos con objetos. El núcleo detiene cualquier proceso que intente leer o escribir un recurso para el que carece de autorización explícita.
Para mantener la integridad del equipo, el sistema incluye mecanismos de prevención de ejecución de código no autorizado. Los sistemas modernos marcan ciertas áreas de memoria, como la pila de datos, con atributos de no ejecución. Esto impide que el procesador ejecute instrucciones inyectadas maliciosamente en los datos de las aplicaciones.
El sistema operativo aísla los procesos para evitar interferencias. El procesador opera en modo usuario para las aplicaciones y en modo supervisor para el código del sistema. Si una aplicación intenta ejecutar una instrucción privilegiada directamente, el hardware genera una excepción y el sistema operativo finaliza el proceso infractor.
4.5. Tipos de sistemas operativos
4.5.1. Clasificación según la administración y arquitectura
Los sistemas operativos se agrupan en diversas categorías según la forma en que administran los procesos, el grado de interacción con el usuario y la distribución física de sus componentes. Las arquitecturas definen si el sistema opera en un único equipo aislado, si expone servicios en una red o si unifica múltiples máquinas bajo una misma interfaz.
Podemos estructurar esta clasificación considerando dos ejes de diseño: el tratamiento del tiempo y la ubicación de los recursos. El eje temporal divide a los sistemas en procesamiento por lotes, interactivos y de tiempo real. El eje espacial distingue entre sistemas centralizados, de red y distribuidos. A estos se suman los entornos con restricciones físicas severas, que dan lugar a los sistemas embebidos y móviles.
4.5.2. Sistemas por lotes e interactivos
Los sistemas por lotes agrupan los trabajos de los usuarios y los ejecutan secuencialmente sin interacción humana durante el procesamiento. El usuario envía una tarea con sus datos y directivas, y el sistema asume el control total hasta generar el resultado final.
Este modelo optimiza la utilización del procesador, ya que elimina los tiempos de espera asociados a la entrada manual de datos. Las aplicaciones actuales de este modelo incluyen el procesamiento de nóminas, la ejecución de copias de seguridad y los cálculos científicos de larga duración.
Los sistemas interactivos establecen una comunicación directa y continua entre el usuario y la máquina. El sistema operativo procesa las instrucciones del usuario y devuelve resultados perceptibles casi de inmediato.
Para lograr esta interacción con múltiples usuarios simultáneos, se utiliza la técnica de tiempo compartido. Esta técnica divide el tiempo del procesador en intervalos muy cortos, denominados cuantos o rodajas de tiempo, y asigna un cuanto a cada proceso en estado de ejecución.
El procesador conmuta rápidamente entre los procesos de los distintos usuarios. La velocidad de conmutación genera la ilusión de que cada usuario posee una máquina dedicada. Si un proceso agota su cuanto de tiempo sin terminar, el planificador lo pausa y lo envía al final de la cola de procesos listos, cediendo la CPU al siguiente proceso.
| Característica | Sistemas por lotes | Sistemas interactivos |
|---|---|---|
| Objetivo principal | Maximizar el uso del procesador | Minimizar el tiempo de respuesta |
| Fuente de directivas | Archivos o lenguajes de control de trabajos | Entradas directas desde terminales o interfaces |
| Tasa de interacción | Nula durante la ejecución | Alta y continua |
| Planificación | Orientada a la productividad global (trabajos por hora) | Orientada a la equidad y baja latencia (tiempo compartido) |
4.5.3. Sistemas de tiempo real
Los sistemas de tiempo real aseguran la respuesta a eventos externos dentro de unos plazos de tiempo estrictamente garantizados. La corrección de estos sistemas depende del resultado lógico de la computación y del instante exacto en que este resultado se produce. Los procesos en estos entornos procesan datos de sensores y controlan actuadores físicos, como en líneas de ensamblaje industrial, aviónica o equipos médicos.
Existen dos categorías de sistemas de tiempo real. Los sistemas de tiempo real estricto (hard) garantizan el cumplimiento de los plazos en cualquier circunstancia. Un fallo en el tiempo de respuesta produce un error fatal en el sistema, daños en el equipo o riesgos físicos. Las funciones de control de vuelo en un avión utilizan sistemas de tiempo real estricto.
Los sistemas de tiempo real laxo (soft) asocian un plazo temporal a las tareas, pero toleran incumplimientos ocasionales sin causar daños permanentes en el sistema. Las aplicaciones multimedia, como la transmisión de vídeo o audio en directo, utilizan tiempo real laxo. Un fotograma retrasado reduce la calidad percibida, pero no detiene la operación global del sistema.
Para garantizar los plazos, el sistema operativo calcula el grado de utilización de la CPU. En algoritmos como la planificación de tasa monótona, la suma del tiempo de ejecución dividido por el periodo de todas las tareas determina si el sistema es planificable. El sistema acepta las tareas si la utilización total cumple la restricción matemática:
4.5.4. Sistemas de red
Un sistema operativo de red agrupa un conjunto de computadoras autónomas interconectadas que comparten recursos locales. Cada máquina ejecuta su propio sistema operativo y mantiene su autonomía administrativa. El sistema de red instala una capa de software adicional para gestionar los protocolos de comunicación y habilitar el acceso a los servicios remotos, como servidores de archivos o impresoras compartidas.
Los usuarios de un sistema de red reconocen la existencia de múltiples máquinas. Deben conocer la ubicación de los recursos o iniciar sesión explícitamente en los nodos remotos para utilizarlos. La arquitectura dominante en estos sistemas es el modelo cliente-servidor. Un cliente es el proceso que solicita un servicio mediante el envío de un mensaje a través de la red. Un servidor es el proceso que escucha permanentemente las solicitudes, las procesa y devuelve los resultados.
Otra arquitectura presente en los sistemas de red es el modelo entre pares, o peer-to-peer (P2P). En esta topología, todos los nodos actúan simultáneamente como clientes y servidores. Los equipos comparten su propia capacidad de almacenamiento y procesamiento con el resto de los participantes sin depender de un servidor centralizado.
4.5.5. Sistemas distribuidos
Un sistema operativo distribuido es un software que administra una colección de equipos independientes pero los presenta al usuario como una máquina virtual unificada. Esta característica se denomina imagen de sistema único. Los usuarios y las aplicaciones interactúan con los recursos sin conocer la ubicación física ni la topología de red subyacente.
La transparencia es la propiedad de ocultar la separación de los componentes. La transparencia de ubicación permite acceder a un recurso usando un único nombre, sin referencias a la máquina que lo aloja. La transparencia de migración permite al sistema operativo mover un proceso de una máquina a otra para equilibrar la carga de la CPU sin que el usuario perciba la interrupción. La transparencia de replicación oculta la existencia de copias múltiples de un mismo archivo en diferentes nodos.
Los clústeres representan una implementación común de sistemas distribuidos. Un clúster interconecta computadoras completas que trabajan de forma conjunta.
El sistema operativo del clúster implementa mecanismos de transferencia por fallo (failover). Si un nodo físico experimenta un error de hardware, el sistema traslada automáticamente los procesos en ejecución y las direcciones de red a otro nodo operativo. Cuando el equipo original recupera su funcionalidad, el sistema aplica la restauración de fallo (failback) para devolverle la carga de trabajo.
Los grids computacionales extienden el concepto de sistema distribuido agrupando recursos heterogéneos y dispersos geográficamente. A diferencia de un clúster, los nodos de un grid pertenecen a múltiples organizaciones y emplean diferentes sistemas operativos locales, unificados por una capa de software intermedio llamada middleware.
4.5.6. Sistemas embebidos y móviles
Los sistemas embebidos administran dispositivos electrónicos con restricciones de hardware severas y propósitos limitados. Ejemplos de hardware embebido incluyen centralitas de automóviles, electrodomésticos, enrutadores de red y sensores industriales.
Las restricciones dictan que el sistema operativo tenga una huella de memoria muy reducida. El código del núcleo suele ejecutarse en el mismo espacio de memoria que las aplicaciones para evitar el consumo de ciclos de reloj en cambios de contexto.
Los diseñadores eliminan la memoria virtual en muchos sistemas embebidos para asegurar la predictibilidad en el tiempo de acceso a las instrucciones. El sistema se almacena habitualmente en una memoria flash no volátil.
Los sistemas operativos móviles derivan de los sistemas embebidos, pero incorporan soporte para aplicaciones de propósito general. Operan en teléfonos inteligentes y tabletas, integrando controladores para redes inalámbricas, geolocalización, cámaras y pantallas táctiles. Estos sistemas aplican esquemas agresivos de gestión de energía debido a la limitada capacidad de las baterías.
El sistema operativo suspende el procesador principal, reduciendo su frecuencia o cortando su alimentación eléctrica, cuando el usuario no interactúa con la pantalla.
Para mantener la conectividad, delega el monitoreo de la red en microcontroladores de bajo consumo que despiertan a la CPU central únicamente cuando reciben una llamada o una notificación de datos. Estos sistemas gestionan el ciclo de vida de las aplicaciones cerrando procesos en segundo plano de manera autónoma cuando el dispositivo necesita liberar memoria RAM para la aplicación en primer plano.
4.6. Tendencias y actualidad en sistemas operativos
4.6.1. Soporte para multiprocesamiento simétrico y equipos multinúcleo
Los sistemas operativos soportan de forma nativa el multiprocesamiento simétrico (SMP). Esta arquitectura conecta múltiples procesadores idénticos a una memoria principal compartida. Todos los procesadores acceden a los mismos dispositivos de entrada y salida. El sistema operativo controla el conjunto de procesadores de manera uniforme y distribuye las tareas entre ellos.
Un procesador multinúcleo integra varias unidades de procesamiento independientes dentro de un mismo circuito integrado. El sistema operativo trata cada núcleo físico como un procesador lógico separado. Las rutinas del planificador (scheduler) asignan procesos e hilos a cada uno de estos núcleos de ejecución.
Para organizar los hilos preparados para ejecución, el planificador utiliza distintas estructuras de datos. El sistema operativo mantiene una cola global de tareas o implementa colas locales dedicadas a cada procesador. El uso de colas locales disminuye la contención y el bloqueo sobre las estructuras de memoria compartida.
El planificador implementa la afinidad del procesador (processor affinity) para optimizar el rendimiento. Esta técnica intenta mantener un hilo en el mismo procesador donde se ejecutó por última vez. La afinidad permite que el hilo reutilice los datos almacenados previamente en la memoria caché del núcleo, reduciendo los accesos a la memoria principal.
Podemos clasificar la afinidad en dos tipos. La afinidad débil permite al planificador mover un hilo a otro procesador si el procesador original se encuentra saturado. La afinidad fuerte restringe la ejecución de un hilo exclusivamente al procesador o procesadores asignados explícitamente por el sistema operativo.
El balanceo de carga (load balancing) complementa a la afinidad del procesador. El sistema operativo monitoriza continuamente la carga de trabajo de las colas de cada núcleo. Cuando detecta un desequilibrio, el planificador transfiere hilos desde las colas de los procesadores más ocupados hacia los procesadores con tiempo de inactividad.
4.6.2. Integración de la virtualización en el núcleo
La virtualización abstrae el hardware físico de un equipo para crear múltiples entornos de ejecución independientes. El software responsable de esta abstracción se denomina hipervisor o monitor de máquina virtual (VMM). Los sistemas operativos modernos incorporan la funcionalidad del hipervisor directamente en su código.
Los hipervisores nativos aprovechan las extensiones de virtualización del procesador, como Intel VT-x o AMD-V. El hardware crea un nivel de ejecución adicional, conocido como modo de operación invitado. El sistema operativo anfitrión ejecuta las máquinas virtuales en este nivel, manteniendo el control absoluto sobre las instrucciones físicas reales.
El procesador intercepta las operaciones de entrada/salida de la máquina invitada mediante trampillas (traps). Una vez interceptada la llamada, el hardware transfiere el control al hipervisor, que emula el comportamiento del dispositivo físico. Este proceso de interceptación y emulación ocurre de forma transparente para el sistema operativo invitado.
La gestión de memoria virtual requiere traducción adicional bajo la virtualización. El hipervisor implementa tablas de páginas anidadas (nested page tables) soportadas por hardware. Estas tablas traducen directamente las direcciones de memoria virtual del invitado a las direcciones de memoria física del host.
El hipervisor asigna procesadores virtuales (vCPU) a cada máquina virtual. El planificador del sistema operativo anfitrión trata cada vCPU como un hilo de ejecución estándar. De este modo, la máquina virtual recibe tiempo de procesamiento utilizando las mismas políticas de planificación que el resto de las aplicaciones.
4.6.3. Uso de contenedores y aislamiento de procesos
Un contenedor representa un entorno de ejecución aislado que comparte el núcleo del sistema operativo anfitrión con otros contenedores. A diferencia de la virtualización tradicional, los contenedores no ejecutan un sistema operativo invitado completo. Esta estructura reduce el consumo de memoria principal y acorta el tiempo de inicio de los procesos.
Los sistemas operativos implementan los contenedores utilizando espacios de nombres (namespaces). Un espacio de nombres aísla un recurso global del sistema y presenta una vista independiente del mismo a un grupo de procesos. El núcleo aísla recursos como el árbol de procesos, las direcciones de red, los puntos de montaje y los identificadores de usuario.
El sistema controla el consumo físico de los contenedores mediante los grupos de control (cgroups). El núcleo contabiliza y limita la cantidad de procesador, memoria y ancho de banda de entrada/salida que utiliza cada contenedor. El grupo de control interviene si un contenedor intenta superar su cuota asignada, deteniendo o ralentizando sus procesos.
El sistema de archivos de un contenedor utiliza capas superpuestas basadas en el principio de copiar al escribir (copy-on-write). El contenedor lee los archivos de una imagen base de solo lectura. Cuando un proceso del contenedor necesita modificar un archivo, el sistema operativo crea una copia temporal en una capa superior de escritura.
4.6.4. Sistemas de archivos con capacidades transaccionales
Los sistemas operativos implementan sistemas de archivos que garantizan la consistencia estructural frente a cortes de energía o bloqueos del equipo. Un sistema de archivos transaccional (journaling) agrupa las operaciones de disco en transacciones atómicas. Una transacción se aplica por completo en el sistema de archivos o se descarta en su totalidad.
El sistema de archivos escribe los cambios pendientes en una estructura de datos secuencial denominada bitácora (log o journal). Una vez que el sistema guarda la transacción en la bitácora, procede a modificar los bloques de datos y metadatos en la ubicación definitiva del disco. Este paso final se conoce como punto de control (checkpoint).
Si ocurre un fallo en el sistema antes de completar el punto de control, el sistema operativo lee la bitácora durante el siguiente arranque. El sistema localiza las transacciones completas en la bitácora y reescribe los bloques en sus ubicaciones definitivas. El sistema utiliza esta técnica, conocida como registro de rehacer (redo log), para evitar la comprobación exhaustiva del disco.
| Modo de Journaling | Descripción técnica | Rendimiento |
|---|---|---|
| Writeback | Solo registra los metadatos. Los datos pueden escribirse en el disco en cualquier orden. | Alto |
| Ordered | Registra los metadatos. Obliga a escribir los datos de usuario en el disco antes de registrar la transacción. | Medio |
| Data | Registra tanto los metadatos como los datos de usuario en la bitácora antes de escribirlos en el disco. | Bajo |
La bitácora funciona como un búfer circular en el dispositivo de almacenamiento. A medida que el sistema operativo completa los puntos de control, libera el espacio ocupado en la bitácora. El sistema de archivos sobrescribe continuamente las entradas más antiguas con nuevas transacciones para mantener el flujo de operaciones de entrada y salida.
4.6.5. Gestión dinámica de volúmenes lógicos
La gestión de volúmenes lógicos (LVM) añade una capa de abstracción entre el sistema de archivos y los dispositivos físicos de almacenamiento. Esta capa permite agrupar varios discos duros o particiones físicas y redistribuir su capacidad sin depender de la topología física del hardware subyacente.
El sistema inicializa los discos duros creando volúmenes físicos (Physical Volumes, PV). El software de gestión agrupa uno o varios volúmenes físicos en un grupo de volúmenes (Volume Group, VG). El grupo de volúmenes representa un espacio de almacenamiento continuo que el sistema operativo percibe como un único disco lógico de gran tamaño.
El administrador extrae espacio del grupo de volúmenes para crear volúmenes lógicos (Logical Volumes, LV). El sistema operativo formatea estos volúmenes lógicos y los utiliza para almacenar datos. El administrador redimensiona los volúmenes lógicos en caliente, añadiendo capacidad adicional desde el grupo de volúmenes sin necesidad de reiniciar el sistema operativo.
El gestor divide el espacio en bloques del mismo tamaño llamados extensiones (extents). Cada extensión de un volumen lógico se mapea a una extensión de un volumen físico. El tamaño total de un volumen lógico se expresa mediante una fórmula que suma todas las extensiones que lo componen, donde representa la extensión física asignada y el tamaño de la extensión.
El gestor de volúmenes permite la creación de instantáneas (snapshots). Una instantánea congela el estado de un volumen lógico en un momento exacto del tiempo. El sistema utiliza punteros a los bloques originales y emplea el mecanismo de copiar al escribir para guardar los bloques antiguos antes de que el usuario los modifique.
4.6.6. Prevención de ejecución por hardware y aislamiento de seguridad
El sistema operativo utiliza técnicas de protección de memoria para evitar que los programas ejecuten código malicioso alojado en las zonas de almacenamiento temporal. La prevención de ejecución de datos (DEP) permite al sistema operativo marcar explícitamente páginas de memoria como no ejecutables.
El sistema operativo aprovecha el soporte del procesador, que proporciona un bit de hardware específico llamado bit NX (No-eXecute). El núcleo configura este bit dentro de cada entrada de la tabla de páginas. Si el procesador intenta cargar una instrucción desde una página de memoria que tiene el bit NX activado, el hardware genera una excepción y detiene el proceso.
La aleatorización de la disposición del espacio de direcciones (ASLR) complementa la protección de memoria. Esta técnica carga las bibliotecas compartidas, la pila de llamadas y el montón (heap) en direcciones de memoria aleatorias cada vez que se inicia un programa. El sistema impide que los atacantes utilicen direcciones de memoria fijas en sus rutinas de explotación.
Los procesadores modernos incorporan enclaves de seguridad por hardware. Un enclave es una región aislada de memoria dentro del espacio de direcciones de un proceso que se encuentra cifrada por el propio procesador. El sistema operativo no puede acceder ni modificar los datos de un enclave en ejecución, lo que protege la información frente a vulnerabilidades que comprometan el propio núcleo.
Los sistemas operativos de servidor emplean características de seguridad basada en virtualización (VBS). Esta técnica ejecuta los componentes de autenticación y verificación de seguridad en un contenedor protegido por el hipervisor. El núcleo principal del sistema interactúa con estos componentes, pero el hipervisor aísla las contraseñas y las claves criptográficas para prevenir su extracción directa.
5. Conclusiones
Un sistema operativo actúa como intermediario entre el hardware y los programas de usuario. Este software de base multiplexa los recursos físicos, repartiéndolos en el tiempo y en el espacio para compartirlos entre un número de procesos concurrentes. El sistema asigna memoria, tiempo de procesador y acceso a periféricos de forma ordenada. Así, proporciona a las aplicaciones un entorno de ejecución estandarizado y uniforme que oculta la complejidad técnica del equipo.
El diseño interno de los sistemas oscila entre dos enfoques estructurales. Las arquitecturas monolíticas concentran todos los servicios y funciones en un único espacio de direcciones.
Esta estrategia aumenta el rendimiento general al evitar cambios de contexto frecuentes. Por el contrario, las arquitecturas basadas en micronúcleos trasladan la mayoría de los servicios al espacio de usuario. Este diseño minimiza el código que ejecuta en modo con privilegios, lo que aísla los errores y mejora la fiabilidad del equipo.
El sistema asume responsabilidades de administración integrales para mantener la estabilidad. Utiliza la memoria virtual, una técnica que emplea espacio en disco para simular una memoria principal de mayor capacidad.
También implementa planificadores para decidir qué proceso utiliza el procesador en cada instante de tiempo . Además, estandariza el acceso a los dispositivos de E/S (entrada/salida) mediante controladores específicos que traducen las órdenes genéricas del software en señales eléctricas.
La evolución actual de los sistemas se orienta hacia la alta disponibilidad y la distribución de tareas. El software facilita la integración fluida con la computación en la nube o cloud computing.
Este modelo permite provisionar servidores, almacenamiento y redes a través de Internet bajo demanda. De igual forma, los sistemas incorporan soporte directo para la virtualización ligera. Esta técnica aísla los procesos en contenedores independientes que comparten el núcleo del sistema operativo anfitrión.
El dominio de estas tecnologías orienta la enseñanza dentro de la Formación Profesional.
La configuración y administración de estos entornos constituye un Resultado de Aprendizaje (RA) evaluable en el currículo de especialidades como Sistemas Microinformáticos y Redes (SMR) o Administración de Sistemas Informáticos en Red (ASIR). El técnico aplica estos conceptos teóricos para implantar arquitecturas híbridas, configurar la seguridad de los recursos y automatizar el despliegue de servicios en red.
6. Bibliografía
- Silberschatz, A., Galvin, P. B., Gagne, G. (2005). Operating system concepts. John Wiley & Sons. — Base teórica de procesos, memoria e hilos.
- Stallings, W. (2005). Sistemas operativos: Aspectos internos y principios de diseño. Pearson Prentice Hall. — Detalla las arquitecturas de Linux y Windows.
- Tanenbaum, A. S. (2009). Modern operating systems. Pearson Education. — Referencia para arquitecturas micronúcleo y sistemas distribuidos.
- Bovet, D. P., Cesati, M. (2005). Understanding the Linux kernel. O'Reilly Media. — Análisis de la implementación de llamadas al sistema y controladores.
- Russinovich, M., Solomon, D. A. (2012). Windows internals. Microsoft Press. — Documentación técnica de la estructura y subsistemas ejecutivos.
- IEEE. (2017). IEEE 1003.1-2017 Standard for information technology - Portable operating system interface (POSIX). IEEE Press. — Especificación de interoperabilidad a nivel de llamadas al sistema.