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.

 

 

Indice