Sistemas Operativos // Teoría
Este apunte no es para leer y ya. Es para tocar: vas a poder prender y apagar el modo kernel, recorrer la historia generación por generación, ver cómo la CPU salta entre procesos, simular algoritmos de planificación con su diagrama de Gantt en vivo, provocar una condición de carrera y resolverla con un semáforo. Cada concepto del apunte original está acá, explicado paso a paso y, donde suma, ampliado con la bibliografía de Tanenbaum y Stallings.
Historia, introducción y conceptos de SO
Idea general: antes de hablar de qué hace un sistema operativo "por dentro", necesitamos entender dónde está parado (entre el hardware y el resto del software), para qué existe (las dos miradas de Tanenbaum), de dónde viene (su historia) y qué conceptos básicos maneja (procesos, memoria, archivos, llamadas al sistema...). Esta unidad es el mapa; las siguientes son el territorio.
1.1 ¿Qué es y dónde vive el SO?
Una computadora moderna es un sistema complejo: integra muchos componentes físicos (CPU, memoria, discos, periféricos) y lógicos (programas). Nadie quiere hablarle directamente al hardware en cada aplicación. El sistema operativo se mete justo en el medio como intermediario entre el hardware de la máquina y el resto del software.
Hacé clic en cada capa para ver su rol:
1.2 Modo Kernel vs Modo Usuario
El hardware ofrece dos modos de ejecución. Esta separación es la base de la protección: sin ella, cualquier programa podría romper todo.
- Modo Kernel (Supervisor): el SO tiene acceso completo y privilegiado al hardware. Puede ejecutar cualquier instrucción que soporte el equipo.
- Modo Usuario: el resto del software corre con restricciones. Solo puede hacer operaciones permitidas y limitadas; si necesita algo privilegiado, le tiene que pedir al SO (vía llamada al sistema, lo vemos más abajo).
Probá ejecutar instrucciones en cada modo:
🔐 MODO KERNEL
El SO. Todo permitido.
🙋 MODO USUARIO
Tu programa. Privilegios recortados.
1.3 Tres definiciones de "Sistema Operativo"
No hay una sola definición canónica. La cátedra junta tres autores. Dale vuelta a cada tarjeta:
Stallings (2005)
visión "control"Silva (2010)
visión "sistema"Tanenbaum (2009)
visión "doble función"Las tres apuntan a lo mismo desde ángulos distintos: interfaz, coordinación y abstracción+administración.
1.4 Las dos perspectivas de Tanenbaum
Tanenbaum dice que el SO se puede mirar de dos formas, y las dos son ciertas a la vez:
Máquina Extendida
El SO esconde el hardware complejo detrás de abstracciones lindas. En vez de pelearte con sectores, cabezales y motores del disco, vos hacés crear / abrir / leer / escribir / cerrar un archivo. Ese "archivo" no existe en el fierro: es una abstracción que te regala el SO.
Administrador de Recursos
El SO reparte de forma ordenada y controlada los recursos (CPU, memoria, dispositivos de E/S) entre muchos programas que compiten por ellos. Decide quién usa qué y cuándo, para que no se pisen.
¿Cómo reparte? → Multiplexado
Para administrar recursos, el SO usa multiplexado (compartir un recurso entre varios). Hay dos sabores:
⏱️ Multiplexado en TIEMPO
Varios programas usan el recurso por turnos, uno después del otro. Caso típico: la CPU.
🧱 Multiplexado en ESPACIO
A cada programa se le da una porción del recurso al mismo tiempo. Caso típico: la memoria.
1.5 Historia de los SO — Generaciones
⚠️ Ojo Tomi: vos mismo anotaste que la cátedra puede tomar fechas y nombres. Por eso los dejé todos. Hacé clic en cada generación para repasarlas.
1.6 Repaso del hardware (Unidad 1, parte 2)
El SO está pegado al hardware: extiende sus instrucciones y gestiona sus recursos. Conviene recordar las piezas básicas.
Procesadores — el ciclo de la CPU
La CPU ejecuta instrucciones en ciclos continuos. Modernamente usa canalización (pipelining) para tener varias instrucciones en vuelo a la vez. El ciclo básico:
(fetch)
(decode)
(execute)
Memoria — jerarquía por velocidad/capacidad/costo
La memoria se organiza en jerarquías: arriba lo más rápido, chico y caro; abajo lo más lento, grande y barato. Tocá un nivel:
Discos, cintas, E/S y buses
Los discos dan acceso más lento que la RAM pero son económicos y grandes; las cintas magnéticas sirven de respaldo para grandes volúmenes. Los dispositivos de E/S tienen controladores y se comunican por buses que transfieren datos entre componentes.
Arranque (boot): BIOS → MBR → SO
Al prender la máquina, el BIOS verifica el hardware básico y decide desde dónde arrancar, probando una lista de dispositivos guardada en la memoria CMOS. Luego carga el MBR y de ahí salta a la partición donde vive el SO.
1.7 Tipos de Sistemas Operativos
Según el tipo de máquina y propósito, los SO se especializan:
Mainframes
Gran capacidad y E/S. OS/390, S/360, UNIX, Linux
Servidores
Brindan servicios por red. Solaris, FreeBSD, Linux, Windows Server
Multiprocesadores
Gestionan múltiples CPUs o núcleos.
Personales
Un solo usuario. Linux, Windows, macOS
De bolsillo (PDAs)
Compactos y funcionales. Palm OS, Symbian, iOS, Android
Integrados (embebidos)
Controlan dispositivos específicos. Linux embebido, QNX, VxWorks
Nodos sensores
Redes inalámbricas chicas para monitoreo remoto. TinyOS
Tiempo real
Restricciones temporales estrictas. eCos, FreeRTOS
Tarjetas inteligentes
Recursos muy limitados, funciones específicas. Java Virtual Machine
1.8 Conceptos clave que maneja el SO
El SO trabaja con un puñado de abstracciones centrales. Acá las presentamos rápido; algunas (procesos, memoria, archivos) tienen unidades enteras dedicadas más adelante.
ls | grep .txt).
El Shell
El shell es el intermediario entre el usuario y el SO: traduce comandos a llamadas al sistema. Ejemplos: sh, csh, ksh, bash. No es parte del kernel: es un programa de usuario más.
Llamadas al sistema (system calls)
Son la interfaz entre los programas y el SO: la forma "oficial" en que un programa de modo usuario le pide al kernel que haga algo privilegiado. Algunas:
read
leer datos
fork
crear proceso (POSIX)
open / close
administrar archivos
mkdir / rmdir
directorios
mount
combina 2+ sistemas de archivos en uno
link
pone el mismo archivo bajo 2+ nombres
link? Para que dos o más miembros del mismo equipo puedan acceder al mismo archivo con nombres distintos, sin duplicarlo.1.9 Estructuras de los Sistemas Operativos
¿Cómo se organiza el SO por dentro? Hay varias arquitecturas:
| Estructura | Cómo funciona | Ejemplo |
|---|---|---|
| Monolítico | Todo el SO corre como un solo programa en modo kernel. | — |
| De capas | Estructura jerárquica en capas con distintos niveles de privilegio. | THE (Dijkstra, 1968), MULTICS |
| Microkernel | Núcleo pequeño; los módulos extra corren en modo usuario. | MINIX 3 |
| Cliente-servidor | Procesos servidor ofrecen servicios a clientes vía mensajes. | — |
| Máquinas virtuales | Múltiples ambientes aislados sobre un mismo hardware físico. | VM/370 |
| Exokernel | Particiona el hardware, asignando recursos específicos a cada usuario/aplicación. | — |
// (En tu apunte MINIX 3 viene con un cariñoso comentario hacia Tanenbaum. Lo dejamos a tu imaginación.)
1.10 Clasificación de los SO
Cuatro ejes para clasificar cualquier SO:
Por tareas
Monotarea vs Multitarea (usa multiplexaje para correr varias tareas).
Por usuarios
Monousuario vs Multiusuario (varios usuarios ejecutan programas a la vez, compartiendo recursos).
Por sesiones
Monosesión vs Multisesión (varias sesiones de usuario activas a la vez).
Por manejo de recursos
Centralizado vs Distribuido (puede usar recursos de más de una computadora simultáneamente).
Elegí una opción. Te marca al instante y te explica por qué.
Procesos: modelo, planificación y concurrencia
Idea general: el proceso es la abstracción más importante del SO; todo lo demás se construye sobre él. Vamos a ver qué es y cómo se crea/termina (Clase 4), cómo el SO decide a quién le toca la CPU (Clase 5: planificación) y qué pasa cuando varios procesos compiten o cooperan por recursos compartidos (Clase 6: concurrencia, exclusión mutua y sincronización).
2.1 Concepto y modelo de proceso
Un proceso es un programa en ejecución. Es la abstracción clave sobre la que se apoya todo el SO. Permite la ejecución pseudo-concurrente: la CPU conmuta rápidamente entre procesos (esto se llama multiprogramación), dando la ilusión de que todos corren a la vez.
Cada proceso es una instancia independiente de un programa, con su propio contador de programa, registros y variables. Aunque cada uno simula tener su CPU virtual propia, la CPU física en realidad salta entre ellos:
Cada proceso "cree" que la CPU es solo suya. En realidad la comparten por turnos a gran velocidad.
2.2 Creación de procesos
Hay cuatro eventos que disparan la creación de un proceso:
1. Arranque del sistema
Se crean procesos de primer plano (interacción directa con el usuario) y de segundo plano (daemons / servicios).
2. Llamada al sistema
Un proceso existente crea otro para una tarea específica.
3. Petición del usuario
El usuario arranca un proceso con un comando o un clic.
4. Trabajo por lotes
Los sistemas batch crean procesos para trabajos en cola.
UNIX vs Windows
| UNIX | Windows | |
|---|---|---|
| Crear | fork: duplica exacto al padre. Luego el hijo suele cambiar su imagen de memoria con otra llamada. | CreateProcess: gestiona directamente creación y ejecución, con muchos parámetros. |
| Terminar | kill | TerminateProcess |
// Nota de tu apunte: "CreateProcess //no existe realmente" — guiño a que en Win32 hay un montón de variantes y wrappers. En ambos sistemas, tras crearse, los procesos tienen espacios de direcciones independientes, aunque pueden compartir ciertos recursos.
2.3 Terminación y jerarquías de procesos
Cuatro razones para terminar
- Salida normal: completó su tarea.
- Salida por error: encontró un error que sí puede manejar (sale a propósito).
- Error fatal: error grave, como acceso inválido a memoria.
- Eliminado por otro proceso: alguien lo mata (
killen UNIX,TerminateProcessen Windows).
Jerarquías
Algunos SO mantienen una jerarquía clara: UNIX organiza los procesos en un árbol, con init como raíz. Windows no mantiene jerarquías estrictas, lo que da una administración más flexible.
2.4 Estados y transiciones de un proceso
Acá hay dos modelos que la cátedra distingue. Cambiá de pestaña y hacé clic en los botones para mover el proceso entre estados.
- El SO descubre que el proceso no puede continuar (se bloquea).
- El planificador dice "ya usaste todo tu tiempo de CPU" (fin de quantum) → vuelve a Listo.
- El planificador, cuando todos usaron su turno, vuelve a arrancar por el primero.
- Sucede el evento externo que el proceso esperaba → se desbloquea.
2.5 Implementación: la tabla de procesos
El SO mantiene una tabla de procesos: una entrada por proceso (a veces llamada PCB, Process Control Block) con toda la info crítica para suspender y reanudar. Incluye:
Estado
ejecución / listo / bloqueado…
Registros
contador de programa, etc.
Memoria
su espacio de direcciones
Archivos abiertos
y planificación de tareas
Gracias a esta tabla, cuando la CPU vuelve a un proceso suspendido puede retomarlo exactamente donde lo dejó.
2.6 Hilos (threads)
Un proceso puede tener varios hilos: múltiples secuencias de ejecución dentro del mismo espacio de direcciones. Ventajas: facilitan tareas concurrentes, mejoran la eficiencia en operaciones de E/S y permiten aprovechar sistemas multiprocesador.
| Procesos | Hilos | |
|---|---|---|
| Memoria | cada uno tiene la suya (independiente) | la comparten dentro del proceso |
| Costo de conmutar | caro | barato |
| Cuidado | — | requiere coordinación explícita para no pisarse (¡spoiler: sección crítica!) |
2.7 Planificación (Clase 5)
La planificación decide qué proceso o hilo se ejecuta cuando varios compiten por la CPU. La hace el planificador con algoritmos que buscan optimizar rendimiento y equidad. Históricamente era simple (sistemas batch), pero la multiprogramación y los sistemas interactivos la complicaron.
Comportamiento de un proceso: CPU-bound vs IO-bound
Los procesos alternan ráfagas de cálculo con esperas por E/S:
🧮 Limitado por cálculo (CPU-bound)
Ráfagas largas de CPU, pocas esperas. Ej: render, compresión.
⌨️ Limitado por E/S (IO-bound)
Ráfagas cortas de CPU, esperas frecuentes. Ej: editor de texto.
¿Cuándo planificar?
- Se crea un nuevo proceso.
- Un proceso termina.
- Un proceso se bloquea por E/S u otra razón.
- Se produce una interrupción que requiere atención.
Apropiativos vs No apropiativos
No apropiativo
El proceso corre hasta bloquearse o terminar voluntariamente. Nadie le saca la CPU a la fuerza.
Apropiativo (preemptive)
El SO puede quitarle la CPU tras un intervalo definido (quantum).
Tres categorías de algoritmos (y sus metas)
| Categoría | Característica | Metas propias |
|---|---|---|
| Por lotes | Favorecen reducir cambios de contexto. Suelen ser no apropiativos. | Rendimiento, tiempo de retorno mínimo, utilización de CPU |
| Interactivos | Necesitan apropiación para respuesta rápida y evitar que uno monopolice. Suelen ser apropiativos. | Tiempo de respuesta rápido, proporcionalidad |
| Tiempo real | Prioridad a plazos estrictos o suaves. No tienen por qué ser apropiativos. | Cumplir plazos, predictibilidad |
2.8 🎮 Simulador de algoritmos de planificación
Acá está lo bueno. Elegí un algoritmo, editá los tiempos de llegada y de ráfaga de cada proceso, y mirá cómo cambia el diagrama de Gantt y las métricas (tiempo de retorno y de espera promedio).
| Proceso | Llegada | Ráfaga (CPU) |
|---|
2.9 El resto del catálogo de algoritmos
En sistemas de procesamiento por lotes
- FCFS (First-Come First-Served): se atienden en orden de llegada.
- SJF (Shortest Job First): prioriza los cortos, minimizando el tiempo promedio.
- SRTN (Shortest Remaining Time Next): versión apropiativa de SJF, mira el tiempo restante.
En sistemas interactivos
Turno circular (Round-Robin)
Cada proceso recibe un quantum fijo, cíclicamente.
Por prioridad
Se ejecuta el de mayor prioridad. En cada pulso de reloj la prioridad baja; si cae por debajo del siguiente, se ejecuta el siguiente.
Múltiples colas
Prioridades en clases; los procesos cambian de clase según uso. Mayor clase ⇒ más quantums.
Proceso más corto a continuación
SJF adaptado a interactivos, usando estimaciones previas.
Planificación garantizada
Garantiza una porción de CPU proporcional.
Por sorteo (lottery)
Cada proceso recibe boletos; se sortea al azar el ganador.
Por partes equitativas
Reparte la CPU equitativamente entre usuarios, no entre procesos.
En tiempo real
Es crucial respetar los plazos (deadlines). Hay dos tipos:
⏰ Tiempo real DURO
Plazos estrictos obligatorios. Ej: control de un airbag.
🕐 Tiempo real SUAVE
Plazos deseables pero no críticos. Ej: reproducir video.
Política vs Mecanismo
Planificación de hilos
| A nivel usuario | A nivel kernel | |
|---|---|---|
| Quién planifica | la propia aplicación, sin el kernel | el kernel |
| Pros | eficiente | mejor administración y estabilidad |
| Contras | menos robusto | más lento (conmutación de contexto cara) |
2.10 Concurrencia, exclusión mutua y sincronización (Clase 6)
Tres formas de gestionar múltiples procesos:
Multiprogramación
Múltiples procesos en un monoprocesador.
Multiprocesamiento
Múltiples procesos en un multiprocesador.
Proc. distribuido
Procesos en varias computadoras distribuidas.
La concurrencia aparece en 3 contextos: múltiples aplicaciones, aplicaciones estructuradas (divididas en procesos/hilos) y en la propia estructura del SO.
Los 6 términos clave
Dales vuelta — son las palabras que más caen en el parcial:
Sección crítica
Exclusión mutua
Interbloqueo (Deadlock)
Círculo vicioso (Livelock)
Condición de carrera
Inanición (Starvation)
Dificultades en mono y multiprocesador
- Compartir recursos globales es un peligro.
- Al SO le es complicado asignar recursos de forma óptima.
- Es difícil localizar errores: los resultados son no deterministas y no reproducibles (¡condición de carrera!).
Las 4 preocupaciones del SO
- Seguir la pista de los varios procesos (tabla de procesos).
- Asignar y desasignar recursos: CPU, memoria (virtual), ficheros y dispositivos de E/S.
- Proteger datos y recursos de cada proceso frente a interferencias de otros.
- Que el resultado de un proceso sea independiente de la velocidad a la que corre respecto a los demás.
2.11 🏁 Demo: condición de carrera
Dos hilos quieren incrementar el mismo contador. Cada incremento son en realidad 3 micro-pasos: leer → sumar 1 → escribir. Si el SO entrelaza mal los pasos, se pierde un incremento. Probá las dos ejecuciones:
Resultado esperado: 2. Pero si ambos leen antes de que cualquiera escriba, los dos escriben "1" y se pierde un incremento. Eso es una condición de carrera, y se arregla con exclusión mutua.
2.12 Interacción de procesos y exclusión mutua
Tres niveles de interacción
| Nivel | Relación | Problemas posibles |
|---|---|---|
| No se perciben | Competencia | exclusión mutua, interbloqueo, inanición |
| Se perciben indirectamente | Cooperación por compartición | los 3 anteriores + incoherencia de datos |
| Se perciben directamente | Cooperación por comunicación | interbloqueo, inanición |
Los tres males de la competencia
Exclusión mutua
Necesitamos que solo un proceso entre a su sección crítica a la vez.
Interbloqueo
Provocado por la exclusión mutua: P1 y P2 tienen recursos que el otro necesita y no los liberan.
Inanición
También por exclusión mutua: un proceso espera eternamente recursos que no se liberan.
Cooperación entre procesos
Vía compartición
Comparten objetos sin conocer explícitamente al otro. Hay que garantizar integridad de datos y exclusión mutua al escribir.
Vía comunicación
Interactúan explícitamente con paso de mensajes. Claves: sincronización y prevención de interbloqueos.
Los 6 requisitos para la exclusión mutua
- Un único proceso a la vez dentro de su sección crítica.
- Un proceso detenido en su sección no crítica no debe interferir con otros.
- No se puede postergar indefinidamente el acceso de un proceso a su zona crítica.
- Si nadie está en su sección crítica, cualquiera debe poder entrar sin demora.
- No se hacen suposiciones sobre las velocidades relativas de los procesos.
- Un proceso permanece en la sección crítica solo un tiempo finito.
Soporte por hardware
El hardware ayuda con: deshabilitar interrupciones e instrucciones máquina atómicas como Test-and-Set o Exchange. Mantienen acceso atómico, pero tienen 3 desventajas:
1. Espera activa
El proceso desperdicia CPU "haciendo busy-wait".
2. Posible inanición
3. Posible interbloqueo
2.13 🚦 Semáforos (Dijkstra, 1965)
Un semáforo es una variable que sincroniza procesos con dos operaciones atómicas: semWait(s) y semSignal(s). Permiten frenar procesos en un punto hasta recibir una señal. Es la herramienta estrella para exclusión mutua.
- Se inicia con un valor no negativo.
- semWait decrementa el semáforo. Si queda negativo, el proceso se bloquea; si no, sigue.
- semSignal incrementa el semáforo. Si el valor es ≤ 0, desbloquea a uno de los procesos en espera.
Probalo con un semáforo inicializado en 1 (es un mutex, deja entrar de a uno). Mandá procesos a pedir la sección crítica:
CRÍTICA
Semáforo fuerte: la cola es FIFO (el más usado, evita inanición). Semáforo débil: no define orden de extracción de la cola.
Para ambos es crucial tener una cola de procesos en espera.
2.14 Monitores y paso de mensajes
Monitores
Los monitores los incorpora el lenguaje de programación. Encapsulan la exclusión mutua con procedimientos y datos locales, asegurando que solo un proceso acceda al recurso protegido a la vez. Simplifican mucho la programación concurrente al ofrecer estructuras claras. Se comunican con send(destino, mensaje) y receive(origen, mensaje).
Paso de mensajes
Permite a los procesos sincronizarse y comunicarse enviando/recibiendo mensajes. Tres ejes de diseño:
| Eje | Opciones |
|---|---|
| Sincronización | Bloqueante / no bloqueante en envío y recepción. Casos: envío bloq.+recepción bloq. (ambos esperan a la entrega), envío no bloq.+recepción bloq., y envío no bloq.+recepción no bloq. |
| Direccionamiento | Directo (se especifica emisor y receptor) o indirecto (vía buzones: colas que guardan mensajes temporalmente). |
| Formato | Mensajes cortos/fijos o variables, según el contexto. |
Exclusión mutua con paso de mensajes
Procesos, planificación y concurrencia.
U2: proceso = programa en ejecución con su PCB; estados Listo/Ejecución/Bloqueado (Tanenbaum) o con Suspendidos (Stallings); planificación FCFS/SJF/SRTN/RR + interactivos + tiempo real; concurrencia trae condición de carrera, deadlock e inanición, que se resuelven con exclusión mutua: semáforos, monitores y paso de mensajes.
Bibliografía: Tanenbaum, A. S. (2009). Sistemas operativos modernos (3ª ed.). Pearson · Stallings, W. (2005). Sistemas operativos (5ª ed.). Pearson.
Archivo único, sin dependencias externas. Hecho para hatear a Tanenbaum con cariño. 🐧