RedNotes
Toggle sidebar
Iniciar sesión
Sistemas Operativos/Hilos
Inicia sesión para editar

Un hilo (thread) es un flujo de control dentro de un proceso. Varios hilos comparten el mismo espacio de direcciones, lo que los hace mucho más ligeros que los procesos ("procesos ligeros").

Ver también: Sistemas Operativos/Procesos.

¿Por qué usar hilos?

  1. Muchas aplicaciones realizan varias actividades a la vez; algunas se bloquean. Descomponerlas en hilos cuasi-paralelos simplifica el modelo de programación.
  2. Son más fáciles (rápidos) de crear y destruir que los procesos: 10–100 veces más.
  3. Permiten solapar cómputo y E/S.
  4. Aprovechan múltiples CPUs para paralelismo real.

Ejemplo de Tanenbaum: un procesador de textos con un hilo que interactúa con el usuario, otro que reformatea el documento y otro que guarda en disco periódicamente. O un servidor web con un hilo despachador y varios hilos trabajadores.

Qué se comparte y qué no

Elementos por proceso (compartidos) Elementos por hilo (privados)
Espacio de direcciones Contador de programa
Variables globales Registros
Archivos abiertos Pila
Procesos hijos Estado
Alarmas pendientes
Señales y manejadores

Cada hilo necesita su propia pila porque llama a procedimientos distintos y tiene su propio historial de ejecución.

Pthreads (POSIX)

Llamada Descripción
pthread_create Crea un hilo
pthread_exit Termina el hilo actual
pthread_join Espera a que un hilo termine
pthread_yield Cede la CPU a otro hilo
pthread_attr_init Inicializa atributos

Implementaciones

Hilos en espacio de usuario

Una biblioteca en espacio de usuario gestiona los hilos; el kernel sólo ve un proceso.

  • ✅ Cambio de hilo muy rápido (sin trap al kernel); planificación personalizable.
  • ❌ Una llamada bloqueante bloquea a todos los hilos; un fallo de página también; no hay apropiación por reloj dentro del proceso.

Hilos en el kernel

El Sistemas Operativos/Kernel conoce y planifica cada hilo.

Implementaciones híbridas

Se multiplexan m hilos de usuario sobre n hilos de kernel (modelo M:N). Las activaciones del planificador (scheduler activations) usan upcalls del kernel para avisar a la biblioteca cuando un hilo se bloquea.

Hilos emergentes (pop-up threads)

Se crea un hilo nuevo al llegar cada mensaje, en lugar de tener uno bloqueado esperándolo.

Problemas al convertir código a multihilo

  • Variables globales como errno que varios hilos sobrescriben → usar variables globales privadas por hilo.
  • Bibliotecas no reentrantes (p. ej. malloc).
  • Señales: ¿qué hilo las recibe?
  • Gestión de la pila de cada hilo.

Compartir memoria trae los problemas de Sistemas Operativos/Concurrencia.

#sistemas-operativos #tanenbaum #hilos