You are on page 1of 5

Sistemas Operativos I

Capítulo 3: Hilos.
Un hilo de ejecución, hebra, subproceso o thread (ingles), se puede ver como la unidad más
pequeña que puede ser planificada por un sistema operativo. Pero la forma más común de
conocer esa palabra es por la característica que permite a una operación realizar varias tareas
concurrentemente. Esto permite simplificar el diseño de aplicaciones porque permite realizar
varias labores simultáneamente.

Ahora a la forma de ejecución que permite está característica de poder tener varios hilos
ejecutados a la vez se le llama multihilo, ya que el programa puede dividirse en tareas más
sencillas. Siendo estos programas más especializados.
Su popularidad se vio incrementada al aparecer los sistemas operativos gráficos, ya que el
usuario percibía un mejor desempeño en sus programas, aunque la introducción de esta
programación no los hizo más rápidos, ya que ahora tenía un hilo dedicado para el servicio de
entrada o para la salida en pantalla.

Los hilos de ejecución que comparten los mismos recursos, son en conjunto conocidos como
un proceso, claro que contando también dichos recursos. Al estar los recursos compartidos por
varios hilos, hace que cualquiera de ellos pueda modificarlo. Cuando un recurso de memoria es
modificado los otros hilos acceden al dato modificado inmediatamente.

Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la
CPU (incluyendo el valor de los registros).
El proceso sigue en ejecución mientras que uno de los hilos sigue activo, y si todos los hilos se
terminan el proceso se termina también, y de la misma manera si el proceso es terminado
todos los hilos que lo conforman son terminados.
Hay algunos lenguajes de programación que tienen ya características expresamente creadas
para trabajar con hilos, como por ejemplo java, aunque la mayoría de ellos requieren
bibliotecas especiales que dependen del Sistema Operativo para poder crearlos, como por
ejemplo C y C++.
Un ejemplo de la utilización de multihilos es tener un hilo encargado de la interfaz gráfica y otro
que se encargue de una operación larga, si no se usara multihilos en este caso la interfaz
gráfica no respondería de manera rápida hasta que se terminara con la operación.

1 Facilitador: Israel Deago

como ya se mencionó. En el caso de los hilos como están en el mismo proceso este overhead es casi despreciable. Por lo general se refiere a esta habilidad como paralelismo. minimizando el tiempo libre que este tiene. bajo el nombre de HyperThreading. El soporte de hardware para multihilo fue introducido por Intel Pentium 4. Multitarea basada en procesos y multitareas basada en hilos. pero tiene la desventaja de que si lo hace en un momento inadecuado. Y este tipo de multitarea genera una menor sobrecarga que la basada en procesos. Esto es debido que al cambiar de un proceso al otro el sistema operativo genera lo conocido como overhead. causa el fenómeno de inversión de prioridades y otros problemas. llevan bastante información de estados e interactúan solo a través de mecanismos dados por el sistema. En el caso de la multitareas basadas en hilos la unidad de código más pequeña es el hilo.  Multihilo cooperativo: Es el hilo el que decide cuando abandonar el control al llegar a un punto de detención. mientras que muchos hilos comparten recursos directamente. los hilos. Además la concurrencia permite. OS/2 y Linux (2. que de un proceso a otro. en este caso pasar del estado de Running al estado de Waiting o Bloqueado y colocar el nuevo proceso en Running. Sistemas operativos como Windows NT. Diferencias entre hilos y procesos Los procesos normalmente son independientes. los sistema operativos que proveen facilidades para los hilos. Esto es debido a que los procesos requieren un mayor uso del CPU. al ser independientes. pero la programación multihilo es más que esto. Formas de Multihilos: Generalmente los Sistemas Operativos implementan hilos de dos maneras:  Multihilo apropiativo: El sistema operativo puede decidir cuándo hacer un cambio de contexto. por lo que puede traer problemas si este espera la liberación o disponibilidad a un recurso. siendo el programa.5 o superiores) dicen tener hilos ‘baratos’ y procesos ‘costosos’. por lo que hay que considerar los aspectos de sincronizar los datos. en este caso. para diseñar programas más sencillos.Paralelismo Una de los puntos que están en el término concurrencia es la habilidad de realizar varias tareas al mismo tiempo. es más rápido pasar de un hilo a otro dentro del mismo proceso. y la comunicación entre ellos es limitada. mientras que otros sistemas operativos no existe una gran 2 Facilitador: Israel Deago . la unidad de código más pequeña. La multitarea basada en procesos es quizás la forma con la que estamos familiarizados como ya pudimos observar en capítulos anteriores. Al compartir. ella se refiere también al uso de ciertas características de esta programación. Al usar la programación multihilos los programas son más eficientes que hacen un mejor uso del procesador. datos y espacios de direcciones y los procesos no hacerlo. que es el tiempo desperdiciado por el procesador para realizar un cambio de modo (mode switch). acceder a datos de manera simultánea desde dos o más hilo. esta multitarea es la capacidad de ejecutar dos o más programa a la vez.

