es una secuencia de tareas
encadenadas muy pequeña que
puede ser ejecutada por un
sistema operativo.
Multithreading
es un modelo generalizado de
programación y ejecución que permite que
existan múltiples subprocesos dentro del
contexto de un proceso. Estos subprocesos
comparten los recursos del proceso, pero
pueden ejecutarse de forma independiente.
Estados de un Hilo
Durante el ciclo de vida de un hilo, éste se puede encontrar en
diferentes estados. La figura siguiente muestra estos estados y los
métodos que provocan el paso de un estado a otro. Este diagrama
no es una máquina de estados finita, pero es lo que más se
aproxima al funcionamiento real de un hilo.
Listo: el hilo puede ser elegido para su ejecución.
Standby: el hilo ha sido elegido para ser el
siguiente en ejecutarse en el procesador.
Ejecución: el hilo está siendo ejecutado.
Espera: un hilo pasa a este estado cuando se
bloquea por un suceso
(E/S): se realiza una espera voluntaria de
sincronización o alguien suspende al hilo.
Transición: después de una espera el hilo pasa a
este estado si está listo para ejecutar pero alguno
de sus recursos no está disponible aún.
Terminado: un hilo llega a este estado cuando
termina normalmente cuando su proceso padre
ha terminado.
Hay dos grandes categorías en
la implementación de hilos:
Hilos a nivel de usuario (ULT)
En una aplicación ULT pura, todo el trabajo de gestión de hilos lo
realiza la aplicación, y el núcleo o kernel no es consciente de la
existencia de hilos. Es posible programar una aplicación como
multihilo mediante una biblioteca de hilos. La misma contiene el
código para crear y destruir hilos, intercambiar mensajes y datos
entre hilos, para planificar la ejecución de hilos y para salvar y
restaurar el contexto de los hilos.
Ventajas de los ULT
El intercambio de los hilos no
necesita los privilegios del modo
kernel, porque todas las
estructuras de datos están en el
espacio de direcciones de usuario
de un mismo proceso. Por lo tanto,
el proceso no debe cambiar a
modo kernel para gestionar hilos.
Se evita la sobrecarga de cambio
de modo y con esto el sobrecoste u
overhead.
Se puede realizar una planificación
específica. Dependiendo de que
aplicación sea, se puede decidir por
una u otra planificación según sus
ventajas.
Los ULT pueden ejecutar en
cualquier sistema operativo. La
biblioteca de hilos es un conjunto
compartido.
Desventajas de los ULT
En la mayoría de los sistemas operativos las
llamadas al sistema (System calls) son
bloqueantes. Cuando un hilo realiza una
llamada al sistema, se bloquea el mismo y
también el resto de los hilos del proceso.
En una estrategia ULT pura, una aplicación
multihilo no puede aprovechar las ventajas de
los multiprocesadores. El núcleo asigna un
solo proceso a un solo procesador, ya que
como el núcleo no interviene, ve al conjunto
de hilos como un solo proceso.
Hilos a nivel de núcleo (KLT)
En una aplicación KLT pura, todo el trabajo de gestión de hilos lo realiza el kernel. En el
área de la aplicación no hay código de gestión de hilos, únicamente un API (interfaz de
programas de aplicación) para la gestión de hilos en el núcleo. Windows 2000, Linux y OS/2
utilizan este método. Linux utiliza un método muy particular en el que no hace diferencia
entre procesos e hilos. Para Linux, si varios procesos creados con la llamada al sistema
"clone" comparten el mismo espacio de direcciones virtuales, el sistema operativo los trata
como hilos, y lógicamente son manejados por el kernel.
Ventajas de los KLT
El kernel puede planificar
simultáneamente múltiples hilos del
mismo proceso en múltiples procesadores.
Si se bloquea un hilo, puede planificar otro
del mismo proceso.
Las propias funciones del kernel pueden ser
multihilo.
Desventajas de los KLT
El paso de control de un hilo a otro precisa de un cambio de modo.
Combinaciones ULT y KLT
Algunas distribuciones de linux y derivados de UNIX ofrecen la
combinación de ULT y KLT, como Solaris, Ubuntu y Fedora. La
creación de hilos, así como la mayor parte de la planificación y
sincronización de los hilos de una aplicación se realiza por completo
en el espacio de usuario. Los múltiples ULT de una sola aplicación se
asocian con varios KLT. El programador puede ajustar el número de
KLT para cada aplicación y máquina para obtener el mejor resultado
global. En un método combinado , los múltiples hilos de una
aplicación se pueden ejecutar en paralelo en múltiples
procesadores y las llamadas al sistema bloqueadoras no necesitan
bloquear todo el proceso.