Programación preventiva y no preferente en sistemas operativos

Anonim

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.

¿Cómo sabe el Programador qué tareas son prioritarias?

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:

  1. en un CPU Burst donde la CPU está realizando cálculos para procesar la tarea (el período para una ráfaga de CPU varía de una tarea a otra y de un programa a otro).
  2. En una Ráfaga de entrada / salida (E / S) en espera de que los datos sean recibidos o enviados desde el sistema.

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 utilizar para gestionar 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:

  1. Cuando la tarea cambia de un Corriendo a un Estado de espera (por ejemplo, esperando durante una solicitud de E / S).
  2. Cuando la tarea cambia de Corriendo a Listo (por ejemplo respondiendo a una interrupción).
  3. Cuando la tarea cambia de Esperando a Listo (por ejemplo, se completa una solicitud de E / S).
  4. Cuando el Tarea

Se debe seleccionar una nueva tarea si la etapa 1 o 4 sucede para asegurar 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):

  • Programación no preventiva es cuando una tarea se ejecuta hasta que se detiene (voluntariamente) o finaliza. Windows® tenía una programación no preferente hasta Windows 3.x, después de lo cual cambió a Preventivo desde Windows 95.
  • Programación preventiva es donde una tarea puede ser suspendida a la fuerza por una interrupción de la CPU, a diferencia de No preventiva, donde la tarea se ejecuta hasta que libera el control de la CPU.

Programación no preventiva

Las tareas dentro de un sistema No-Preventivo se ejecutarán hasta que se completen.

El Programador luego verifica todos los estados de 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 se asegura de 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 de cuánto tiempo lleve completar la tarea.

Programación preventiva

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 puede 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.

En resumen

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 trabajo más corto-siguiente, 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.