PLANIFICACION
DE HILOS
Con los hilos el concepto de
ejecución se separa del resto de la definición de un proceso. Una aplicación
puede implementarse como un conjunto de hilos que cooperan y ejecutan
concurrentemente en el mismo espacio de direcciones.
En un monoprocesador, los
hilos pueden usarse como una ayuda a la estructuración de un programa y para
solapar la E/S y el procesamiento. Puesto que la penalización por el
intercambio de hilos es mínima, comparada con el intercambio de procesos, éstos
beneficios se llevan a cabo a bajo costo.
Sin embargo, toda la potencia de los hilos se hace evidente en un sistema
multiprocesador, puesto que pueden emplearse para obtener un paralelismo real en
las aplicaciones posibilitando un aumento drástico del rendimiento. Sin
embargo, puede demostrarse que, en aplicaciones que exijan una interacción
considerable entre los hilos (paralelismo de grano medio), pequeñas diferencias
en la planificación y gestión de hilos pueden tener un impacto significativo
en el rendimiento.


Figura
10.1 Comparación
del rendimiento de la planificación
para uno y dos procesadores.
Elementos y métodos claves:
entre las diversas propuestas de planificaión de hilos para multiprocesadores y
de asignación de procesadores, se destacan los siguientes cuatro métodos:
&
Reparto de carga: los procesos no se
asignan a un procesador en particular. Se mantiene una cola global de hilos
listos y cada procesador, cuando está ocioso, selecciona un hilo de la cola.
Este término se emplea para diastinguir esta estratégia del esquema de balance
de carga en el que el trabajo se asigna de forma mas permanente.
&
Planificación por grupos:
se panifica un conjunto de hilos afines para su ejecución en un conjunto de
procesadores al mismo tiempo, según la realción de uno a uno.
&
Asignación dedicada de procesadores:
es el enfoque opuesto al reparto de carga y ofrece una planificación implícita
definida por la asignación de hilos a los procesadores. Mientras un programa se
ejecuta, se le asigna un número de procesadores igual al número de hilos que
posea. Cuando el programa finaliza, los procesadores retornan a la reserva
general para posibles asignaciones a otros programas.
&
Planificación dinámica:
el número de hilos en un programa se puede cambiar en el curso de la ejecución.
EL
S.O. MACH
En Mach no existe el concepto de procesos; mas bien se implanta un
proceso tradicional como una tarea con un sólo hilo de control. Un hilo es la
unidad básica de ejecución, así como el objeto de trabajo mas pequeño, y se
ejecuta en el contexto de una tarea.
El planificador de la CPU para
un S.O. multiprocesador basados en hilos es más complejo que sus parientes
basados en procesos. Por lo general se encuentran más hilos en un sistema
multihilos que procesos en un sistema multiples tareas.
Mach utiliza una política
sencilla para que el planificador sea manejable. Sólo se planifican los hilos,
por lo que éste no requiere conocimiento de las tareas. Todos los hilos
compiten de igual manera por los recursos, inncluyendo los cuantos de tiempo.
A cada hilo se le asocia una
prioridad de 0 a 127, basada en el promedio exponencial de su utilización de la
CPU. En otras palabras, un hilo que ha usado recientemente la CPU durante largo
tiempo, tiene la menor prioridad.
Mach emplea la prioridad para
colocar el hilo en una de las 32 colas de ejecución globales, las cuales se
rastrean en orden prioritario para localizar los hilos en espera cundo un
procesador está inactivo. También cuenta con colas de ejecución paara cada
procesador, o locales, que debe administrar junto con las colas globales. Una
cola de ejecución local se usa para aquellos hilos enlazados a un procesador
específico.
En lugar de haber un
despachador central, cada procesador consulta las colas de ejecución locales y
globales para seleccionar el hilo adecuado para la ejecución. Los hilos en la
cola de ejecución local tienen prioridad absoluta sobre las colas globales, ya
que están realizando alguna tarea para el núcleo. Las colas de ejecución están
sujetas a una cerradura mientras se modifican, para evitar cambios simultáneos
efectuados por varios procesadores. Para acelerar el despacho de hilos en la
cola de ejecución global, Mach mantiene una lista de procesadores inactivos.
Por la naturaleza
multiprocesador de Mach, no resulta apropiado un cuanto de tiempo fijo porque
puede haber menos hilos listos para ejecución que procesadores disponibles, y
sería un desperdicio interrumpir un hilo con un cambio de contexto al núcleo
al terminar su cuanto de tiempo, sólo para que se coloque de inmediato otra vez
en estado de ejecución. En vez de usar un cuanto de longitud fija, Mach varía
el tamaño del cuanto inversamente con el total de hilos en el sistema entonces
el cuanto de tiempo permanece constante para todo el sistema.
Incluso también resulta más
difícil liberar la CPU al esperar un recurso; en primer lugar, un hilo tiene
que emitir una llamada assert_wait para
avisar al núcleo que el hilo está a punto de bloquearse; esto evita los
bloqueos mutuos y las condiciones de competencias, que pueden ocurrir durante la
ejecución en un entorno multiprocesador. La llamada al sistema thread_block
hace que le hilo salga de la cola de ejecución hasta que ocurra el proceso
indicado.