Está en la página 1de 6

Hilos

En el captulo anterior, se supona que un proceso consista nicamente en un hilo.


Ahora, la mayora de los sistemas operativos proporcionan caractersticas que permiten que
un proceso tenga mltiples hilos de control. En este captulo veremos que es un hilo, sus
ventajas, y los diferentes modelos de implementacin.
Qu es un hilo?
Un hilo es una unidad bsica de utilizacin de CPU, la cual contiene un id de hilo, su propio
program counter, un conjunto de registros, y una pila; que se representa a nivel del sistema
operativo con una estructura llamada TCB (thread control block).
Los hilos comparten con otros hilos que pertenecen al mismo proceso la seccin de cdigo,
la seccin de datos, entre otras cosas. Si un proceso tiene mltiples hilos, puede realizar ms
de una tarea a la vez (esto es real cuando se posee ms de un CPU).
Veamos un ejemplo para clarificar el concepto:
Un servidor web acepta solicitudes de los clientes que piden pginas web. Si este servidor
tiene varios clientes y funcionara con un solo hilo de ejecucin, solo podra dar servicio a un
cliente por vez, y el tiempo que podra esperar un cliente para ser atendido podra ser muy
grande.
Una posible solucin sera que el servidor funcione de tal manera que acepte una solicitud
por vez, y que cuando reciba otra solicitud, cree otro proceso para dar servicio a la nueva
solicitud. Pero crear un proceso lleva tiempo y utiliza muchos recursos, entonces, si cada
proceso realizar las mismas tareas Por qu no utilizar hilos?
Generalmente es ms eficiente usar un proceso que utilice mltiples hilos (un hilo para
escuchar las solicitudes, y cuando llega una solicitud, el lugar de crear otro proceso, se crea
otro hilo para procesar la solicitud)
Ventajas de usar hilos
Respuesta: el tiempo de respuesta mejora, ya que el programa puede continuar
ejecutndose, aunque parte de l est bloqueado.
Compartir recursos: los hilos comparten la memoria y los recursos del proceso al que
pertenecen, por lo que se puede tener varios hilos de ejecucin dentro del mismo espacio de
direcciones.
Economa: Es ms fcil la creacin, cambio de contexto y gestin de hilos que de procesos.
Utilizacin mltiples CPUs: permite que hilos de un mismo proceso ejecuten en diferentes
CPUs a la vez. En un proceso mono-hilo, un proceso ejecuta en una nica CPU,
independientemente de cuantas tenga disponibles.
Hilos a nivel de usuario y de kernel
Hasta ahora hemos hablado de los hilos en sentido genrico, pero a nivel prctico los hilos
pueden ser implementados a nivel de usuario o a nivel de kernel.

Hilos a nivel e usuario: son implementados en alguna librera. Estos hilos se gestionan sin
soporte del SO, el cual solo reconoce un hilo de ejecucin.
Hilos a nivel de kernel:
El SO es quien crea, planifica y gestiona los hilos. Se reconocen tantos hilos como se hayan
creado.
Los hilos a nivel de usuario tienen como beneficio que su cambio de contexto es ms sencillo
que el cambio de contexto entre hilos de kernel. A dems, se pueden implementar an si el
SO no utiliza hilos a nivel de kernel. Otro de los beneficios consiste en poder planificar
diferente a la estrategia del SO.
Los hilos a nivel de kernel tienen como gran beneficio poder aprovechar mejor las
arquitecturas multiprocesadores, y que proporcionan un mejor tiempo de respuesta, ya que si
un hilo se bloquea, los otros pueden seguir ejecutando.
Cmo se relacionan los hilos a nivel de kernel y los de usuario?
Existen 3 formas para establecer la relacin
Modelo Mx1 (Many to one)
El modelo asigna mltiples hilos de usuario a un hilo del kernel.
Este caso se corresponde a los hilos implementados a nivel de usuario, ya que el sistema
solo reconoce un hilo de control para el proceso.
Tiene como inconveniente que si un hilo se bloquea, todo el proceso se bloquea.
Tambin, dado que solo un hilo puede acceder al kernel cada vez, no podrn ejecutarse
varios hilos en paralelo en mltiples CPUs.

Modelo 1x1 (one to one)


El modelo asigna cada hilo de usuario a un hilo del kernel. Proporciona una mayor
concurrencia que el modelo anterior, permitiendo que se ejecute otro hilo si uno se bloque.
Tiene como inconveniente que cada vez que se crea un hilo a nivel de usuario, se crea un
hilo a nivel del kernel, y la cantidad de hilos a nivel del kernel estn restringidos en la mayora
de los sistemas.

Modelo MxN (many to many)


El modelo multiplexa muchos hilos de usuario sobre un nmero menor o igual de hilos del
kernel. Cada proceso tiene asignado un conjunto de hilos de kernel, independientemente de
la cantidad de hilos de usuario que haya creado.
No posee ninguno de los inconvenientes de los dos modelos anteriores, ya que saca lo mejor
de cada uno. El usuario puede crear tantos hilos como necesite y los hilos de kernel pueden
ejecutar en paralelo. Asimismo, cuando un hilo se bloquea, el kernel\ puede planificar otro
hilo para su ejecucin.
Entonces, el planificador a nivel de usuario asigna los hilos de usuario a los hilos de kernel, y
el planificador a nivel de kernel asigna los hilos de kernel a los procesadores

