graph LR
HW1("Tubos de Vacío") -- "Sin SO" --> SO1("Operación Manual")
HW2("Transistores") -- "Monitor Residente" --> SO2("Lotes (Batch)")
HW3("Circuitos Integrados") -- "Multiprogramación" --> SO3("Tiempo Compartido")
HW4("Microprocesador") -- "GUI / Multitarea" --> SO4("Personal / Nube")
2 Evolución y Arquitectura de los Sistemas Operativos
La arquitectura de los Sistemas Operativos (SO) es el resultado de una evolución histórica marcada por la necesidad de optimizar el uso del hardware. Cada salto generacional en la electrónica ha dictado el diseño del software de control, transitando desde la gestión manual de componentes hasta la abstracción total de servicios en la nube.
2.1 Evolución Histórica de los Sistemas Operativos
Las primeras máquinas de cómputo carecían de SO; eran dispositivos de propósito único del tamaño de habitaciones completas. Su evolución se analiza a través de las generaciones de hardware.
2.1.1 Primera Generación (1945–1955): Tubos de Vacío
- Hardware: Máquinas voluminosas construidas con tubos de vacío que consumían cantidades masivas de energía.
- Operación: No existían lenguajes de alto nivel ni SO. La ejecución era rudimentaria: los ingenieros programaban directamente en lenguaje de máquina mediante tableros de conexiones o tarjetas perforadas. El programador era también el operador físico de la máquina.
2.1.2 Segunda Generación (1955–1965): Transistores y Procesamiento por Lotes
- Hito de Hardware: El Transistor. Permitió equipos más pequeños, rápidos, confiables y económicos.
- Hito de Software: En 1957 surge FORTRAN (IBM), revolucionando el acceso para científicos.
- Nacimiento del SO (Procesamiento por Lotes): Para maximizar el costoso tiempo de CPU, se implementó la técnica de batch processing.
- Flujo de Trabajo: El programador entregaba sus tarjetas perforadas a un operador. Este agrupaba los trabajos y los cargaba secuencialmente.
- Monitor Residente: Antecesor directo del núcleo moderno, cuya función era cargar automáticamente el siguiente trabajo tras finalizar el anterior, eliminando el tiempo muerto de intervención humana.
2.1.3 Tercera Generación (1965–1980): Circuitos Integrados (IC)
- Hardware: Integración de múltiples transistores en un solo chip de silicio. Mayor potencia a menor costo (ej. Familia IBM 360).
- Paradigmas del SO:
- Multiprogramación: Capacidad de mantener varios trabajos en memoria simultáneamente. Si un proceso esperaba por E/S, la CPU saltaba a otro trabajo, optimizando el ciclo de procesamiento.
- Tiempo Compartido (Time-Sharing): Permitió que múltiples usuarios interactuaran con la máquina de forma concurrente mediante terminales, creando la ilusión de una máquina dedicada para cada uno.
- Estandarización: COBOL se popularizó en el sector empresarial, ampliando el alcance comercial de la informática.
2.1.4 Cuarta Generación (1980–Presente): Microprocesadores y PCs
- Hardware: El microprocesador integra la CPU completa en un solo chip (LSI/VLSI).
- Evolución del SO:
- Interfaces Gráficas (GUI): El enfoque se desplazó hacia la usabilidad (Windows, macOS). La multitarea se convirtió en estándar.
- Conectividad y Redes: El SO se volvió el nodo de acceso a Internet y, posteriormente, a la computación en la nube.
- Ubicuidad: Surgimiento de dispositivos móviles (smartphones/tablets) y la integración de Inteligencia Artificial como servicio del sistema.
2.2 Estructura de los Sistemas Operativos
La organización interna del núcleo (kernel) define su robustez y eficiencia.
2.2.1 Sistemas Monolíticos
El SO se compila como un único programa que corre en modo núcleo. Todos los componentes (gestión de memoria, archivos, planificación) comparten el mismo espacio de direcciones.
- Ventaja: Alto rendimiento por llamadas directas a funciones.
- Desventaja: Un fallo en cualquier módulo (ej. un controlador) compromete la estabilidad de todo el sistema.
2.2.2 Sistemas de Microkernel
Se reduce el núcleo al mínimo (gestión de memoria básica, hilos e IPC). Los servicios tradicionales del SO corren como procesos de usuario independientes.
Ventaja: Alta tolerancia a fallos y modularidad.
Desventaja: Sobrecarga de rendimiento debido al paso de mensajes entre espacios de usuario y núcleo.
2.3 Estructura en Capas (Layered Structure)
Organiza el SO como una jerarquía de niveles. Cada capa se construye sobre la inferior y solo utiliza los servicios que esta le provee.
2.3.1 El Modelo “THE” (Dijkstra, 1968)
Este sistema pionero dividió las funciones del SO para garantizar la corrección lógica del diseño:
| Capa | Función | Responsabilidad |
|---|---|---|
| 5 | Usuario | Ejecución de aplicaciones finales. |
| 4 | Gestión de E/S | Manejo de flujos de datos (buffering) para periféricos. |
| 3 | Consola | Comunicación bidireccional entre operador y procesos. |
| 2 | Memoria | Gestión de la memoria virtual y almacenamiento masivo. |
| 1 | Planificación | Asignación de tiempo de CPU y multiprogramación. |
| 0 | Hardware | Gestión de interrupciones y estados físicos del procesador. |
La elección de una arquitectura depende del equilibrio entre rendimiento (Monolítico) y fiabilidad/seguridad (Microkernel). La mayoría de los sistemas operativos modernos (como Windows NT o macOS) utilizan enfoques híbridos.
2.4 El Kernel (Núcleo) en los sistemas operativos
El kernel o núcleo puede considerarse el corazón mismo del sistema operativo, actuando como el intermediario de más bajo nivel entre el hardware físico y el software de interfaz (como el shell o las aplicaciones).
Para comprender su profundidad, es crucial entender su entorno de ejecución basado en una dualidad de modos de protección proporcionada por el hardware:
Modo Kernel (o Modo Supervisor):
Es un estado de ejecución donde el software tiene un acceso ilimitado y completo a todos los recursos del procesador y la memoria. En este modo se pueden ejecutar “instrucciones privilegiadas” que afectan el control de la máquina, como administrar el hardware, gestionar interrupciones o alterar los límites de seguridad. El kernel es la pieza de software que opera exclusivamente bajo este modo.
Modo Usuario:
Es el estado restringido en el que se ejecutan los programas de aplicación regulares. Tienen prohibido ejecutar instrucciones que interactúen directamente con el hardware y solo tienen acceso a un espacio de memoria confinado.
El kernel contiene los componentes esenciales para administrar los recursos del sistema: el planificador de procesos (scheduler), el gestor de memoria, el gestor de entrada/salida (I/O) y el administrador de comunicación interprocesos.
La forma en que se estructura este kernel define la arquitectura del sistema: en un sistema monolítico, todo el sistema operativo es un único gran programa que corre en modo kernel, lo que lo hace muy eficiente pero vulnerable, ya que un error puede colgar toda la máquina.
Como alternativa, arquitecturas como el Microkernel mantienen en el modo supervisor solo las funciones más primitivas (como el manejo básico de memoria y la comunicación interprocesos), trasladando la mayoría de los servicios a procesos que se ejecutan en modo usuario para maximizar la fiabilidad y evitar caídas totales.
2.5 Estructura Cliente-Servidor y mecanismos básicos de control
2.5.1 La Estructura Cliente-Servidor:
Esta arquitectura es una evolución conceptual de los sistemas operativos donde se dividen los procesos en dos clases: los servidores, que proporcionan servicios específicos (como un servidor de archivos o un servidor de procesos), y los clientes, que utilizan estos servicios. En lugar de realizar llamadas directas al sistema operativo, un cliente solicita un servicio construyendo un mensaje y enviándolo al servidor, el cual realiza el trabajo y devuelve la respuesta. Este modelo brilla especialmente por su extensibilidad a sistemas distribuidos, ya que para el cliente es transparente si el servidor está en su misma máquina o al otro lado de una red. A nivel técnico, esto se implementa frecuentemente mediante RPC (Llamadas a Procedimientos Remotos), un mecanismo que empaqueta (marshaling) los parámetros de una solicitud para que llamar a un servicio remoto parezca exactamente igual a ejecutar una función local.
2.5.2 Mecanismos de Control:
Llamadas, Interrupciones, Excepciones y Eventos:
Para que el software interactúe con el hardware y el kernel de manera ordenada y segura, se utilizan distintas transferencias de control:
Llamadas al Sistema (System Calls):
Son el puente controlado mediante el cual un programa en modo usuario solicita un servicio del kernel. El programa coloca los parámetros requeridos en registros y ejecuta una instrucción especial de Trampa (Trap). Esto detiene momentáneamente al programa, cambia el procesador a modo kernel y salta a una dirección de memoria fija para que el sistema operativo ejecute la acción solicitada de forma segura antes de devolver el control al usuario.
Interrupciones (Interrupts):
Son señales generadas principalmente por el hardware (de manera asíncrona) para avisar al procesador que ha ocurrido un evento importante, como la llegada de datos de un disco o presionar una tecla. Al recibir una interrupción, el hardware detiene inmediatamente el proceso actual, guarda su estado (su contador de programa y registros) e inicia la ejecución de una Rutina de Servicio de Interrupción (ISR).
Excepciones y Trampas (Traps):
Aunque a veces se usan indistintamente con las interrupciones, estas son síncronas (generadas por el software). Una trampa suele ser un salto intencional al kernel (como la llamada al sistema), mientras que una excepción ocurre de forma no planificada debido a un error crítico o a una violación de protección, como intentar dividir por cero o acceder a memoria no autorizada.
2.6 Máquinas Virtuales
La virtualización es una tecnología que consiste en crear un clon casi exacto del hardware físico de la máquina en un entorno de software. Su propósito es aislar recursos y permitir que múltiples sistemas operativos completamente diferentes convivan simultáneamente en un mismo computador, creyendo cada uno que posee control total sobre los procesadores, discos y memoria de la máquina.
El corazón de la virtualización es el Hipervisor (o Monitor de Máquina Virtual).
Este componente es el único que opera con los privilegios reales más altos de la máquina. Existen dos tipos principales:
Hipervisor Tipo 1: (Bare Metal)
Corre directamente sobre el hardware físico (bare metal), proporcionando y administrando las máquinas virtuales a las que se les instalan los “sistemas operativos invitados” (guests).
Hipervisor Tipo 2 (Hosted):
Corre como una aplicación estándar sobre un sistema operativo anfitrión (Host), dependiendo de él para interactuar con los dispositivos físicos (ej. VMware Workstation).
¿Cómo funciona la ilusión?
Dado que un sistema operativo invitado debe poder ejecutar instrucciones críticas (como modificar la memoria virtual), el hipervisor debe interceptar estas acciones para mantener el control. Cuando el SO invitado ejecuta una instrucción “sensible”, el procesador genera un trap (trampa) hacia el hipervisor, el cual verifica la instrucción y la emula como si el hardware real la hubiera ejecutado (enfoque de atrapar y emular).
Para optimizar el altísimo costo de procesamiento que requiere emular instrucciones constantemente, han surgido dos caminos:
Paravirtualización:
Modifica el código fuente del sistema operativo invitado para que, en lugar de intentar usar instrucciones prohibidas, haga hypercalls (llamadas directas al hipervisor) pidiendo los recursos directamente.
Virtualización a Nivel de SO (Contenedores):
Una alternativa a las máquinas virtuales puras. En vez de ejecutar múltiples sistemas operativos completos manejados por un hipervisor, el kernel de un único sistema operativo particiona sus propios recursos para crear múltiples entornos de usuario aislados llamados “contenedores”. Son mucho más ligeros y eficientes en rendimiento, pero con la limitante de que no pueden ejecutar sistemas operativos distintos (todos comparten el kernel anfitrión) y su aislamiento de seguridad es menos absoluto frente a fallos del sistema base.


