En los sistemas operativos, el programador es el componente del núcleo del sistema operativo que elige el orden de ejecución de los procesos en los procesadores de una computadora . En inglés, el planificador se llama planificador .
Un proceso necesita el recurso del procesador para realizar cálculos; lo abandona cuando se produce una interrupción , etc. Muchos procesadores antiguos solo pueden realizar un procesamiento a la vez. Para los demás, todavía es necesario un planificador para determinar qué proceso se ejecutará en qué procesador (esta es la noción de afinidad , que es muy importante para no degradar el rendimiento). Más allá de los procesadores multinúcleo clásicos , la noción de hyperthreading hace que la cuestión de la programación sea aún más compleja.
En un momento dado, a menudo hay más procesos para ejecutar que procesadores.
Una de las funciones del sistema operativo , y más específicamente del programador del kernel, es permitir que todos estos procesos se ejecuten en un momento u otro y hacer el mejor uso del procesador para el usuario. Para que cada tarea se ejecute sin preocuparse por las demás y / o también para ejecutar las tareas de acuerdo con las restricciones impuestas al sistema (ejemplo: restricciones de tiempo en el caso de un sistema operativo en tiempo real), el programador del kernel del sistema realiza cambios de contexto de la misma.
A intervalos regulares, el sistema llama a un procedimiento de programación que elige el siguiente proceso que se ejecutará. Si el nuevo proceso es diferente al anterior, se produce un cambio de contexto (operación que consiste en guardar el contexto de ejecución de la tarea anterior como los registros del procesador). Esta estructura de datos se conoce generalmente como PCB . El sistema operativo restaura el PCB antiguo de la tarea elegida, que luego se ejecuta, retomando donde lo dejó antes.
Si las tareas se van a ejecutar simultáneamente y es físicamente imposible que la computadora procese más de una tarea simultáneamente, el kernel cambia rápidamente el contexto de ejecución de la tarea, de modo que:
Por ejemplo, con 3 tareas, esto se puede desglosar por
...
(3 tareas programadas con el algoritmo Round-robin (cada una a su vez)).
La elección del algoritmo de programación depende del comportamiento del sistema. Hay dos clases principales de programación.
Está presente en la mayoría de las computadoras "clásicas". Por ejemplo, programación de "decaimiento"; que es el predeterminado en Unix . Consiste en un sistema de prioridad adaptativo, por ejemplo favorece las tareas interactivas para que su tiempo de respuesta sea bueno. Una subclase de programación de tiempo compartido son los llamados programadores de "participación proporcional", están más destinados a estaciones de computación y permiten una gestión rigurosa de los recursos. En particular, se pueden mencionar "lotería" y "zancada".
Asegura que una determinada tarea se completará dentro de un período de tiempo determinado. Esto es esencial en los sistemas de a bordo.
OptimalidadSe dice que un programador en tiempo real es óptimo para un sistema de tareas si encuentra una solución de programación del sistema cuando esta solución existe. Si no puede encontrar una solución para este sistema, ningún otro programador puede encontrar una.