You are on page 1of 5

Sistemas Operativos I

Captulo 3: Hilos.
Un hilo de ejecucin, hebra, subproceso o thread (ingles), se puede ver como la unidad ms
pequea que puede ser planificada por un sistema operativo. Pero la forma ms comn de
conocer esa palabra es por la caracterstica que permite a una operacin realizar varias tareas
concurrentemente. Esto permite simplificar el diseo de aplicaciones porque permite realizar
varias labores simultneamente.

Ahora a la forma de ejecucin que permite est caracterstica de poder tener varios hilos
ejecutados a la vez se le llama multihilo, ya que el programa puede dividirse en tareas ms
sencillas. Siendo estos programas ms especializados.
Su popularidad se vio incrementada al aparecer los sistemas operativos grficos, ya que el
usuario perciba un mejor desempeo en sus programas, aunque la introduccin de esta
programacin no los hizo ms rpidos, ya que ahora tena un hilo dedicado para el servicio de
entrada o para la salida en pantalla.

Los hilos de ejecucin que comparten los mismos recursos, son en conjunto conocidos como
un proceso, claro que contando tambin 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 ejecucin y el estado de la


CPU (incluyendo el valor de los registros).
El proceso sigue en ejecucin mientras que uno de los hilos sigue activo, y si todos los hilos se
terminan el proceso se termina tambin, y de la misma manera si el proceso es terminado
todos los hilos que lo conforman son terminados.
Hay algunos lenguajes de programacin que tienen ya caractersticas expresamente creadas
para trabajar con hilos, como por ejemplo java, aunque la mayora de ellos requieren
bibliotecas especiales que dependen del Sistema Operativo para poder crearlos, como por
ejemplo C y C++.
Un ejemplo de la utilizacin de multihilos es tener un hilo encargado de la interfaz grfica y otro
que se encargue de una operacin larga, si no se usara multihilos en este caso la interfaz
grfica no respondera de manera rpida hasta que se terminara con la operacin.

1 Facilitador: Israel Deago


Paralelismo
Una de los puntos que estn en el trmino concurrencia es la habilidad de realizar varias tareas
al mismo tiempo. Por lo general se refiere a esta habilidad como paralelismo, pero la
programacin multihilo es ms que esto, ella se refiere tambin al uso de ciertas caractersticas
de esta programacin, para disear programas ms sencillos. Adems la concurrencia permite,
como ya se mencion, acceder a datos de manera simultnea desde dos o ms hilo, por lo que
hay que considerar los aspectos de sincronizar los datos.

Formas de Multihilos:
Generalmente los Sistemas Operativos implementan hilos de dos maneras:
Multihilo apropiativo: El sistema operativo puede decidir cundo hacer un cambio de
contexto, pero tiene la desventaja de que si lo hace en un momento inadecuado, causa el
fenmeno de inversin de prioridades y otros problemas.
Multihilo cooperativo: Es el hilo el que decide cuando abandonar el control al llegar a un
punto de detencin, por lo que puede traer problemas si este espera la liberacin o
disponibilidad a un recurso.

El soporte de hardware para multihilo fue introducido por Intel Pentium 4, bajo el nombre de
HyperThreading.

Multitarea basada en procesos y multitareas basada en hilos.


La multitarea basada en procesos es quizs la forma con la que estamos familiarizados como
ya pudimos observar en captulos anteriores, esta multitarea es la capacidad de ejecutar dos o
ms programa a la vez, siendo el programa, en este caso, la unidad de cdigo ms pequea.
En el caso de la multitareas basadas en hilos la unidad de cdigo ms pequea es el hilo. Y
este tipo de multitarea genera una menor sobrecarga que la basada en procesos. Esto es
debido a que los procesos requieren un mayor uso del CPU, y la comunicacin entre ellos es
limitada. Al usar la programacin multihilos los programas son ms eficientes que hacen un
mejor uso del procesador, minimizando el tiempo libre que este tiene.

Diferencias entre hilos y procesos


Los procesos normalmente son independientes, llevan bastante informacin de estados e
interactan solo a travs de mecanismos dados por el sistema, mientras que muchos hilos
comparten recursos directamente.
Al compartir, los hilos, datos y espacios de direcciones y los procesos no hacerlo, al ser
independientes, los sistema operativos que proveen facilidades para los hilos, es ms rpido
pasar de un hilo a otro dentro del mismo proceso, que de un proceso a otro. Esto es debido que
al cambiar de un proceso al otro el sistema operativo genera lo conocido como overhead, que
es el tiempo desperdiciado por el procesador para realizar un cambio de modo (mode switch),
en este caso pasar del estado de Running al estado de Waiting o Bloqueado y colocar el nuevo
proceso en Running. En el caso de los hilos como estn en el mismo proceso este overhead es
casi despreciable.
Sistemas operativos como Windows NT, OS/2 y Linux (2.5 o superiores) dicen tener hilos
baratos y procesos costosos, mientras que otros sistemas operativos no existe una gran

2 Facilitador: Israel Deago


diferencia.

Funcionalidad de los Hilos


Al igual que los procesos los hilos tienen un estado de ejecucin y se pueden sincronizar entre
ellos por los problemas de compartimiento de recursos. Para aumentar el la eficiencia, en el
uso del procesador, generalmente los procesos tiene una tarea especfica y determinada.

