La programación preventiva de prioridad fija es un sistema de programación que se usa comúnmente en los sistemas en tiempo real . Con la programación preventiva de prioridad fija, el programador se asegura de que en cualquier momento dado, el procesador ejecute la tarea de mayor prioridad de todas aquellas tareas que están actualmente listas para ejecutarse.
El programador preventivo tiene una tarea de interrupción del reloj que puede proporcionar al programador opciones para cambiar después de que la tarea haya tenido un período determinado para ejecutarse: el intervalo de tiempo . Este sistema de programación tiene la ventaja de asegurarse de que ninguna tarea acapara al procesador durante más tiempo que el intervalo de tiempo. Sin embargo, este esquema de programación es vulnerable al bloqueo de procesos o subprocesos : dado que se da prioridad a las tareas de mayor prioridad, las tareas de menor prioridad podrían esperar una cantidad de tiempo indefinida. Un método común de arbitrar esta situación es el envejecimiento, que aumenta gradualmente la prioridad de los procesos y subprocesos en espera, asegurando que todos finalmente se ejecutarán. La mayoría de los sistemas operativos en tiempo real(RTOS) tienen programadores preventivos. Además, desactivar la división de tiempo de manera efectiva le brinda el RTOS no preventivo.
La programación preventiva a menudo se diferencia de la programación cooperativa , en la que una tarea se puede ejecutar de forma continua de principio a fin sin que otras tareas se apropien de ella. Para tener un cambio de tarea, la tarea debe llamar explícitamente al programador. La programación cooperativa se utiliza en algunos RTOS como Salvo o TinyOS .