Diferencia entre la programación preventiva y no preventiva en los sistemas operativos

Diferencia entre la programación preventiva y no preventiva en los sistemas operativos

Programación de procesadores (o Programación de CPU) determina a qué procesos se asignan y se eliminan de la CPU, en base a 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 funcionar en modos simples independientes, pero con la creciente necesidad de sistemas flexibles y sensibles, así como la virtualización, la gestión de múltiples procesos proporciona una respuesta rápida a todas las solicitudes de procesamiento de tareas.

Las unidades de programación a menudo se denominan tarea Y es el trabajo del planificador ejecutar y administrar estas tareas cuando sea necesario; El planificador 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 planificador qué tareas son prioridad??

El planificador debe ejecutar un proceso de selección justo y eficiente, teniendo en cuenta las solicitudes de procesamiento variable y dinámica y aprovechar al máximo los ciclos de la CPU.

Las tareas pueden estar en dos estados mientras se procesan:

  1. en un Estallido de la CPU Cuando la CPU realiza cálculos para procesar la tarea (el período para una ráfaga de la CPU varía de una tarea a otra, y programa a programar).
  2. En un Entrada/salida (E/S) BRABA Esperando que se reciban o se envíen los datos del sistema.

Cuando la CPU está inactiva, el planificador lee el Cola lista, y selecciona la siguiente tarea que se ejecutará.  Entonces, es el Despachador que proporciona el control de tareas seleccionado de la CPU, por lo que debe ser rápido!  Cualquier tiempo que tome el despachador se conoce como Latencia de envío.

Hay diferentes estructuras y parámetros personalizados para definir el Cola lista, 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 planificador tiene que tomar una decisión durante una de las siguientes etapas:

  1. Cuando la tarea cambia de un Correr a un Estado de espera (Por ejemplo, esperando durante una solicitud de E/S).
  2. Cuando la tarea cambia de Correr a Listo (Por ejemplo, respondiendo a una interrupción).
  3. Cuando la tarea cambia de Espera 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 garantiza la utilización completa de la CPU, y tanto en las etapas 2 como en 3, la tarea puede continuar funcionando 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 termina. Windows® tenía una programación no preventiva 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 por la fuerza por una interrupción de la CPU, a diferencia de no prevalecer, 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 planificador luego verifica los estados de todas las tareas y programa la siguiente tarea de mayor prioridad con una Listo estado.

Con la programación no preventiva, una vez que una tarea tiene su asignación a la CPU, no se puede quitar, incluso si las tareas cortas tienen que esperar a que complete tareas más largas para completar.

La gestión de programación en todas las tareas es "justa" y los tiempos de respuesta son predecibles ya que las tareas de alta prioridad no pueden aumentar las tareas de espera más abajo en la cola.

El planificador asegura que cada tarea obtenga su 'participación de la CPU, evitando cualquier retraso con cualquier tarea.  La 'cantidad de tiempo' asignada a la CPU puede no ser necesariamente igual, ya que depende de cuánto tiempo tarda la tarea para completar.

Programación preventiva

Este modelo de programación permite interrumpir las tareas, en contraste con la programación no preventiva.

Las interrupciones, que podrían iniciarse a partir de llamadas externas, invocan al planificador para detener una tarea de ejecución para administrar otra tarea de mayor prioridad, por lo que el control de la CPU puede preferirse.

La tarea de mayor prioridad en un Listo el estado se ejecuta, lo que permite una respuesta rápida a eventos en tiempo real.

Algunas de las contras con programación preventiva implican el aumento de los gastos generales en los recursos cuando el uso de interrupciones y problemas puede ocurrir con dos tareas que comparten datos, ya que se puede interrumpir mientras se actualiza las estructuras de datos compartidas, y podría afectar negativamente la integridad de los datos.

Por otro lado, es práctico poder detener 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 usar 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 entrar primero en salir, Más corto, Más corto, El tiempo restante más corto, etc.

El análisis de los datos históricos puede proporcionar información sobre aspectos, como la tasa a la que llegan nuevas tareas, la CPU y las ráfagas de E/S, etc., para que las distribuciones de probabilidad puedan calcular las características de los tiempos de espera de las tareas, armando así a los administradores con datos relevantes para definir modelos de programación.