Estados de un hilo
Los principales estados de los hilos son: Ejecucin, Listo y Bloqueado. En este caso no se
toma en cuenta el estado de suspensin ya que es un concepto de procesos. Si un proceso
esta expulsado de la memoria RAM todos los hilos que lo conforman debern estarlo, ya que
todos comparten el espacio de direcciones del proceso.
Cambios de Estados
Creacin: Al crear un proceso se crea un hilo para dicho proceso, pudiendo, luego, este hilo
crear ms hilos dentro del proceso, teniendo ellos su propio contexto y su propio espacio de
pila, y pasara a la cola de listas.
Bloqueo: Cuando un hilo va a esperar por un suceso, este se bloquea y guarda sus
registros, y el procesador pasa a otro procesos que este en la cola de listos, mientras que el
anterior permanece bloqueado.
Desbloqueo: Una vez que el suceso que estaba esperando el hilo se cumple pasa a la cola
de listos.
Terminacin: Al finalizar el hilo, su contexto y sus pilas se liberan.

Hilos a nivel de usuario y de ncleo

Hilos a nivel de usuario: Tambin conocido por sus siglas en ingles ULT que viene de User
Level Thread. En las aplicaciones ULT el trabajo de gestin de hilos lo realiza la aplicacin y el
kernel o ncleo no tienen nada que ver con esto, ni siquiera sabe que existe. Es posible la
creacin de dicha aplicacin, a travs de una biblioteca de hilos, que contiene el cdigo para
crear y destruir hilos, intercambiar mensajes y datos entre hilos, para planificar la ejecucin de
hilos y para salvar y restaurar el contexto de los hilos.
Las operaciones descritas se llevan el espacio de usuario de un mismo proceso. Debido a este
el kernel lo ve como una unidad y le asigna un nico estado (listo, bloqueado, etc.).
Ventajas:
o El intercambio ente los hilos de un mismo proceso no necesita privilegios del modo kernel, y
al no tener que cambiar al modo kernel al hacer el intercambio se evita el sobrecoste u
overhead.
o Se puede decidir que planificacin se le va a dar a la programacin.
o Se pueden ejecutar en cualquier sistema operativo ya que la biblioteca de hilos es un
recurso compartido.

3 Facilitador: Israel Deago


Desventajas:
o Al ser las llamadas al sistema, en la mayora de los Sistemas Operativos, bloqueantes, al
hacer esto el hilo se bloquea y bloque tambin a los otros hilos dentro de ese proceso.
o En el ULT puro, una aplicacin no aprovecha el uso de los multiprocesadores, ya que el
ncleo asigna un solo proceso a un procesador.
Una solucin al bloqueo mediante llamadas del sistema es el uso de la tcnica de jacketing,
que convierte una llamada bloqueante en no bloqueante.

Hilos a nivel de ncleo (KLT):


En el KLT todo el trabajo de gestin lo realiza el kernel. No hay un cdigo de gestin de hilos,
solo un API para la gestin de hilos en el ncleo. Linux y OS/2 utilizan este mtodo. Linux utiliza
un mtodo muy particular en 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 lgicamente son manejados por el kernel.
Ventajas de los KLT
El kernel puede planificar simultneamente mltiples hilos del mismo proceso en mltiples
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:


Hay sistemas operativos como Solaris que utilizan una combinacin de ULT y de KLT. Para ello
en el espacio de usuario se realiza la mayor parte de la planificacin y sincronizacin de los
hilos. Y los mltiples ULT de una sola aplicacin se asocian con varios KLT. El nmero de KLT
para cada aplicacin puede ser modificado por el programador, para obtener el mejor resultado
global.

Multiproceso Simtrico
Arquitectura SMP (Symmetrical Multiprocessing, multiproceso simtrico): Los
supercomputadores se han desarrollado siguiendo principalmente dos arquitecturas la MMP o
la SMP. En el caso de la SMP esta consiste en dos procesadores unidos a un bus comn a
travs del cual se reparten el trabajo entre ellos. Al ser de uso comn debe ser monitoreado
para evitar que haya problemas con su acceso al intentar usarlo varios procesadores. De la
misma manera se reparten recursos como memoria RAM, almacenamiento secundario,
perifricos de entrada y salida. El problema que presenta esta arquitectura es que el tiempo
para repartir el trabajo entre los procesadores puede ser mucho, en caso de que se hayan
agregado muchos procesadores. Para esta arquitectura no se usa jerarqua, todos los
procesadores son iguales y pueden ejecutar tareas indistintamente. Esta arquitectura tambin
es llamada UMA.

Hilos y SMP en Linux

4 Facilitador: Israel Deago


En Linux para poder trabajar SMP se debe configurar primero el kernel. Para esto se debe
habilitar la funcin CONFIG_SMP durante la configuracin del kernel.
Durante el uso del kernel de Linux 2.0 el SMP se consideraba un gran bloqueo, lentamente
hasta la llegada del kernel 2.6 el poder del SMP fue revelado. En esta versin se le agrego un
mejor planificador para mejor el soporte de SMP. El sistema mantiene 2 colas de ejecucin para
el procesador, uno es la cola de los que han expirado y la otra es la de los que estn activos.
Cada una de las colas de ejecucin soporta 140 prioridades, siendo las mayores de 100
utilizadas para tareas en tiempo real y las menores de 40 son para tareas de usuario.

5 Facilitador: Israel Deago