Fundamentos de los SISTEMAS OPERATIVOS
Fundamentos de los Sistemas Operativos
Bienvenido a la segunda entrada del blog. En este artículo revisamos los conceptos esenciales que sirven de base para comprender el funcionamiento de cualquier sistema operativo moderno. Nos centraremos en definiciones claras, evolución histórica breve, clasificación, arquitectura interna y, especialmente, en el concepto de proceso y su ciclo de vida.
1. Definición de Sistema Operativo
Un sistema operativo (SO) es el software principal que gestiona los recursos del hardware y proporciona servicios a las aplicaciones de usuario. Actúa como intermediario entre el hardware y el software, abstrayendo la complejidad del hardware y permitiendo que los programas se ejecuten de forma controlada y eficiente.
Sus funciones principales incluyen:
- Gestión de procesos y hilos
- Administración de memoria (virtual y física)
- Control de dispositivos de entrada/salida
- Gestión del sistema de archivos
- Provisión de mecanismos de seguridad y protección
- Soporte para concurrencia y comunicación entre procesos
Objetivos clave:
- Maximizar el uso eficiente de los recursos (throughput, utilización de CPU)
- Minimizar el tiempo de respuesta y latencia
- Garantizar aislamiento y protección entre procesos
- Ofrecer una interfaz de programación y usuario consistente
Ejemplos actuales (2026): Windows 11/12, macOS, distribuciones Linux (Ubuntu, Fedora, Arch), Android, iOS, HarmonyOS Next.
2. Breve historia de los sistemas operativos
La evolución de los SO refleja el avance del hardware y las necesidades de los usuarios:
- Décadas de 1940-1950: Sin SO propiamente dicho. Programación directa mediante switches y tarjetas perforadas.
- 1950-1960: Sistemas por lotes (batch processing). IBM 701, GM-NAA I/O.
- 1960s: Introducción de multiprogramación y tiempo compartido. OS/360 (IBM), MULTICS.
- 1969-1970s: Nacimiento de UNIX en Bell Labs (Thompson y Ritchie). Influencia en BSD y System V.
- 1980s: MS-DOS (1981), primeros Windows y Mac OS.
- 1991: Lanzamiento de Linux por Linus Torvalds.
- 2000s-2010s: Auge de sistemas móviles (Android basado en Linux, iOS).
- 2020s-2026: Integración de Rust en kernels (Linux desde 6.1), avances en ARM (Windows on ARM), renacimiento de microkernels (Fuchsia, Redox), y evolución hacia sistemas sin Android base (HarmonyOS Next).
3. Taxonomía de los sistemas operativos
Los SO se clasifican según varios criterios:
- Número de usuarios: Monousuario vs. Multiusuario.
- Número de procesadores: Uniprocesador, multiprocesador (SMP), distribuido.
- Tipo de procesamiento: Por lotes, interactivo/tiempo compartido, tiempo real (hard/soft real-time).
- Arquitectura del kernel:
- Monolítico (Linux tradicional, Windows NT kernel)
- Microkernel (Minix, QNX, se ha revitalizado recientemente)
- Híbrido (macOS XNU, Windows NT)
- Exokernel o library OS (enfoque experimental)
- Dispositivo principal: Escritorio, servidor, móvil, embebido/IoT.
4. Estructura general de un sistema operativo
Un SO típico se organiza en capas:
- Hardware → CPU, memoria, dispositivos periféricos.
- Kernel → Núcleo en modo privilegiado. Gestiona interrupciones, scheduling, memoria, drivers de bajo nivel.
- Subsistemas del kernel → Gestión de procesos, memoria virtual, sistema de archivos, red, seguridad.
- Interfaz de llamadas al sistema (system calls) → Puente entre modo usuario y modo kernel (ej. fork, exec, open, read).
- Bibliotecas y entorno de usuario → libc, shells (bash, zsh), entornos gráficos.
- Aplicaciones de usuario → Navegadores, editores, etc.
Modos de ejecución:
- Modo usuario → Restringido, para aplicaciones normales.
- Modo kernel → Privilegiado, solo accesible por el SO.
5. Definición de proceso
Un proceso es un programa en ejecución. No se limita al código ejecutable; incluye:
- Segmento de texto (código)
- Segmento de datos (variables globales, heap)
- Pila (stack para llamadas a funciones)
- Contexto de ejecución (registros de CPU, contador de programa)
- Recursos asociados (archivos abiertos, sockets, permisos)
Cada proceso posee un identificador único (PID) y un bloque de control de proceso (PCB) que almacena toda su información de estado.
6. Estados de un proceso, transiciones e interrupciones
El ciclo de vida de un proceso se representa mediante un modelo de estados. El modelo más común es el de cinco estados:
- Nuevo (New): El proceso se ha creado, pero aún no se le han asignado recursos.
- Listo (Ready): Tiene todos los recursos necesarios excepto la CPU; espera ser seleccionado por el planificador.
- Ejecutando (Running): Está ocupando la CPU en este momento.
- Bloqueado / Esperando (Blocked/Waiting): No puede continuar porque espera un evento externo (I/O, señal, mutex, etc.).
- Terminado (Terminated/Exit): Ha finalizado su ejecución o ha sido eliminado.
Las transiciones principales son:
- Nuevo → Listo: Admisión (admit) – asignación de recursos.
- Listo → Ejecutando: Despacho (dispatch) – el planificador selecciona el proceso.
- Ejecutando → Listo: Preemptivo (timeout, fin de quantum) o cambio voluntario.
- Ejecutando → Bloqueado: Espera de evento (I/O request, wait()).
- Bloqueado → Listo: Evento ocurrido (I/O completion, señal recibida).
- Ejecutando / Listo → Terminado: Finalización normal o forzada.
Las interrupciones son el mecanismo clave para habilitar el cambio de contexto y el multitasking preemptivo:
- Interrupciones de hardware: Temporizador (para scheduling), finalización de I/O, pulsación de tecla.
- Interrupciones de software: Traps (excepciones como división por cero, page fault), llamadas al sistema (syscall).
Sin interrupciones → solo multitasking cooperativo. Con interrupciones → el SO puede interrumpir cualquier proceso y reasignar la CPU.
Conclusión
Estos fundamentos —definición, historia, taxonomía, estructura y especialmente el manejo de procesos— constituyen la base sobre la que se construyen conceptos más avanzados como memoria virtual, algoritmos de planificación, sincronización y deadlocks.
En la siguiente entrada exploraremos probablemente la **gestión de procesos y algoritmos de planificación** (CFS en Linux, prioridades en Windows, etc.). ¿Qué tema te gustaría abordar a continuación? ¿Memoria virtual, llamadas al sistema, o una comparación práctica entre kernels?
Tus comentarios son bienvenidos: ¿qué sistema operativo utilizas principalmente en 2026 y qué aspecto de los procesos te genera más dudas?
¡Hasta la próxima!
Comentarios
Publicar un comentario