Hilos en Sistemas Operativos
¿Qué es un hilo (thread)?
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 de otras secuencias.
• Diferencia entre proceso e hilo:
- Proceso: Conjunto de instrucciones con su propio espacio de memoria y recursos del sistema. Es pesado en términos de recursos.
- Hilo: Parte de un proceso. Comparte el espacio de direcciones del proceso padre y sus recursos, lo que permite una comunicación más rápida pero requiere sincronización.
• Ventajas del uso de hilos:
- Menor sobrecarga: Los hilos comparten memoria, lo que reduce el uso de recursos.
- Mayor rendimiento en sistemas multiprocesador.
- Comunicación rápida entre hilos.
- Responsividad: Mejora la capacidad de respuesta de aplicaciones (por ejemplo, interfaces gráficas).
• Modelos de hilos:
- Modelo a nivel de usuario: Todos los hilos se gestionan en espacio de usuario, sin intervención directa del sistema operativo. Más eficientes, pero no aprovechan los núcleos múltiples.
- Modelo a nivel de kernel: El sistema operativo gestiona directamente los hilos. Permite paralelismo real, pero con más sobrecarga.
- Modelo híbrido: Combina ambos. Usa múltiples hilos a nivel de usuario que se asignan a múltiples hilos a nivel de kernel. Equilibra eficiencia y rendimiento.
• Aplicaciones de hilos:
- Navegadores web (un hilo para cada pestaña).
- Servidores web (manejo de múltiples peticiones simultáneas).
- Juegos (IA, gráficos y sonido en hilos separados).
- IDEs y software multimedia.
Sincronización y Evaluación
• Sincronización de hilos:
Es el proceso que asegura que los hilos que comparten recursos lo hagan sin conflictos, garantizando consistencia.
• Problemas comunes en sistemas multihilo:
- Condición de carrera: Ocurre cuando dos o más hilos acceden a una sección crítica al mismo tiempo y el resultado depende del orden de ejecución.
- Interbloqueo (deadlock): Situación en la que dos o más hilos esperan indefinidamente recursos que están siendo ocupados por otros hilos.
- Hambre (starvation): Algunos hilos nunca acceden a recursos debido a la constante prioridad de otros hilos.
• Mecanismos de sincronización:
- Semáforo (Semaphore): Contador entero que se utiliza para controlar el acceso a recursos compartidos. Puede ser binario (0/1) o con conteo.
- Mutex (Mutual Exclusion): Variable o estructura usada para permitir el acceso exclusivo a una sección crítica.
- Monitores: Abstracción de alto nivel que permite manejar sincronización y exclusión mutua de manera automática dentro de lenguajes como Java.
• Ejemplo: problema del productor-consumidor
- Productor: Genera datos y los pone en un buffer.
- Consumidor: Toma datos del buffer.
- Se requiere sincronización para evitar que el productor llene el buffer cuando está lleno o que el consumidor lo lea cuando está vacío.
Glosario
- Hilo (Thread): Secuencia de ejecución dentro de un proceso.
- Proceso: Programa en ejecución con su propio espacio de memoria.
- Concurrencia: Capacidad de ejecutar múltiples tareas de forma lógica simultánea.
- Paralelismo: Ejecución simultánea real de múltiples tareas en múltiples núcleos.
- Modelo a nivel de usuario: Gestión de hilos desde el espacio de usuario sin intervención del kernel.
- Modelo a nivel de kernel: Gestión directa de hilos por parte del sistema operativo.
- Modelo híbrido: Combina la gestión de hilos en usuario y kernel.
- Responsividad: Capacidad de una aplicación de responder rápidamente al usuario.
- Multitarea: Ejecución de varias tareas al mismo tiempo por el sistema operativo.
- Contexto (de ejecución): Información necesaria para gestionar un hilo o proceso, como registros y punteros.
- Sincronización: Coordinación de la ejecución de hilos para evitar conflictos de acceso a recursos.
- Condición de carrera: Error que ocurre cuando dos hilos acceden simultáneamente a una sección crítica sin sincronización.
- Sección crítica: Fragmento de código donde se accede a recursos compartidos.
- Interbloqueo (Deadlock): Estado en el que varios hilos se bloquean esperando recursos entre ellos.
- Hambre (Starvation): Situación donde un hilo no accede nunca a un recurso porque otros siempre lo hacen primero.
- Semáforo: Contador para controlar acceso concurrente a recursos.
- Mutex: Herramienta de exclusión mutua que solo permite que un hilo acceda a la vez a una sección crítica.
- Monitor: Abstracción de sincronización que encapsula variables y procedimientos sincronizados.
- Productor-Consumidor: Problema clásico de sincronización que requiere control de acceso a un buffer compartido.