Hilos En el capítulo anterior, se suponía que un proceso consistía únicamente en un hilo. Ahora, la mayoría de de los sistemas sistemas operativos operativos proporcio proporcionan nan característic características as que permiten permiten que que un proceso tenga múltiples hilos de control. En este capítulo veremos que es un hilo, sus ventajas, y los diferentes modelos de implementación. ¿Qué es un hilo?
Un hilo es una unidad bsica de utili!ación de "#U, 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 %"& 'thread control bloc(). *os hilos comparten con otros hilos que pertenecen al mismo proceso la sección de código, la sección de datos, entre otras cosas. +i un proceso tiene múltiples hilos, puede reali!ar ms de una tarea a la ve! 'esto es real cuando se posee ms de un "#U). eamos un ejemplo para clarificar el conceptoUn servidor eb acepta solicitudes de los clientes que piden pginas eb. +i este servidor tiene varios clientes y funcionara con un solo hilo de ejecución, solo podría dar servicio a un cliente por ve!, y el tiempo que podría esperar un cliente para ser atendido podría ser muy grande. Una posible solución sería que el servidor funcione de tal manera que acepte una solicitud por ve!, y que cuando reciba otra solicitud, cree otro proceso para dar servicio a la nueva solicitud. #ero crear un proceso lleva tiempo y utili!a muchos recursos, entonces, si cada proceso reali!ar las mismas tareas /#or qu0 no utili!ar hilos1 2eneralmente es ms eficiente usar un proceso que utilice múltiples 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 3 4espuesta- el tiempo de respuesta mejora, ya que el programa puede continuar ejecutndose, aunque parte de 0l est0 bloqueado. 3 "ompartir recursos- los hilos comparten la memoria y los recursos del proceso al que pertenecen, por lo que se puede tener varios hilos de ejecución dentro del mismo espacio de direcciones. 3 Economía- Es ms fcil la creación, cambio de conte5to y gestión de hilos que de procesos. 3 Utili!ación múltiples "#Us- permite que hilos de un mismo proceso ejecuten en diferentes "#Us a la ve!. En un proceso mono6hilo, un proceso ejecuta en una única "#U, independientemente de cuantas tenga disponibles. Hilos a nivel de usuario y de kernel 7asta ahora hemos hablado de los hilos en sentido gen0rico, pero a nivel prctico los hilos pueden ser implementados a nivel de usuario o a nivel de (ernel.
Hilos a nivel e usuario: son implementados en alguna librería. Estos hilos se gestionan sin soporte del +8, el cual solo reconoce un hilo de ejecución. Hilos a nivel de kernel: El +8 es quien crea, planifica y gestiona los hilos. +e reconocen tantos hilos como se hayan creado. *os hilos a nivel de usuario tienen como beneficio que su cambio de conte5to es ms sencillo que el cambio de conte5to entre hilos de (ernel. A dems, se pueden implementar aún si el +8 no utili!a hilos a nivel de (ernel. 8tro de los beneficios consiste en poder planificar diferente a la estrategia del +8. *os hilos a nivel de (ernel 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. ¿Cómo se relacionan los hilos a nivel de kernel y los de usuario? E5isten 9 formas para establecer la relación
3 :odelo :5; ':any to one) El modelo asigna múltiples hilos de usuario a un hilo del (ernel. 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. %iene como inconveniente que si un hilo se bloquea, todo el proceso se bloquea. %ambi0n, dado que solo un hilo puede acceder al (ernel cada ve!, no podrn ejecutarse varios hilos en paralelo en múltiples "#Us.
3 :odelo ;5; 'one to one) El modelo asigna cada hilo de usuario a un hilo del (ernel. #roporciona una mayor concurrencia que el modelo anterior, permitiendo que se ejecute otro hilo si uno se bloqueó. %iene como inconveniente que cada ve! que se crea un hilo a nivel de usuario, se crea un hilo a nivel del (ernel, y la cantidad de hilos a nivel del (ernel estn restringidos en la mayoría de los sistemas.
3 :odelo :5< 'many to many) El modelo multiple5a muchos hilos de usuario sobre un número menor o igual de hilos del (ernel. "ada proceso tiene asignado un conjunto de hilos de (ernel, independientemente de la cantidad de hilos de usuario que haya creado.
*os hilos son un concepto relativamente nuevo de los +8. En este conte5to, un proceso recibe el nombre de proceso pesado, mientras que un hilo recibe el nombre de proceso ligero. El t0rmino hilo se refiere sintctica y semnticamente a hilos de ejecución. El t0rmino multihilo hace referencia a la capacidad de un +8 para mantener varios hilos de ejecución dentro del mismo proceso.
En un +8 con procesos monohilo 'un solo hilo de ejecución por proceso), en el que no e5iste el concepto de hilo, la representación de un proceso incluye su #"&, un espacio de direcciones del proceso, una pila de proceso y una pila núcleo.
En un +8 con procesos multihilo, sólo hay un #"& 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 utili!ación de la "#U, y consiste en un contador de programa, un juego de registros y un espacio de pila. Los hilos dentro de una misma aplicación comparten: *a sección de código. *a sección de datos. *os recursos del +8 'archivos abiertos y se>ales).
Un proceso tradicional o pesado es igual a una tarea con un solo hilo. *os hilos permiten la ejecución 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 núcleo.
Estados de un Hilo *os principales estados de un hilo son- ejecución, preparado y bloqueado$ y hay cuatro operaciones bsicas relacionadas con el cambio de estado de los hilosCreación: En general, cuando se crea un nuevo proceso se crea tambi0n un hilo para ese proceso. #osteriormente, ese hilo puede crear nuevos hilos dndoles un puntero de instrucción y algunos argumentos. Ese hilo se colocar en la cola de preparados. lo!ueo: "uando un hilo debe esperar por un suceso, se le bloquea guardando sus registros. Así el procesador pasar a ejecutar otro hilo preparado. ?esbloqueo- "uando se produce el suceso por el que un hilo se bloqueó pasa a la cola de listos. "erminación: "uando un hilo finali!a, se liberan su conte5to 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, aún cuando el proceso est preparado.
#ecursos compartidos y no compartidos *os hilos permiten la ejecución 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 núcleo. #ecursos compartidos entre los hilos: "ódigo 'instrucciones). ariables globales. @icheros y dispositivos abiertos. 4ecursos no compartidos entre los hilos"ontador del programa 'cada hilo puede ejecutar una sección distinta de código). 4egistros de "#U. #ila para las variables locales de los procedimientos a las que se invoca despu0s de crear un hilo. Estado- distintos hilos pueden estar en ejecución, listos o bloqueados esperando un evento.
$#%CE&%& v's H(L%& +emejan!as- *os hilos operan, en muchos sentidos, igual que los procesos. #ueden estar en uno o varios estados- listo, bloqueado, en ejecución o terminado. %ambi0n comparten la "#U. +ólo hay un hilo activo 'en ejecución) en un instante dado. Un hilo dentro de un proceso se ejecuta secuencialmente.
"ada hilo tiene su propia pila y contador de programa. #ueden crear sus propios hilos hijos. )i*erencias- *os hilos, a diferencia de los procesos, no son independientes entre sí. "omo 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 protección no es necesaria ya que el dise>o de una tarea con múltiples hilos tiene que ser un usuario único. Ventajas: de los hilos sobre los procesos. +e tarda mucho menos tiempo en crear un nuevo hilo en un proceso e5istente que en crear un nuevo proceso.
+e tarda mucho menos tiempo en terminar un hilo que un proceso. +e tarda mucho menos tiempo en conmutar entre hilos de un mismo proceso que entre procesos. *os hilos hacen ms rpida la comunicación entre procesos, ya que al compartir memoria y recursos, se pueden comunicar entre sí sin invocar el núcleo del +8. Ejemplos de uso de los hilos: "ra+ajo interactivo y en se,undo plano: En un programa de hoja de clculo, un hilo podría estar leyendo la entrada del usuario y otro podría estar ejecutando las órdenes y actuali!ando la información. $rocesamiento as-ncrono: +e podría implementar, con el fin de protegerse de cortes de energía, un hilo que se encargar de salvaguardar el buffer de un procesador de te5tos una ve! por minuto. Estructuración modular de los pro,ramas: *os programas que reali!an una variedad de actividades se pueden dise>ar e implementar mediante hilos.