luego. generalmente los procesos tiene una tarea específica y determinada. Para aumentar el la eficiencia. o Se pueden ejecutar en cualquier sistema operativo ya que la biblioteca de hilos es un recurso compartido. Las operaciones descritas se llevan el espacio de usuario de un mismo proceso. etc. Si un proceso esta expulsado de la memoria RAM todos los hilos que lo conforman deberán estarlo. y al no tener que cambiar al modo kernel al hacer el intercambio se evita el sobrecoste u overhead. y el procesador pasa a otro procesos que este en la cola de listos. Estados de un hilo Los principales estados de los hilos son: Ejecución. este hilo crear más hilos dentro del proceso. este se bloquea y guarda sus registros. que contiene el código para crear y destruir hilos. 3 Facilitador: Israel Deago . En este caso no se toma en cuenta el estado de suspensión ya que es un concepto de procesos.). bloqueado. pudiendo. en el uso del procesador. Listo y Bloqueado.diferencia. ni siquiera sabe que existe. teniendo ellos su propio contexto y su propio espacio de pila.  Terminación: Al finalizar el hilo.  Bloqueo: Cuando un hilo va a esperar por un suceso. ya que todos comparten el espacio de direcciones del proceso. En las aplicaciones ULT el trabajo de gestión de hilos lo realiza la aplicación y el kernel o núcleo no tienen nada que ver con esto. intercambiar mensajes y datos entre hilos. Cambios de Estados  Creación: Al crear un proceso se crea un hilo para dicho proceso. Hilos a nivel de usuario y de núcleo Hilos a nivel de usuario: También conocido por sus siglas en ingles ULT que viene de User Level Thread. mientras que el anterior permanece bloqueado. Es posible la creación de dicha aplicación. Funcionalidad de los Hilos Al igual que los procesos los hilos tienen un estado de ejecución y se pueden sincronizar entre ellos por los problemas de compartimiento de recursos.  Desbloqueo: Una vez que el suceso que estaba esperando el hilo se cumple pasa a la cola de listos. Debido a este el kernel lo ve como una unidad y le asigna un único estado (listo. a través de una biblioteca de hilos. o Se puede decidir que planificación se le va a dar a la programación. Ventajas: o El intercambio ente los hilos de un mismo proceso no necesita privilegios del modo kernel. su contexto y sus pilas se liberan. y pasara a la cola de listas. para planificar la ejecución de hilos y para salvar y restaurar el contexto de los hilos.

Combinaciones ULT y KLT: Hay sistemas operativos como Solaris que utilizan una combinación de ULT y de KLT. periféricos de entrada y salida. El problema que presenta esta arquitectura es que el tiempo para repartir el trabajo entre los procesadores puede ser mucho. No hay un código de gestión de hilos. Linux y OS/2 utilizan este método. en caso de que se hayan agregado muchos procesadores. Una solución al bloqueo mediante llamadas del sistema es el uso de la técnica de jacketing. Esta arquitectura también es llamada UMA.  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.Desventajas: o Al ser las llamadas al sistema. Multiproceso Simétrico Arquitectura SMP (Symmetrical Multiprocessing. Al ser de uso común debe ser monitoreado para evitar que haya problemas con su acceso al intentar usarlo varios procesadores. Y los múltiples ULT de una sola aplicación se asocian con varios KLT. que convierte una llamada bloqueante en no bloqueante. todos los procesadores son iguales y pueden ejecutar tareas indistintamente. al hacer esto el hilo se bloquea y bloque también a los otros hilos dentro de ese proceso. El número de KLT para cada aplicación puede ser modificado por el programador. De la misma manera se reparten recursos como memoria RAM. ya que el núcleo asigna un solo proceso a un procesador.  Si se bloquea un hilo. almacenamiento secundario. Ventajas de los KLT  El kernel puede planificar simultáneamente múltiples hilos del mismo proceso en múltiples procesadores. para obtener el mejor resultado global. puede planificar otro del mismo proceso. bloqueantes. 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. En el caso de la SMP esta consiste en dos procesadores unidos a un bus común a través del cual se reparten el trabajo entre ellos. una aplicación no aprovecha el uso de los multiprocesadores. Hilos y SMP en Linux 4 Facilitador: Israel Deago . Linux utiliza un método muy particular en que no hace diferencia entre procesos e hilos. en la mayoría de los Sistemas Operativos. o En el ULT puro. Para ello en el espacio de usuario se realiza la mayor parte de la planificación y sincronización de los hilos. multiproceso simétrico): Los supercomputadores se han desarrollado siguiendo principalmente dos arquitecturas la MMP o la SMP. Para esta arquitectura no se usa jerarquía. solo un API para la gestión de hilos en el núcleo. Hilos a nivel de núcleo (KLT): En el KLT todo el trabajo de gestión lo realiza el kernel.

6 el poder del SMP fue revelado. Durante el uso del kernel de Linux 2. lentamente hasta la llegada del kernel 2. Cada una de las colas de ejecución soporta 140 prioridades.0 el SMP se consideraba un “gran bloqueo”. En esta versión se le agrego un mejor planificador para mejor el soporte de SMP. El sistema mantiene 2 colas de ejecución para el procesador. siendo las mayores de 100 utilizadas para tareas en tiempo real y las menores de 40 son para tareas de usuario. uno es la cola de los que han expirado y la otra es la de los que están activos. Para esto se debe habilitar la función CONFIG_SMP durante la configuración del kernel.En Linux para poder trabajar SMP se debe configurar primero el kernel. 5 Facilitador: Israel Deago .