Gestión de Procesos e Hilos en Sistemas Operativos

Conceptos fundamentales sobre procesos, hilos, planificación y sincronización

Conceptos Básicos de Procesos

¿Qué es un proceso?

Un proceso es un programa en ejecución que requiere recursos del sistema como CPU, memoria y dispositivos de E/S. Cada proceso tiene su propio espacio de memoria y contexto de ejecución.

Diferencia entre Programa y Proceso

  • Programa: Conjunto de instrucciones pasivas almacenadas en disco.
  • Proceso: Instancia activa de un programa en ejecución, con recursos asignados.

Ejemplo: Un archivo .exe es un programa; cuando se ejecuta, se convierte en un proceso.

Hilos (Threads) en Sistemas Operativos

¿Qué es un hilo?

Un hilo es la unidad más pequeña de procesamiento que puede ser ejecutada por un sistema operativo. Es una secuencia de instrucciones dentro de un proceso que se puede ejecutar independientemente.

Diferencia entre Proceso e Hilo

Característica Proceso Hilo
Definición Programa en ejecución con su propio espacio de memoria Parte de un proceso que comparte su espacio de memoria
Recursos Tiene sus propios recursos asignados Comparte recursos con otros hilos del mismo proceso
Creación Más costosa en tiempo y recursos Más rápida y con menos sobrecarga
Comunicación Requiere mecanismos complejos (pipes, sockets) Más rápida al compartir memoria

Ventajas del uso de hilos

  • Menor sobrecarga: Los hilos comparten memoria, reduciendo el uso de recursos
  • Mayor rendimiento: En sistemas multiprocesador, permiten verdadero paralelismo
  • Comunicación rápida: Al compartir memoria, la comunicación entre hilos es más eficiente
  • Responsividad: Mejora la capacidad de respuesta de aplicaciones (ej. interfaces gráficas)
  • Eficiencia: Menor tiempo de creación y terminación que los procesos

Modelos de Implementación de Hilos

1. Modelo a nivel de usuario

  • Gestión completa en espacio de usuario (bibliotecas)
  • Ventaja: Más eficiente, sin intervención del kernel
  • Desventaja: No aprovecha múltiples núcleos del CPU
  • Ejemplo: Hilos POSIX (pthreads) en algunos sistemas

2. Modelo a nivel de kernel

  • Gestión directa por el sistema operativo
  • Ventaja: Paralelismo real en sistemas multiprocesador
  • Desventaja: Mayor sobrecarga por cambios de contexto
  • Ejemplo: Hilos en Windows (fibers) y Linux (kernel threads)

3. Modelo híbrido

  • Combina ambos modelos para equilibrar eficiencia y rendimiento
  • Múltiples hilos de usuario asignados a múltiples hilos del kernel
  • Ejemplo: Implementación en Solaris

Aplicaciones Prácticas de Hilos

  • Navegadores web: Un hilo por pestaña para mejor responsividad
  • Servidores web: Manejo de múltiples peticiones simultáneas
  • Juegos: Hilos separados para IA, gráficos y sonido
  • IDEs: Compilación en segundo plano mientras se sigue editando
  • Software multimedia: Reproducción mientras se carga contenido

Sincronización de Hilos

Problemas en Sistemas Multihilo

1. Condición de carrera (Race Condition)

Ocurre cuando múltiples hilos acceden a datos compartidos sin sincronización, y el resultado depende del orden de ejecución.

Ejemplo: Dos hilos incrementando un contador compartido sin protección.

2. Interbloqueo (Deadlock)

Situación donde hilos se bloquean mutuamente esperando recursos que están siendo retenidos por otros hilos.

Condiciones necesarias:

  1. Exclusión mutua
  2. Retención y espera
  3. No apropiación
  4. Espera circular

3. Hambre (Starvation)

Cuando un hilo no puede acceder a recursos porque otros hilos siempre tienen prioridad.

Mecanismos de Sincronización

1. Semáforos

  • Contador entero para controlar acceso a recursos
  • Operaciones básicas: wait() (P) y signal() (V)
  • Pueden ser binarios (0/1) o con conteo
  • Ejemplo: Controlar acceso a un pool de conexiones

2. Mutex (Exclusión Mutua)

  • Permite que solo un hilo acceda a una sección crítica
  • Operaciones: lock() y unlock()
  • Ejemplo: Proteger una estructura de datos compartida

3. Monitores

  • Abstracción de alto nivel que encapsula sincronización
  • Implementados en lenguajes como Java (synchronized)
  • Ejemplo: Buffer compartido con métodos sincronizados

Problema Clásico: Productor-Consumidor

Escenario donde un hilo productor genera datos y un hilo consumidor los procesa, compartiendo un buffer de tamaño limitado.

Requisitos de Sincronización:

  1. El productor no debe añadir datos si el buffer está lleno
  2. El consumidor no debe intentar leer si el buffer está vacío
  3. El acceso al buffer debe ser mutuamente excluyente

Solución típica:

  • Un semáforo para espacios vacíos
  • Un semáforo para espacios ocupados
  • Un mutex para acceso exclusivo al buffer

Glosario

Términos de Procesos

  • PCB: Bloque de Control de Proceso, estructura que contiene toda la información de un proceso
  • Planificación: Mecanismo para decidir qué proceso ejecuta la CPU
  • Quantum: Tiempo máximo que un proceso ejecuta en Round Robin

Términos de Hilos

  • Thread: Unidad mínima de ejecución dentro de un proceso
  • Sección crítica: Parte de código que accede a recursos compartidos
  • Concurrencia: Ejecución aparentemente simultánea de tareas

Términos de Sincronización

  • Deadlock: Bloqueo mutuo entre hilos/recursos
  • Starvation: Inanición de un hilo por falta de acceso a recursos
  • Monitor: Abstracción de sincronización en lenguajes de alto nivel