Los hilos son un concepto relativamente nuevo de los SO. En este contexto, un proceso
recibe el nombre de proceso pesado, mientras que un hilo recibe el nombre de proceso
ligero.
El trmino hilo se refiere sintctica y semnticamente a hilos de ejecucin.
El trmino multihilo hace referencia a la capacidad de un SO para mantener varios hilos de
ejecucin dentro del mismo proceso.

En un SO con procesos monohilo (un solo hilo de ejecucin por proceso), en el que no existe
el concepto de hilo, la representacin de un proceso incluye su PCB, un espacio de
direcciones del proceso, una pila de proceso y una pila ncleo.

En un SO con procesos multihilo, slo hay un PCB y un espacio de direcciones asociados al


proceso, sin embargo, ahora hay pilas separadas para cada hilo y bloques de control para
cada hilo

Estructura de los Hilos


Un hilo (proceso ligero) es una unidad bsica de utilizacin de la CPU, y consiste en un
contador de programa, un juego de registros y un espacio de pila.
Los hilos dentro de una misma aplicacin comparten:
La seccin de cdigo.
La seccin de datos.
Los recursos del SO (archivos abiertos y seales).

Un proceso tradicional o pesado es igual a una tarea con un solo hilo.


Los hilos permiten la ejecucin concurrente de varias secuencias de instrucciones asociadas
a diferentes funciones dentro de un mismo proceso, compartiendo un mismo espacio de
direcciones y las mismas estructuras de datos del ncleo.
Estados de un Hilo
Los principales estados de un hilo son: ejecucin, preparado y bloqueado; y hay cuatro
operaciones bsicas relacionadas con el cambio de estado de los hilos:
Creacin: En general, cuando se crea un nuevo proceso se crea tambin un hilo para ese
proceso. Posteriormente, ese hilo puede crear nuevos hilos dndoles un puntero de
instruccin y algunos argumentos. Ese hilo se colocar en la cola de preparados.
Bloqueo: Cuando un hilo debe esperar por un suceso, se le bloquea guardando sus
registros. As el procesador pasar a ejecutar otro hilo preparado.
Desbloqueo: Cuando se produce el suceso por el que un hilo se bloque pasa a la cola de
listos.
Terminacin: Cuando un hilo finaliza, se liberan su contexto y sus pilas.
Un punto importante es la posibilidad de que el bloqueo de un hilo lleve al bloqueo de todo el
proceso. Es decir, que el bloqueo de un hilo lleve al bloqueo de todos los hilos que lo
componen, an cuando el proceso est preparado.
Recursos compartidos y no compartidos
Los hilos permiten la ejecucin concurrente de varias secuencias de instrucciones asociadas
a diferentes funciones dentro de un mismo proceso, compartiendo un mismo espacio de
direcciones y las mismas estructuras de datos del ncleo.
Recursos compartidos entre los hilos:
Cdigo (instrucciones).
Variables globales.
Ficheros y dispositivos abiertos.
Recursos no compartidos entre los hilos:
Contador del programa (cada hilo puede ejecutar una seccin distinta de cdigo).
Registros de CPU.
Pila para las variables locales de los procedimientos a las que se invoca despus de crear un
hilo.
Estado: distintos hilos pueden estar en ejecucin, listos o bloqueados esperando un evento.
PROCESOS v/s HILOS
Semejanzas: Los hilos operan, en muchos sentidos, igual que los procesos.
Pueden estar en uno o varios estados: listo, bloqueado, en ejecucin o terminado.
Tambin comparten la CPU.
Slo hay un hilo activo (en ejecucin) en un instante dado.
Un hilo dentro de un proceso se ejecuta secuencialmente.

Cada hilo tiene su propia pila y contador de programa.


Pueden crear sus propios hilos hijos.
Diferencias: Los hilos, a diferencia de los procesos, no son independientes entre s.
Como todos los hilos pueden acceder a todas las direcciones de la tarea, un hilo puede leer
la pila de cualquier otro hilo o escribir sobre ella. Aunque pueda parecer lo contrario la
proteccin no es necesaria ya que el diseo de una tarea con mltiples hilos tiene que ser un
usuario nico.
Ventajas: de los hilos sobre los procesos.
Se tarda mucho menos tiempo en crear un nuevo hilo en un proceso existente que en crear
un nuevo proceso.
Se tarda mucho menos tiempo en terminar un hilo que un proceso.
Se tarda mucho menos tiempo en conmutar entre hilos de un mismo proceso que entre
procesos.
Los hilos hacen ms rpida la comunicacin entre procesos, ya que al compartir memoria y
recursos, se pueden comunicar entre s sin invocar el ncleo del SO.
Ejemplos de uso de los hilos:
Trabajo interactivo y en segundo plano: En un programa de hoja de clculo, un hilo podra
estar leyendo la entrada del usuario y otro podra estar ejecutando las rdenes y
actualizando la informacin.
Procesamiento asncrono: Se podra implementar, con el fin de protegerse de cortes de
energa, un hilo que se encargar de salvaguardar el buffer de un procesador de textos una
vez por minuto.
Estructuracin modular de los programas: Los programas que realizan una variedad de
actividades se pueden disear e implementar mediante hilos.