Programación preventiva y no preventiva

Diferencias clave entre programación preventiva y no preventiva

  • En la programación preventiva, la CPU se asigna a los procesos durante un período de tiempo específico y la CPU de programación no preventiva se asigna al proceso hasta que finaliza.
  • En la programación preventiva, las tareas se cambian según la prioridad, mientras que en la programación no preventiva no se produce ningún cambio.
  • El algoritmo preventivo tiene la sobrecarga de cambiar el proceso del estado listo al estado en ejecución, mientras que la programación no preventiva no tiene dicha sobrecarga de conmutación.
  • La programación preventiva es flexible, mientras que la programación no preventiva es rígida.
Programación preventiva frente a no preventiva
Programación preventiva frente a no preventiva

¿Qué es la programación preventiva?

La programación preventiva es un método de programación en el que la mayoría de las tareas se asignan con sus prioridades. A veces es importante ejecutar una tarea con mayor prioridad antes que otra tarea de menor prioridad, incluso si la tarea de menor prioridad todavía se está ejecutando.

En ese momento, la tarea de menor prioridad se mantiene durante algún tiempo y se reanuda cuando la tarea de mayor prioridad finaliza su ejecución.

¿Qué es la programación no preventiva?

En este tipo de método de programación, la CPU se ha asignado a un proceso específico. El proceso que mantiene ocupada la CPU liberará la CPU ya sea cambiando de contexto o finalizando.

Es el único método que se puede utilizar para varias plataformas de hardware. Esto se debe a que no necesita hardware especializado (por ejemplo, un temporizador) como la programación preventiva.

La programación no preventiva ocurre cuando un proceso entra voluntariamente en estado de espera o finaliza.

Programación preventiva versus no preventiva: tabla comparativa

A continuación, se muestra una comparación directa entre programación preventiva y no preventiva. Las principales diferencias entre la programación preventiva y no preventiva en el sistema operativo son las siguientes:

Programación preventiva Programación no preventiva
Se puede impedir que un procesador ejecute los diferentes procesos en medio de la ejecución de cualquier proceso actual. Una vez que el procesador inicia su ejecución, debe finalizarla antes de ejecutar el otro. No se puede detener a la mitad.
La utilización de la CPU es más eficiente en comparación con la programación no preventiva. La utilización de la CPU es menos eficiente en comparación con la programación preventiva.
El tiempo de espera y respuesta de la programación preventiva es menor. El tiempo de espera y respuesta del método de programación no preventiva es mayor.
Se prioriza la programación preventiva. El proceso de mayor prioridad es un proceso que se utiliza actualmente. Cuando cualquier proceso entra en estado de ejecución, el estado de ese proceso nunca se elimina del programador hasta que finaliza su trabajo.
La programación preventiva es flexible. La programación no preventiva es rígida.
Ejemplos: – El tiempo restante más corto primero, Round Robin, etc. Ejemplos: Se le sirve en orden de llegada, Trabajo más corto primero, Programación de prioridades, etc.
El algoritmo de programación preventiva se puede anticipar, es decir, el proceso se puede programar. En el proceso de programación no preventiva no se puede programar
En este proceso, la CPU se asigna a los procesos durante un período de tiempo específico. En este proceso, la CPU se asigna al proceso hasta que finaliza o cambia al estado de espera.
El algoritmo preventivo tiene la sobrecarga de cambiar el proceso del estado listo al estado en ejecución y viceversa. La programación no preventiva no tiene la sobrecarga de cambiar el proceso de ejecución al estado listo.

Ventajas de la programación preventiva

A continuación se detallan las ventajas y beneficios del método de programación preventiva:

  • El método de programación preventiva es más robusto, enfoque para que un proceso no pueda monopolizar la CPU
  • La elección de la tarea en ejecución se reconsidera después de cada interrupción.
  • Cada evento causa la interrupción de las tareas en ejecución.
  • El sistema operativo se asegura de que el uso de la CPU sea el mismo en todos los procesos en ejecución.
  • En esto, el uso de la CPU es el mismo, es decir, todos los procesos en ejecución utilizarán la CPU por igual.
  • Este método de programación también improvisa el tiempo de respuesta promedio.
  • La programación preventiva es beneficiosa cuando la usamos para el entorno de programación múltiple.

Ventajas de la programación no preventiva

A continuación se detallan las ventajas y beneficios del método de programación no preventiva:

  • Ofrece bajos gastos de programación
  • Tiende a ofrecer un alto rendimiento
  • Es un método conceptualmente muy simple.
  • Less Necesidad de recursos computacionales para la programación.

Desventajas de la programación preventiva

A continuación se presentan las desventajas de la programación preventiva:

  • Necesita recursos computacionales limitados para la programación
  • El programador necesita más tiempo para suspender la tarea en ejecución, cambiar el contexto y enviar la nueva tarea entrante.
  • El proceso que tiene baja prioridad necesita esperar más tiempo si algunos procesos de alta prioridad llegan continuamente.

