PLANIFICACION DE UNIX SVR4

El algoritmo de panificación de Unix SVR4 revisa por completo el empleado en los primeros sistemas Unix. El nuevo algoritmo está diseñado para asignar máxima prioridad a los procesos de tiempo real, el siguiente nivel de prioridad a los procesos de modo núcleo y al nivel más bajo al resto de los procesos en modo usuario, denominados procesos de tiempo compartido.

 

Las dos modificaciones más importantes en SVR4 son:

 

1.    El uso de planificación por prioridades estáticas preferentes y la introducción de un conjunto de 160 niveles de prioridad divididos en tres clases de prioridad.

2.    La inserción de puntos de apropiación. Debido a que el núcleo es básico no es preferente, sólo se puede dividir en pasos que ejecuten sin interrupción hasta el final. En medio de estos pasos se insertan puntos de seguridad, llamados puntos de apropiación, donde el núcleo puede interrumpir la ejecución de forma segura y planificar un nuevo proceso. Un punto de seguridad se define como una región del código donde todas las estructuras del núceo están o bien actualizadas y consistentes o bien bloqueadas mediante un semáforo.

 

La figura 10.10 muestra los 160 niveles de prioridad definidos en SVR4. Cada procesos se define dentro de una de las tres clases de prioridad y se le asigna un nivel de prioridad dentro de esa clase. Las clases son las siguientes:

 

ü   Tiempo real (159-100): los procesos de estos niveles de prioridad se escogen antes que cualquier proceso del núcleo o del tiempo compartido. Además, los procesos de tiempo real pueden utilizar los puntos de apropiación para expulsar a los procesos del núcleo y a los de usuario.

 

ü   Núcleo (99-60):  los procesos de estos niveles de prioridad se escogen antes que cualquier procesode tiempo compartido, pero después de los procesos de tiempo real.

 

ü   Tiempo compartido (59-0): los procesos de prioridad más baja, destinados a aplicaciones de usuario distintas de las de tiempo real.

 

 

 

Figura  10.10   Clases de prioridad de SVR4

 

 

La figura 10.11 muestra como se implementa la planificación en SVR4. Cada nivel de prioridad tiene asociada una cola, y los procesos de un mismo nivel se ejecutan según un turno rotatorio. Un vector de bits, dqactmap, contiene un bit por cada nivel de prioridad, que está a uno si la cola de ese nivel no está vacía. Cada vez que un proceso deja el estado en ejecución, tanto por un bloqueo, como por el fin del cuanto o por apropiación, el planificador consulta dqactmap y expide un proceso listo de la cola no vacía de mayor prioridad. Además, cuando se alcanza un punto de apropiación, el núcleo comprueba una variable llamada kprunrun. Si está activa, indica que hay al menos un proceso de tiempo real listo para ejecutar, y el núcleo expulsa al proceso actual si su prioridad es menor que la del proceso de tiempo real listo.

 

Dentro de la clase de tiempo compartido, un proceso tiene prioridad variable. El planificador reduce su prioridad cada vez que agota un cuanto de tiempo, y le incrementa cuando se bloquea un evento o recurso. El cuanto de tiempo asignada a un proceso de tiempo compartido depende de su prioridad, oscilando entre 10ms para prioridad 0 y 100ms para prioridad 59. Cada proceso de tiempo real tiene una prioridad fija de un cuanto de tiempo fijo.

 

 

 

Figura  10.11  Colas de expedición de SVR4

 

Indice