es la secuencia más pequeña de instrucciones programadas que
puede ser administrada de forma independiente por un
planificador , que generalmente forma parte del sistema operativo
.
Diferencias entre hilos y procesos
Los hilos se distinguen de los tradicionales procesos en que los procesos son –generalmente–
independientes, llevan bastante información de estados, e interactúan solo a través de mecanismos
de comunicación dados por el sistema. Por otra parte, muchos hilos generalmente comparten otros
recursos de forma directa. En muchos de los sistemas operativos que dan facilidades a los hilos, es
más rápido cambiar de un hilo a otro dentro del mismo proceso, que cambiar de un proceso a otro.
Estados de un hilo
Los principales estados de los hilos son: Ejecución, Listo y Bloqueado. No
tiene sentido asociar estados de suspensión de hilos ya que es un
concepto de proceso. En todo caso, si un proceso está expulsado de la
memoria principal (RAM), todos sus hilos deberán estarlo ya que todos
comparten el espacio de direcciones del proceso.
Cambio de estados
Creación: Cuando se crea un proceso se crea un hilo para ese proceso. Luego,
este hilo puede crear otros hilos dentro del mismo proceso, proporcionando un
puntero de instrucción y los argumentos del nuevo hilo. El hilo tendrá su propio
contexto y su propio espacio de la columna, y pasará al final de los Listos.
Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea (salvando
sus registros de usuario, contador de programa y punteros de pila). Ahora el
procesador podrá pasar a ejecutar otro hilo que esté al principio de los Listos
mientras el anterior permanece bloqueado.
Desbloqueo: Cuando el suceso por el que el hilo se bloqueó se produce, el
mismo pasa a la final de los Listos.
Terminación: Cuando un hilo finaliza se liberan tanto su contexto como
sus columnas.
Formas de multihilos
Multihilo apropiativo: permite al sistema operativo determinar cuándo
debe haber un cambio de contexto. La desventaja de esto es que el sistema
puede hacer un cambio de contexto en un momento inadecuado, causando
un fenómeno conocido como inversión de prioridades y otros problemas.
Multihilo cooperativo: depende del mismo hilo abandonar el control
cuando llega a un punto de detención, lo cual puede traer problemas
cuando el hilo espera la disponibilidad de un recurso.
Implementaciones
Hay dos grandes categorías en la implementación de hilos:
Hilos a nivel de usuario.
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.
Hilos a nivel de kernel.
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.