Desventajas de la programación no preventiva

A continuación se detallan las desventajas/desventajas del método de programación no preventiva:

  • Puede provocar hambruna, especialmente para aquellas tareas en tiempo real.
  • Los errores pueden hacer que una máquina se congele
  • Puede hacer en tiempo real y programación prioritaria difícil
  • Mal tiempo de respuesta para los procesos.

Ejemplo de programación no preventiva

En la programación SJF no preventiva, una vez que el ciclo de la CPU se asigna al proceso, el proceso lo retiene hasta que alcanza un estado de espera o finaliza.

Considere los siguientes cinco procesos, cada uno con su propio tiempo de ráfaga y tiempo de llegada únicos.

Cola de proceso Tiempo quemado Hora de llegada
P1 6 2
P2 2 5
P3 8 1
P4 3 0
P5 4 4

Paso 0) En el tiempo = 0, llega P4 y comienza la ejecución.

Ejemplo de programación no preventiva

Paso 1) En el momento = 1, llega el Proceso P3. Pero P4 todavía necesita 2 unidades de ejecución para completarse. Continuará la ejecución.

Ejemplo de programación no preventiva

Paso 2) En el momento =2, llega el proceso P1 y se agrega a la cola de espera. P4 continuará la ejecución.

Ejemplo de programación no preventiva

Paso 3) En el tiempo = 3, el proceso P4 finalizará su ejecución. Se compara el tiempo de ráfaga de P3 y P1. El proceso P1 se ejecuta porque su tiempo de ráfaga es menor en comparación con P3.

Ejemplo de programación no preventiva

Paso 4) En el momento = 4, llega el proceso P5 y se agrega a la cola de espera. P1 continuará la ejecución.

Ejemplo de programación no preventiva

Paso 5) En el momento = 5, llega el proceso P2 y se agrega a la cola de espera. P1 continuará la ejecución.

Ejemplo de programación no preventiva

Paso 6) En el tiempo = 9, el proceso P1 finalizará su ejecución. Se compara el tiempo de ráfaga de P3, P5 y P2. El proceso P2 se ejecuta porque su tiempo de ráfaga es el más bajo.

Ejemplo de programación no preventiva

Paso 7) En el momento = 10, P2 se está ejecutando y P3 y P5 están en la cola de espera.

Ejemplo de programación no preventiva

Paso 8) En el tiempo = 11, el proceso P2 finalizará su ejecución. Se compara el tiempo de ráfaga de P3 y P5. El proceso P5 se ejecuta porque su tiempo de ráfaga es menor.

Ejemplo de programación no preventiva

Paso 9) En el tiempo = 15, el proceso P5 finalizará su ejecución.

Ejemplo de programación no preventiva

Paso 10) En el tiempo = 23, el proceso P3 finalizará su ejecución.

Ejemplo de programación no preventiva

Paso 11) Calculemos el tiempo de espera promedio para el ejemplo anterior.

Wait time 
P4= 0-0=0
P1=  3-2=1
P2= 9-5=4
P5= 11-4=7
P3= 15-1=14
Average Waiting Time= 0+1+4+7+14/5 = 26/5 = 5.2

Ejemplo de programación preventiva

Consideremos los siguientes tres procesos en Round-robin

Cola de proceso Tiempo quemado
P1 4
P2 3
P3 5

Ejemplo de programación preventiva

Paso 1) La ejecución comienza con el proceso P1, que tiene un tiempo de ráfaga 4. Aquí, cada proceso se ejecuta durante 2 segundos. P2 y P3 todavía están en la cola de espera.

Ejemplo de programación preventiva

Paso 2) En el momento =2, P1 se agrega al final de la cola y P2 comienza a ejecutarse.

Ejemplo de programación preventiva

Paso 3) En el momento = 4, se adelanta P2 y se agrega al final de la cola. P3 comienza a ejecutarse.

Ejemplo de programación preventiva

Paso 4) En el momento = 6, se adelanta P3 y se agrega al final de la cola. P1 comienza a ejecutarse.

Ejemplo de programación preventiva

Paso 5) En time=8, P1 tiene un tiempo de ráfaga de 4. Ha completado la ejecución. P2 inicia la ejecución

Ejemplo de programación preventiva

Paso 6) P2 tiene un tiempo de ráfaga de 3. Ya se ha ejecutado durante el intervalo 2. En el momento = 9, P2 completa la ejecución. Luego, P3 comienza la ejecución hasta que se completa.

Ejemplo de programación preventiva

Paso 7) Calculemos el tiempo de espera promedio para el ejemplo anterior.

Wait time 
P1= 0+ 4= 4
P2= 2+4= 6
P3= 4+3= 7