Requisito previo: programación de CPU Programación de
prioridad:
en la programación de prioridad, cada proceso tiene una prioridad que es un valor entero asignado.
El entero más pequeño se considera la prioridad más alta y el entero más grande se considera la prioridad más baja. El proceso con la prioridad más alta obtiene la CPU primero.
En sistemas raros, el número más grande también podría tratarse como la prioridad más alta, por lo que todo depende de la implementación.
Si las prioridades se definen internamente, se utilizan algunas cantidades medibles, como los límites de tiempo, los requisitos de memoria, la cantidad de archivos abiertos y la relación entre la ráfaga de E/S promedio y la ráfaga de CPU promedio para calcular las prioridades.
Las prioridades externas se asignan en función de factores como la importancia del proceso, el tipo y la cantidad de fondos que se han pagado por el uso de la computadora, el departamento que patrocina el trabajo, etc.
SJF preventivo y no preventivo es una programación prioritaria donde la prioridad es el tiempo de ejecución más corto del trabajo. En este algoritmo, es posible que los procesos de baja prioridad nunca se ejecuten. Esto se llama hambre.
La solución a este problema del hambre es el envejecimiento. En el envejecimiento, a medida que avanza el tiempo, aumente la prioridad del proceso para que el proceso de menor prioridad se convierta gradualmente en el de mayor prioridad.
- Programación prioritaria preventiva:
a veces es importante ejecutar tareas de mayor prioridad inmediatamente, incluso cuando una tarea se está ejecutando actualmente. Por ejemplo, cuando se recibe una llamada telefónica, la CPU se asigna inmediatamente a esta tarea, incluso si se está utilizando alguna otra aplicación en ese momento. Esto se debe a que la llamada telefónica entrante tiene mayor prioridad que otras tareas. Este es un ejemplo perfecto de programación prioritaria preventiva. Si llega una tarea con mayor prioridad que la tarea actual que se está ejecutando, el control de la CPU se toma de la tarea actual y se le da a la tarea de mayor prioridad. - Programación prioritaria no preventiva: a
diferencia de la programación prioritaria preventiva, incluso si llega una tarea con mayor prioridad, tiene que esperar a que la tarea actual libere la CPU antes de que pueda ejecutarse. A menudo se usa en varios procedimientos de hardware, como temporizadores, etc.
Nota:
Si todos los procesos llegan al mismo tiempo, la programación prioritaria prioritaria y la programación prioritaria no preventiva funcionan de la misma manera.
Ahora hagamos un estudio comparativo de la programación prioritaria preventiva y la programación prioritaria no preventiva.
PROGRAMACIÓN PRIORITARIA PREVENTIVA | PROGRAMACIÓN PRIORITARIA NO PREVENTIVA |
---|---|
Si llega un proceso con mayor prioridad que el proceso que se está ejecutando actualmente, la CPU se anticipa y se le da al proceso de mayor prioridad. | Una vez que los recursos se asignan a un proceso, el proceso los retiene hasta que completa su tiempo de ráfaga, incluso si se agrega a la cola un proceso con mayor prioridad. |
La programación preventiva es más flexible. | La programación no preventiva es rígida. |
El tiempo de espera del proceso de mayor prioridad será siempre cero. | El tiempo de espera del proceso de mayor prioridad no puede ser cero. |
Es más caro y difícil de implementar. También se pierde mucho tiempo en el cambio. | Es más barato de implementar y más rápido ya que se requieren menos cambios. |
Es útil en aplicaciones donde los procesos de alta prioridad no se pueden hacer esperar. | Se puede usar en varias aplicaciones de hardware donde la espera no causará ningún problema grave. |
Ejemplo:
Proceso | Hora de llegada | Tiempo quemado | Prioridad |
---|---|---|---|
P1 | 0 | 8 | 3 |
P2 | 1 | 1 | 1 |
P3 | 2 | 3 | 2 |
P4 | 3 | 2 | 3 |
P5 | 4 | 6 | 4 |
Intentemos resolver este problema usando ambos algoritmos para hacer un estudio comparativo.
1. Programación prioritaria no preventiva:
el diagrama de Gantt se verá así:
Tiempo medio de espera (AWT),
= ((0-0) + (8-1) + (9-2) + (12-3) + (14-4)) / 5 = 33 / 5 = 6.6
Tiempo medio de respuesta (TAT),
= ((8-0) + (9-1) + (12-2) + (14-3) + (20-4)) / 4 = 53 / 5 = 10.6
2. Programación prioritaria preventiva:
el diagrama de Gantt se verá así:
Tiempo medio de espera (AWT),
= ((5-1) + (1-1) + (2-2) + (12-3) + (14-4)) / 5 = 23/5 = 4.6
Tiempo medio de respuesta (TAT),
= ((12-0) + (2-1) + (5-2) + (14-3) + (20-4)) / 5 = 43 / 5 = 8.6
Publicación traducida automáticamente
Artículo escrito por srishtirajani y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA