
Linux está basado en la
planificación tradicional de Unix añadiendo
2 clases de prioridad para procesos de tiempo real flexibles. Las tres clases de
prioridad de Linux son las siguientes:
ð
SCHED_FIFO:
hilos de tiempo real con planificación FIFO.
ð
SCHED_RR: hilos de tiempo real con planificación por turno
rotatorio.
ð
SCHED_OTHER: hilos que no son de tiempo
real y otros.
Dentro de cada clase se
utilizan múltiples prioridades, siendo las prioridades de las clases de tiempo
real mayores que la de la clase SCHED_OTHER. Para los hilos FIFO, se aplican las
siguientes reglas:
1.
El sistema no interrumpe la ejecución de un hilo FIFO, exepto
en los siguientes casos:
a)
Pasa a estar listo otro hilo
FIFO de mayor prioridad.
b)
El hilo FIFO en ejecución
se bloquea a la espera de un evento, como una E/S.
c)
El hilo FIFO en ejecución
abandona el procesador como resultado de la ejecución de la primitiva sched_yield.
2.Cuando se interrumpe un hilo
FIFO en ejecución, pasa a la cola asociada a su prioridad.
3.Cuando un hilo FIFO pasa a
listo y tiene mayor prioridad que el hio que está en ejecución, se expulsa al
hilo en ejecución y pasa a ejecutar el hilo de mayor prioridad. Si más de un
hilo tiene esta mayor prioridad, se escoge al que lleva más tiempo esperado.
La política SCHED_RR es similar a la SCHED_FIFO, exepto por el uso de un cuanto de tiempo asociada a cada hilo. Cuando un hilo SCHED_RR ha consumido su cuanto de tiempo, pasa a suspendido y se escoge un hilo de tiempo real con una prioridad igual o mayor.
La figura 10.9 ilustra las diferencias entre la
planificación FIFO y RR. Supóngase un programa de cuatro hilos con tres
prioridades relativas asignadas según la figura 10.9. Supóngase que todos los
hilos que esperan están listos para ejecutarse cuando termina o se bloquea el
hilo actual y no hay ningún hilo de mayor prioridad despierto mientras se está
ejecutando un hilo. La figura 10.9 muestra el orden de ejecución si todos los
hilos son de la clase SCHED_FIFO. El hilo D se ejecuta hasta que termina su
bloqueo. A continuación, aunque los hilos B y C tienen la misma prioridad, se
ejecuta el hilo B porque lleva mas tiempo esperando que C. El hilo B se ejecuta
hasta que termina o se bloquea; entonces, pasa a ejecutar el hilo C hasta que
termina o se bloquea. Por último, se ejecuta el hilo A.

La figura 10.9 muestra el orden de ejecución si
todos los hilos son de la clase SCHED_RR. El hilo D se ejecuta hasta que termina
su bloqueo. A continuación, los hilos B y C comparten el tiempo porque ambos
tienen la misma prioridad. Por último, se ejecuta el hilo A.
La última clase de prioridad es SCHED_OTHER. Un
hilo de esta clase ejecuta sólo si no hay hios de tiempo real listos para ser
ejecutados. Dentro de la clase SCHED_OTHER, se utiliza el algoritmo tradicional
de Unix.