Process Management es el corazón de los sistemas operativos: crear, planificar, sincronizar y eliminar procesos. Un proceso es un programa en ejecución con su propio espacio de direcciones, registros, y estado.
Proceso vs Programa
| Concepto | Definición |
|---|---|
| Programa | Código estático en disco |
| Proceso | Programa en ejecución en memoria |
| Thread | Unidad de ejecución dentro de un proceso |
PCB (Process Control Block)
El PCB es la estructura de datos que el OS mantiene para cada proceso. Contiene:
- PID: identificador único.
- Estado: new, ready, running, waiting, terminated.
- Registros: PC, SP, registros de propósito general.
- Información de memoria: base/limit registers, page table.
- Información de scheduling: prioridad, quantum.
- Contadores: CPU usage, tiempos de inicio/fin.
Estados de un Proceso
new → ready → running → terminated
↓ ↓
waiting ←──┘
- New: proceso creado pero no admitido en memoria.
- Ready: en cola de listos, esperando CPU.
- Running: ejecutándose en CPU.
- Waiting: bloqueado por I/O o evento.
- Terminated: finalizado, esperando limpieza.
Context Switch
Cambiar de un proceso a otro:
- Guardar estado del proceso saliente (registros, PC, SP) en su PCB.
- Seleccionar nuevo proceso del scheduler.
- Cargar estado del nuevo proceso desde su PCB.
Overhead: el context switch no hace trabajo útil. Tipicamente 1-100 microsegundos.
Procesos vs Threads
| Aspecto | Proceso | Thread |
|---|---|---|
| Espacio de direcciones | Privado | Compartido (dentro del proceso) |
| Creación | Lenta (fork) | Rápida |
| Comunicación | IPC (lenta) | Memoria compartida (rápida) |
| Bloqueo | Bloquea el proceso entero | Solo bloquea el thread |
| Overhead | Alto | Bajo |
System Calls
| Llamada | Descripción |
|---|---|
| fork() | Crea proceso hijo (copia del padre) |
| exec() | Reemplaza imagen del proceso |
| wait() | Espera a que termine un hijo |
| exit() | Termina el proceso |
Aplicaciones
- Multitasking — ejecutar múltiples programas simultáneamente
- Servidores — un proceso por conexión
- Contenedores — procesos aislados con namespaces
- Enseñanza — base para scheduling y concurrency
Trayectoria de Práctica
- Investiga el ciclo de vida de un proceso: new → terminated.
- Implementa un scheduler simple round-robin.
- Mide overhead de context switch en tu sistema.
- Investiga fork() y exec(): ¿por qué fork+exec es el patrón estándar?
- Investiga threads POSIX vs procesos: ¿cuándo usar cada uno?