En las computadoras modernas, muchos procesos se ejecutan a la vez. Los procesos activos se colocan en una matriz llamada cola de ejecución o runqueue . La cola de ejecución puede contener valores de prioridad para cada proceso, que el programador utilizará para determinar qué proceso se ejecutará a continuación. Para garantizar que cada programa tenga una parte justa de los recursos, cada uno se ejecuta durante un período de tiempo (cuántico) antes de pausarlo y colocarlo nuevamente en la cola de ejecución. Cuando se detiene un programa para permitir que se ejecute otro, se permite que se ejecute el programa con la prioridad más alta en la cola de ejecución.
Los procesos también se eliminan de la cola de ejecución cuando solicitan dormir , están esperando que un recurso esté disponible o han sido finalizados.
En el sistema operativo Linux (antes del kernel 2.6.23), a cada CPU del sistema se le asigna una cola de ejecución, que mantiene una matriz de procesos activos y expirados. Cada matriz contiene 140 punteros (uno por cada nivel de prioridad) a listas doblemente enlazadas , que a su vez hacen referencia a todos los procesos con la prioridad dada. El planificador selecciona el siguiente proceso de la matriz activa con la prioridad más alta. Cuando el quantum de un proceso expira, se coloca en la matriz expirada con cierta prioridad. Cuando la matriz activa no contiene más procesos, el planificador intercambia las matrices activa y expirada, de ahí el nombre de planificador O (1).
En UNIX o Linux , el comando sar se utiliza para verificar la cola de ejecución.
El comando vmstat de UNIX o Linux también se puede utilizar para determinar la cantidad de procesos que están en cola para ejecutarse o en espera de ejecutarse. Estos aparecen en la columna "r".
Ejemplo:
$vmstatprocs -----------memoria---------- ---swap-- -----io---- -sistema-- ------cpu----- rb swpd free buff cache si so bi bo en cs us sy id wa st 2 0 0 4579152 324416 4619528 0 0 402 236 3357 15 20 2 78 0 0
Hay dos modelos de colas de ejecución: uno que asigna una cola de ejecución a cada procesador físico y el otro tiene solo una cola de ejecución en el sistema.