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.
