← Volver al temario

🧵 Capítulo 4: Hilos

💡 El Concepto de Hilo

  • Hilo (*Thread* o Proceso Ligero - LWP): Es la unidad básica de utilización de CPU. Proporciona una forma de dividir un proceso en múltiples flujos de control que pueden ejecutarse concurrentemente. La creación y el cambio de contexto entre hilos son mucho más rápidos que entre procesos completos.
  • Diferencia clave con un Proceso: El elemento fundamental que distingue a los hilos es que comparten el espacio de direcciones de memoria completo de su proceso padre (código, datos, *heap*).

🤝 Recursos Compartidos y Propios

Comparten (Recursos del Proceso) No Comparten (Recursos Propios del Hilo) Implicación
Código (sección de texto) Identificador Único (TID) Permite que todos los hilos ejecuten las mismas funciones del programa.
Datos (variables globales y estáticas) Contador de Programa (PC) Permite que cada hilo esté ejecutando una instrucción diferente.
Montículo (Heap) Conjunto de Registros de CPU El *context switch* entre hilos solo guarda y restaura los registros y el PC.
Recursos del SO (ficheros abiertos, señales) Pila (Stack) La pila privada permite a cada hilo gestionar sus propias llamadas a funciones y variables locales sin interferir con otros hilos.

🧠 Modelos de Mapeo de Hilos

Estos modelos definen la relación entre los hilos manejados por la biblioteca de usuario y los hilos que el núcleo puede planificar (LWP).

Modelo Descripción Consecuencia / Ejemplos
Muchos a Uno (M:1) Toda la gestión de hilos se realiza a nivel de usuario (por una biblioteca de hilos), y todos los hilos de usuario se mapean a un único hilo de núcleo (LWP). El núcleo no tiene conciencia de los hilos individuales. Si un hilo de usuario realiza una llamada al sistema que lo bloquea (ej. E/S), todo el proceso se bloquea, impidiendo el paralelismo real en sistemas *multicore*.
Uno a Uno (1:1) Cada hilo de usuario se mapea a un hilo de núcleo (LWP) dedicado. Esto permite que el planificador del núcleo pueda ejecutar hilos de un mismo proceso en paralelo en diferentes núcleos de CPU. Ofrece un paralelismo real y escalabilidad en sistemas *multicore*. Sin embargo, la sobrecarga de la creación de hilos es mayor, ya que involucra al núcleo en cada operación. Es el modelo más común en SO modernos (Linux, Windows).
Muchos a Muchos (M:N) Los hilos de usuario se mapean a un número menor o igual de hilos de núcleo (LWPs). Esta solución híbrida permite que el desarrollador pueda crear tantos hilos de usuario como desee, mientras que el SO limita el número de hilos de núcleo para optimizar el rendimiento. Combina la baja sobrecarga del modelo M:1 (para el cambio de contexto de hilos de usuario) con la capacidad de paralelismo del 1:1.