¿En qué se diferencia una programación de CPU no preventiva?

La pregunta es ambigua porque hay docenas de algoritmos de despacho de procesos y subprocesos con diversos grados de preferencia. El tipo más común de despacho no preventivo se denomina “segmento de tiempo”. Una unidad recibe el uso de la CPU durante un período de tiempo fijo. Si la unidad espera, el corte puede terminar prematuramente, pero cuando el temporizador de fin de corte se apaga, la unidad deja de funcionar entre dos instrucciones arbitrarias. El pseudo despacho (como sucede cuando simula subprocesos en un sistema que no los admite de forma nativa) puede esperar un rendimiento, pero un sistema operativo real no espera ningún código.

El único uso moderno de la programación no preventiva es cuando necesita dar a un cierto número de usuarios una “parte equitativa” equitativa de los recursos del sistema. A veces, esta es la forma en que se programan las máquinas virtuales, porque es difícil priorizar una unidad de máquina virtual con potencialmente cientos de sus propias unidades de despacho opacas internas con diferentes prioridades internas, por lo que a cada máquina se le asigna un segmento de tiempo igual (o configurado).

Sin embargo, para un mejor rendimiento y cuando todas las unidades despachables son conocidas y pueden clasificarse, cada sistema competente será algo preventivo. En algunos casos, una interrupción se pondrá en cola (por ejemplo, si ocurre mientras el código se está ejecutando en el núcleo) y la prevención se producirá cuando sea conveniente (por ejemplo, cuando el núcleo volvería a un estado de usuario que llama), pero cualquier buen sistema ejecute la unidad más importante tan pronto como sea razonablemente posible.

La programación preventiva de la CPU implica que un subproceso de ejecución se puede detener en cualquier momento y se puede programar otro subproceso en su lugar. Se requiere un planificador preventivo cuando no se puede confiar en que los subprocesos de ejecución se ejecuten durante un tiempo finito para liberar recursos de ejecución de la CPU. Los planificadores preventivos crean tiempos de ejecución impredecibles que pueden ser inaceptables para aplicaciones en tiempo real.

Un planificador no preventivo se basa en subprocesos para generar voluntariamente su contexto de ejecución para que se ejecute otro subproceso. Un subproceso puede generar su contexto de ejecución para esperar un evento de sincronización como un bloqueo / semáforo / barrera o un evento IO como la llegada de datos desde el disco o la red.

Cuando consideramos las CPU multinúcleo modernas, hay más de una entidad de hardware disponible para ejecutar un subproceso determinado. A menudo, esto significa que no habrá diferencias prácticas entre un planificador preventivo y uno no preventivo, siempre que no haya hilos maliciosos que agoten todos los recursos de ejecución y nunca completen la ejecución sin esperar un evento IO.

Diferencias clave entre la programación preventiva y la no preventiva

  1. La diferencia básica entre la programación preventiva y no preventiva es que en la programación preventiva, la CPU se asigna a los procesos por un tiempo limitado . Mientras se encuentra en la programación no preventiva, la CPU se asigna al proceso hasta que finaliza o cambia al estado de espera .
  2. El proceso de ejecución en la programación preventiva se interrumpe en el medio de la ejecución, mientras que el proceso de ejecución en la programación no preventiva no se interrumpe en el medio de la ejecución.
  3. La programación preventiva tiene la sobrecarga de cambiar el proceso del estado listo al estado de ejecución, vise-verse y mantener la cola lista. Por otro lado, la programación no preventiva no tiene sobrecarga de cambiar el proceso del estado de ejecución al estado listo.
  4. En la programación preventiva, si un proceso con alta prioridad con frecuencia llega a la cola lista, entonces el proceso con baja prioridad tiene que esperar mucho tiempo y puede que tenga que morir de hambre. Por otro lado, en la programación no preventiva, si la CPU se asigna al proceso con un tiempo de ráfaga mayor, entonces los procesos con un tiempo de ráfaga pequeño pueden tener que morir de hambre.
  5. La programación preventiva es bastante flexible porque los procesos críticos pueden acceder a la CPU a medida que llegan a la cola lista, sin importar qué proceso se esté ejecutando actualmente. La programación no preventiva es rígida, ya que incluso si un proceso crítico ingresa a la cola lista, el proceso que ejecuta la CPU no se ve afectado.
  6. La programación preventiva es asociativa de costos, ya que tiene que mantener la integridad de los datos compartidos, lo que no es el caso de la programación no preventiva.

Programación preventiva : el procedimiento de necesidad más elevada debería ser el procedimiento que se utiliza actualmente. Además, se da prioridad a la programación preventiva.

Programación no preventiva : cuando un procedimiento entra en la condición de ejecución, la condición de ese procedimiento no se borra del planificador hasta que complete su tiempo de administración.

Gran pregunta Seguid así. Aclamaciones.