Programación del procesador (o Programación de CPU) determina qué procesos se asignan y se eliminan de la CPU, según los modelos de programación, como Con derecho preferente y Programación no preventiva (también conocido como Programación Cooperativa).
Los sistemas más antiguos podrían operar en modos simples e independientes, pero debido a la creciente necesidad de sistemas flexibles y con capacidad de respuesta, así como a la virtualización, la gestión eficiente del multiprocesamiento proporciona una respuesta rápida a todas las solicitudes de procesamiento de tareas..
Las unidades de programación se refieren a menudo como una tarea y es tarea del Programador ejecutar y administrar estas tareas cuando sea necesario; El Programador selecciona la tarea que se eliminará y asignará a la CPU para su procesamiento, de acuerdo con el modelo de programación utilizado.
El Programador debe ejecutar un proceso de selección justo y eficiente, teniendo en cuenta las solicitudes de procesamiento dinámico y variable, y aprovechar al máximo los ciclos de CPU.
Las tareas pueden estar en dos estados mientras se procesan:
Cuando la CPU está inactiva, el Programador lee el Lista de espera, y selecciona la siguiente tarea a ejecutar. Entonces, es el Transportista eso le da a la tarea seleccionada el control de la CPU, por lo que debe ser rápido! Cualquier tiempo ocupado por el Despachador es conocido como Latencia de despacho.
Existen diferentes estructuras y parámetros personalizados para definir el Lista de espera, así como varios métodos que se pueden usar para administrar las complejidades del proceso de programación.
En general, se trata de optimizar y maximizar la utilización de la CPU, el rendimiento, etc..
El Programador debe tomar una decisión durante una de las siguientes etapas:
Se debe seleccionar una nueva tarea si la etapa 1 o 4 sucede para garantizar la utilización completa de la CPU, y en la etapa 2 y 3, la tarea puede continuar ejecutándose o se selecciona una nueva.
Después de comprender cómo se procesa una tarea, veamos dos modelos de programación que se ocupan de las interrupciones de la CPU.
Ambos tienen características similares con tareas, estados de tareas, colas y prioridades (estáticas o dinámicas):
Las tareas dentro de un sistema no preferente se ejecutarán hasta que se completen.
El Programador luego verifica los estados de todas las tareas y programa la siguiente tarea de mayor prioridad con un Listo estado.
Con la Programación no preferente, una vez que una tarea tiene su asignación a la CPU, no se puede eliminar, incluso si las tareas cortas tienen que esperar a que se completen las tareas más largas.
La gestión de la programación en todas las tareas es "justa" y los tiempos de respuesta son predecibles, ya que las tareas de alta prioridad no pueden hacer que las tareas en espera lleguen a la cola..
El Programador asegura que cada tarea reciba su parte de la CPU, evitando cualquier retraso en cualquier tarea. La 'cantidad de tiempo' asignada a la CPU puede no ser necesariamente igual, ya que depende del tiempo que la tarea requiera completar.
Este modelo de programación permite que las tareas se interrumpan, en contraste con la Programación no preferente que tiene un enfoque de "ejecución a finalización".
Las interrupciones, que podrían iniciarse desde llamadas externas, invocan al Programador para pausar una tarea en ejecución para administrar otra tarea de mayor prioridad, por lo que el control de la CPU se puede anular.
La tarea de mayor prioridad en una Listo El estado se ejecuta, permitiendo una respuesta rápida a eventos en tiempo real..
Algunas de las desventajas de la Programación anticipada implican el aumento de los gastos generales en los recursos cuando se usan interrupciones y pueden ocurrir problemas con dos tareas que comparten datos, ya que una puede interrumpirse al actualizar estructuras de datos compartidas, y podría afectar negativamente la integridad de los datos.
Por otro lado, es práctico poder pausar una tarea para administrar otra que podría ser crítica.
Se pueden definir muchas variaciones y dependencias en diferentes políticas, como el uso de un "Política de Round Robin [i]" donde cada tarea (con igual prioridad) se ejecuta una vez, y luego se coloca al final de la cola, para el siguiente ciclo.
Otras políticas incluyen Primero en llegar y primero en salir, El trabajo más corto primero, El siguiente trabajo más corto, Tiempo restante más corto, etc.
El análisis de los datos históricos puede proporcionar información sobre aspectos, como la velocidad a la que llegan las nuevas tareas, la CPU y las explosiones de E / S, etc., por lo que las distribuciones de probabilidad pueden calcular las características de los tiempos de espera de las tareas, lo que brinda a los administradores información relevante para definir los modelos de programación..