graph TD
User(("Usuario"))
Apps["Aplicaciones"]
OS["Sistema Operativo"]
HW["Hardware"]
User --> Apps
Apps --> OS
OS --> HW
1 Introducción a los Sistemas Operativos
“Un sistema operativo es como un gobierno. No realiza ninguna función útil por sí mismo, sino que proporciona el entorno dentro del cual otros programas pueden hacer un trabajo útil.” — Abraham Silberschatz.
Imaginen una computadora moderna sin software. Sería, en esencia, un costoso pisapapeles de metal y silicio. El hardware [1] (procesador, memoria, discos) tiene un potencial inmenso, pero carece de voluntad propia. Necesita un director de orquesta que le indique cuándo tocar, qué instrumento usar y con qué intensidad. Ese director es el Sistema Operativo (SO).
1.1 Definición y Doble Naturaleza
El Sistema Operativo es el programa fundamental que actúa como intermediario entre el usuario y el hardware. Sin embargo, su definición cambia radicalmente según quién la formule. Esta es su naturaleza dual.
1.2 La Perspectiva del Usuario: Absrtracción y Conveniencia
Para nosotros, los usuarios y programadores, el hardware «desnudo» es complejo, incómodo y hostil. Lidiar directamente con los chips, discos y cables requiere conocer detalles técnicos abrumadores y propensos a errores. Aquí es donde el Sistema Operativo realiza su función más “humana”: la Abstracción.
¿Qué hace realmente?
El SO actúa como un traductor y embellecedor. Oculta la “fealdad” y complejidad de los componentes físicos (como tener que mover un brazo mecánico en el disco duro para leer un dato) y nos presenta interfaces limpias, elegantes y fáciles de entender
La Transformación: Convierte lo difícil en conceptos cotidianos.
En lugar de lidiar con sectores, pistas y motores de disco, el SO nos da “archivos” (como fotos o documentos) que podemos abrir y guardar fácilmente.
En lugar de gestionar la memoria física y direcciones numéricas, nos permite abrir múltiples “ventanas” y programas simultáneamente sin preocuparnos por dónde se guardan sus datos en el chip de RAM.
1.3 La Perspectiva del Sistema: El «Gestor de Recursos» (Visión Bottom-Up)
Si la visión anterior era “hacia abajo” (desde la aplicación hacia el hardware), esta es la visión “desde abajo”. Para el sistema operativo, la computadora no es más que un conjunto de componentes electrónicos (procesadores, memorias, discos, interfaces de red) que deben administrarse.
El Problema del Caos:
Imaginemos qué pasaría si tres programas intentaran imprimir a la vez en la misma impresora sin un intermediario. Las líneas de texto del Programa 1 se mezclarían con las del Programa 2 y 3, resultando en un caos absoluto de papel inútil. El SO evita esto imponiendo un orden: almacena los datos en un búfer (spooling) y decide quién imprime primero.
La Estrategia de Gestión (Multiplexación):
Para gestionar la competencia por recursos limitados, el SO utiliza una técnica llamada multiplexación, que consiste en compartir un recurso de dos formas distintas:
1. Multiplexación en el Tiempo (Turnos):
Se utiliza para recursos que solo puede usar uno a la vez, como la CPU o la impresora. El SO decide quién lo usa, por cuánto tiempo, y quién sigue después.
2. Multiplexación en el Espacio (División):
Se usa para recursos que se pueden dividir, como la memoria RAM o el disco duro. En lugar de turnarse, cada programa obtiene una “parcela” del recurso para usarla simultáneamente con otros.
El Sistema Operativo actúa como un asignador de recursos (Resource Allocator). Su objetivo es resolver conflictos entre solicitudes concurrentes para garantizar dos cosas:
Eficiencia: Que el hardware (como la CPU) esté ocupado la mayor parte del tiempo posible, evitando tiempos muertos.
Equidad: Que todos los programas reciban su parte justa de recursos y ninguno monopolice el sistema en detrimento de los demás.
1.4 El Núcleo del Asunto: Kernel vs. Sistemas
Es vital distinguir entre el sistema operativo propiamente dicho y el resto del software.
- El Kernel (Núcleo): Es el programa que se ejecuta siempre, desde que encendemos la computadora hasta que la apagamos. Tiene control total sobre todo lo que ocurre en el sistema.
- Programas de Sistema: Son programas que vienen con el SO (como el explorador de archivos, el compilador o la calculadora) pero no son parte del kernel. Si se cierran, el sistema sigue funcionando.
Si el sistema operativo es un programa que necesita ser cargado en memoria para funcionar, pero la memoria está vacía al encender la PC, ¿quién carga al sistema operativo?
Este dilema se resuelve con el proceso de Bootstrapping:
- Al encender, un pequeño chip (ROM/UEFI) ejecuta un código rudimentario.
- Este código busca el Bootloader en el primer sector del disco.
- El Bootloader localiza el Kernel del SO y lo carga en memoria.
- El Kernel toma el control y el sistema “cobra vida”.
1.5 Servicios Fundamentales
Para cumplir sus roles, el SO ofrece servicios específicos. Podemos verlos como departamentos de una empresa:
- Gestión de Procesos (RRHH): Decide qué programa usa la CPU. Pausa, reanuda y elimina tareas.
- Gestión de Memoria (Logística): Asigna parcelas de RAM a cada programa. Evita que un juego invada la memoria de tu procesador de texto.
- Gestión de Archivos (Archivo): Convierte sectores magnéticos o celdas en una jerarquía lógica.
- Gestión de E/S (Comunicaciones): Habla con el teclado, mouse, pantalla e impresora, gestionando señales (interrupciones).
1.6 Evolución: Una Historia de Eficiencia
La evolución de los sistemas operativos es, en esencia, una carrera constante por resolver un problema económico: el hardware era extremadamente costoso y los humanos muy lentos. El objetivo siempre fue evitar que la CPU (el componente más caro) perdiera tiempo “sin hacer nada”.
graph LR
F1("Fase 1:<br>Lotes") --> F2("Fase 2:<br>Multiprogramación")
F2 --> F3("Fase 3:<br>Tiempo Compartido")
F3 --> F4("Fase 4:<br>Sistemas Distribuidos")
1.6.1 Fase 1: Procesamiento por Lotes (Batch Processing)
- ¿Qué es? El procesamiento por lotes es una técnica donde los trabajos (programas) se agrupan en conjuntos o “lotes” similares y se ejecutan secuencialmente, uno tras otro, sin intervención manual entre ellos.
- El Problema que resolvió: En las primeras computadoras (años 50), el programador tenía que reservar la máquina, cargar su programa manualmente, ejecutarlo y depurarlo. Si se detenía a pensar qué hacer, la máquina estaba ociosa. Esto desperdiciaba muchísimo tiempo de CPU.
- La Solución: Se eliminó la interacción directa del usuario con la máquina. Los programadores entregaban sus tarjetas perforadas a un operador, quien las agrupaba en una cinta magnética. Un pequeño programa monitor (el ancestro del SO) leía el primer trabajo, lo ejecutaba, y al terminar, cargaba automáticamente el siguiente. Esto reducía drásticamente el tiempo muerto entre trabajos.
En 1956, General Motors creó el que se considera el primer sistema operativo básico para su IBM 704. Su única función era pasar automáticamente al siguiente trabajo.
- Limitación: Aunque mejoró el uso de la CPU, tenía un defecto grave: si un trabajo necesitaba leer datos de una cinta (una operación lenta), la CPU se detenía por completo a esperar. No podía hacer nada más hasta que terminara la lectura.
1.6.2 Fase 2: Multiprogramación
- ¿Qué es? La multiprogramación es la técnica que permite tener múltiples procesos (programas) cargados en la memoria principal al mismo tiempo, listos para ejecutarse. El sistema operativo cambia rápidamente la atención de la CPU entre estos trabajos para mantenerla siempre ocupada.
- El Problema que resolvió: Se diseñó para solucionar la ineficiencia del procesamiento por lotes. Como la CPU es miles de veces más rápida que los dispositivos de E/S (como discos o impresoras), en un sistema por lotes la CPU pasaba el 80-90% del tiempo inactiva esperando a que terminaran operaciones de lectura/escritura.
Cómo funciona (Contexto): Imagina que tienes tres programas en memoria: A, B y C.
- El SO comienza a ejecutar el Programa A.
- De repente, el Programa A necesita leer un archivo del disco. Como esto tarda “una eternidad” (en tiempo de computadora), en lugar de dejar la CPU inactiva esperando, el SO bloquea al Programa A.
- Inmediatamente, el SO asigna la CPU al Programa B.
- Si el Programa B también tiene que esperar por algo (ej. una impresión), la CPU salta al Programa C.
- Cuando el disco termina de leer los datos del Programa A, este vuelve a estar listo para usar la CPU.
- Resultado: La utilización de la CPU mejora drásticamente, acercándose al 100% en condiciones ideales, ya que siempre hay “alguien” dispuesto a usar el procesador mientras otros esperan por dispositivos lentos.
1.6.3 Fase 3: Tiempo Compartido (Time-Sharing)
- ¿Qué es? Es una extensión lógica de la multiprogramación diseñada para la interacción directa con el usuario. Permite que múltiples usuarios usen la computadora simultáneamente, dándoles la ilusión de que tienen la máquina dedicada solo para ellos.
- Diferencia clave: Mientras la multiprogramación busca maximizar el uso de la CPU, el tiempo compartido busca minimizar el tiempo de respuesta. La CPU cambia entre los programas de los usuarios tan rápido (cada pocos milisegundos) que parece que todos se ejecutan a la vez (Quantum).
1.6.4 Fase 4: Sistemas Distribuidos y Paralelos
Hoy, la computación ha trascendido un solo chasis.
- Sistemas Paralelos (Multiprocesadores): Son sistemas que tienen más de una CPU compartiendo la misma memoria física y reloj. Permiten la ejecución verdadera simultánea de procesos, aumentando la confiabilidad (si falla una CPU, las otras siguen) y la velocidad.
- Sistemas Distribuidos: Consisten en múltiples computadoras separadas, cada una con su propia memoria y procesador, conectadas por una red. Para el usuario, el sistema parece una sola computadora potente y unificada, aunque en realidad el trabajo se reparte entre muchas máquinas remotas. Esto permite resolver problemas masivos que una sola máquina no podría manejar (La Nube).
1.7 Arquitectura Moderna: Cliente-Servidor
Los sistemas operativos monolíticos son difíciles de mantener. La tendencia moderna es la arquitectura modular, inspirada en el modelo Cliente-Servidor.
graph TD
subgraph UserSpace ["Espacio de Usuario"]
direction TB
Client["Proceso Cliente (App)"]
Server["Servidor de Archivos"]
end
subgraph KernelSpace ["Espacio Kernel"]
direction TB
Kernel(("Microkernel"))
end
Client -- "1. Petición" --> Kernel
Kernel -- "2. Entrega" --> Server
Server -- "3. Respuesta" --> Kernel
Kernel -- "4. Resultado" --> Client
- Microkernels: Se intenta sacar lo máximo posible del Kernel y moverlo al espacio de usuario.
- Ventaja: Si el “Servidor de Archivos” falla, el Kernel lo reinicia sin que la máquina se cuelgue.
- RPC (Llamada a Procedimiento Remoto): Es el pegamento. Permite que un programa llame a una función en otro proceso como si fuera local.
