El algoritmo utilizado por el planificador de Linux es un esquema complejo con una combinación de prioridad preventiva y división de tiempo sesgada. Asigna un tiempo más largo a tareas de mayor prioridad y un tiempo más corto a tareas de menor prioridad.
Identifica cada proceso como proceso en tiempo real o como un proceso normal (otro). Las tareas en tiempo real tienen asignadas prioridades estáticas en el rango [0,99], donde un número más bajo indica una prioridad más alta.
Todas las demás tareas tienen prioridades dinámicas en el rango [100,139], basadas en la interactividad de una tarea que se basa en sus buenos valores más o menos el valor 5. Las tareas que son más interactivas suelen tener tiempos de sueño más largos y, por lo tanto, es más probable que tener ajustes más cercanos a −5, ya que el planificador favorece las tareas interactivas. (La interactividad de una tarea se determina por cuánto tiempo ha estado durmiendo mientras espera E / S). La interactividad de una tarea determina si el valor 5 se agregará o restará del valor agradable. El resultado de tales ajustes serán prioridades más altas para estas tareas. Por el contrario, las tareas con tiempos de sueño más cortos a menudo están más vinculadas a la CPU y, por lo tanto, se reducirán sus prioridades.
El núcleo mantiene una lista de todas las tareas ejecutables en una estructura de datos de cola de ejecución. Una cola de ejecución contiene dos matrices prioritarias: activa y caducada. La matriz activa contiene todas las tareas con tiempo restante en sus segmentos de tiempo, y la matriz caducada contiene todas las tareas caducadas. Cada una de estas matrices de prioridad contiene una lista de tareas indexadas según la prioridad. El planificador elige la tarea con la máxima prioridad de la matriz activa para su ejecución en la CPU. Cuando todas las tareas han agotado sus segmentos de tiempo (es decir, el conjunto activo está vacío), se intercambian los dos conjuntos prioritarios: el conjunto caducado se convierte en el conjunto activo y viceversa.
La prioridad dinámica de una tarea se vuelve a calcular cuando la tarea ha agotado su cantidad de tiempo y se debe mover a la matriz expirada. Por lo tanto, cuando se intercambian las dos matrices, a todas las tareas en la nueva matriz activa se les han asignado nuevas prioridades y segmentos de tiempo correspondientes. (Nota: este es un extracto del libro sobre conceptos del sistema operativo (novena edición) de Abraham Silberschatz, et al. Para obtener más detalles, consulte la sección 5.6.3 de este libro)