(Notas de estudio - Gestión de procesos) Programación de procesos

Los procesos esperan poder ocupar la CPU para el trabajo, por lo que esto implica el cambio de contexto del proceso mencionado anteriormente.

Una vez que el sistema operativo cambia el proceso al estado de ejecución, significa que el proceso está ocupando la CPU para su ejecución, pero cuando el sistema operativo cambia el proceso a otro estado, no se puede ejecutar en la CPU, por lo que el sistema operativo elegirá el siguiente proceso en ejecución.

La función de seleccionar un proceso para ejecutar se realiza en el sistema operativo, generalmente llamado planificador .


Horario de programación

En el ciclo de vida de un proceso, cuando el proceso cambia de un estado de ejecución a otro, en realidad se activa una programación.

Por ejemplo:

  • Desde estado listo -> estado en ejecución : cuando se crea un proceso, ingresará a la cola de listos y el sistema operativo seleccionará un proceso de la cola de listos para ejecutar
  • Del estado de ejecución -> estado de bloqueo : cuando un proceso es bloqueado por un evento de E/S, el sistema operativo debe elegir otro proceso para ejecutar
  • Desde el estado en ejecución -> estado final : cuando el proceso sale, el sistema operativo tiene que seleccionar otro proceso de la cola lista para ejecutar

Porque, cuando estos estados cambian, el sistema operativo debe considerar si permite que el nuevo proceso se ejecute en la CPU o si deja que el proceso actual salga de la CPU y cambie a otro proceso para ejecutarse.

Además, si el reloj del hardware proporciona interrupciones periódicas de cierta frecuencia, los algoritmos de programación se pueden dividir en dos categorías según cómo manejen las interrupciones del reloj:

  • El algoritmo de programación no preventiva elige un proceso y luego deja que el proceso se ejecute hasta que se bloquee, o hasta que el proceso salga, no llamará a otro proceso, es decir, no le importará la interrupción del reloj.
  • El algoritmo de programación preventiva elige un proceso, luego permite ese proceso solo por un cierto período de tiempo, si al final de ese período de tiempo, el proceso aún se está ejecutando, se suspende y luego el programador elige otro proceso de los listos. cola Este proceso de programación preventiva requiere una interrupción del reloj al final del intervalo de tiempo para devolver el control de la CPU al programador para la programación, es decir, el mecanismo de división de tiempo.

Principio de programación

Principio 1 : si el programa en ejecución tiene una solicitud de evento de E/S, el uso de la CPU debe ser muy bajo, porque el proceso está bloqueado esperando que regresen los datos del disco duro. Tal proceso está destinado a causar una inactividad repentina de la CPU. Por lo tanto, para mejorar la utilización de la CPU, el programador debe seleccionar un proceso de la cola de procesos listos para ejecutar cuando la CPU esté inactiva debido al envío de eventos de E/S .

Principio 2 : algunos programas tardan mucho tiempo en ejecutar una determinada tarea. Si este programa sigue ocupando la CPU, reducirá el rendimiento del sistema (la cantidad de procesos completados por unidad de CPU). Por lo tanto, para mejorar el rendimiento del sistema, el programador debe sopesar la cantidad de procesos de tareas largas y cortas que se completan en ejecución .

Principio 3 : El proceso desde el principio hasta el final del proceso en realidad incluye dos tiempos, a saber, el tiempo de ejecución del proceso y el tiempo de espera del proceso. La suma de estos dos tiempos se denomina tiempo de respuesta. Cuanto más corto sea el tiempo de respuesta del proceso, mejor. Si el proceso espera mucho tiempo y se ejecuta durante poco tiempo, el tiempo de respuesta será muy largo. Esto no es lo que queremos, y el programador debe evitar esta situación.

Principio 4 : El proceso en la cola de procesos listos no puede esperar demasiado Por supuesto, se espera que el tiempo de espera sea lo más corto posible, para que el proceso pueda ejecutarse en la CPU más rápido. Por lo tanto, el tiempo de espera del proceso en la cola de procesos listos también es un principio que el planificador debe tener en cuenta .

Principio 5 : Para aplicaciones altamente interactivas como el mouse y el teclado, ciertamente esperamos que su tiempo de respuesta sea lo más rápido posible, de lo contrario, afectará la experiencia del usuario. Por lo tanto, para aplicaciones más interactivas, el tiempo de respuesta también es un principio que el planificador debe tener en cuenta .

 Para los cinco principios de programación anteriores, se resumen de la siguiente manera:

  • Utilización de la CPU : el programador debe asegurarse de que la CPU esté siempre en un estado de prisa, lo que puede mejorar la utilización de la CPU.
  • Rendimiento del sistema : el rendimiento representa la cantidad de procesos completados por la CPU por unidad de tiempo. Los procesos a largo plazo ocuparán más recursos de la CPU, lo que reducirá el rendimiento. Por el contrario, los procesos de trabajos cortos aumentarán el rendimiento del sistema.
  • Tiempo de respuesta : El tiempo de respuesta es la suma del proceso en ejecución + el tiempo de bloqueo + el tiempo de espera. Cuanto menor sea el tiempo de respuesta de un proceso, mejor
  • Tiempo de espera : este tiempo de espera no es el tiempo en el estado de bloqueo, sino el tiempo que el proceso está en la cola de espera. Cuanto mayor sea el tiempo de espera, más insatisfecho será el usuario.
  • Tiempo de respuesta : el tiempo que tarda el usuario en enviar una solicitud al sistema por primera vez para generar una respuesta.En un sistema interactivo, el tiempo de respuesta es el criterio principal para medir la calidad de un algoritmo de programación.

Algoritmo de programación

Diferentes algoritmos de programación son aplicables a diferentes escenarios.

Algoritmos de programación comunes en sistemas de CPU de un solo núcleo:
 

Algoritmo de programación por orden de llegada

El algoritmo de programación más simple es el algoritmo no preventivo por orden de llegada (FCFS) :

 Cada vez que el proceso que ingresa primero a la cola se selecciona de la cola de procesos listos y luego se ejecuta hasta que el proceso sale o se bloquea, el primer proceso continuará seleccionándose de la cola y luego se ejecutará .

Esto parece razonable, pero cuando un trabajo se ejecuta primero, el tiempo de espera para los siguientes trabajos cortos será muy largo, lo que no es propicio para los trabajos cortos.

FCFS es bueno para trabajos largos y es adecuado para sistemas con trabajos de uso intensivo de CPU, pero no para trabajos de uso intensivo de E/S.

Algoritmo de programación del trabajo más corto primero

El algoritmo de programación Shortest Job First (SJF) , que dará prioridad al proceso con el menor tiempo de ejecución , lo que ayuda a mejorar el rendimiento del sistema.

 Obviamente, esto no es bueno para trabajos largos, y es fácil causar un fenómeno extremo.

Por ejemplo, si un trabajo largo está esperando para ejecutarse en la cola de trabajos listos y hay muchos trabajos cortos en la cola de trabajos listos, el trabajo largo se retrasará continuamente y el tiempo de respuesta será más largo, de modo que el trabajo largo no se ejecutará durante mucho tiempo.

Algoritmo de programación de prioridad de alta relación de respuesta

Tanto el anterior [Algoritmo de programación por orden de llegada] como el [Algoritmo de programación de trabajo más corto primero] no equilibraban bien los trabajos cortos y largos.

Luego, el algoritmo de programación de prioridad de alta tasa de respuesta (HRRN) sopesa principalmente los trabajos cortos y los trabajos largos.

Cada vez que se programa un proceso, primero se calcula la [prioridad de la tasa de respuesta] y luego se pone en funcionamiento el proceso con la [prioridad de la tasa de respuesta] más alta. La fórmula de cálculo de [prioridad de la tasa de respuesta] es:

De la fórmula anterior se puede encontrar que:

  •  Si el [tiempo de espera] de dos procesos es el mismo, cuanto menor sea el [tiempo de servicio requerido], mayor será la [tasa de respuesta], de modo que el proceso con trabajos cortos sea fácil de seleccionar para ejecutar
  • Si el [tiempo de servicio requerido] de dos procesos es el mismo, cuanto mayor sea el [tiempo de espera], mayor será la [tasa de respuesta], lo que tiene en cuenta el proceso de trabajos largos, porque la tasa de respuesta del proceso puede aumentar con el aumento del tiempo de espera, cuando su tiempo de espera es lo suficientemente largo, su relación de respuesta puede elevarse a un nivel alto, obteniendo así la oportunidad de ejecutar;

Sin embargo, se desconoce el tiempo de servicio requerido por el proceso, por lo que el algoritmo de programación de prioridad de alta tasa de respuesta es un algoritmo de programación ideal, que no se puede realizar en la realidad.

Algoritmo de programación por turnos de intervalos de tiempo

El algoritmo más antiguo, más simple, más justo y más difundido es el algoritmo de programación de intervalos de tiempo por turnos (RR).

 A cada proceso se le asigna un período de tiempo, denominado intervalo de tiempo, que permite que el proceso se ejecute durante ese período de tiempo.

  • Si se agota el intervalo de tiempo y el proceso aún se está ejecutando, el proceso se liberará de la CPU y la CPU se asignará a otro proceso.
  • Si el proceso se bloquea o finaliza antes de que finalice el intervalo de tiempo, la CPU cambia inmediatamente

Además, la duración del intervalo de tiempo es un punto muy crítico:

  • Si el intervalo de tiempo se establece demasiado corto, provocará demasiados cambios de contexto del proceso, lo que reducirá la eficiencia de la CPU.
  • Si se establece demasiado tiempo, puede causar un tiempo de respuesta más largo para procesos de trabajo cortos

En términos generales, establecer el intervalo de tiempo en 20ms~50ms suele ser un valor de compromiso razonable

Algoritmo de programación de máxima prioridad

El anterior [Algoritmo de rotación de intervalos de tiempo] hizo una suposición, es decir, hacer que todos los procesos fueran igualmente importantes y que el tiempo de ejecución de todos fuera el mismo.

Sin embargo, para los sistemas informáticos de los usuarios, esperan que se priorice la programación, es decir, esperan que el planificador pueda seleccionar el proceso de mayor prioridad de cola lista para ejecutarse, que se denomina algoritmo de máxima prioridad (HPF) .

La prioridad del proceso se puede dividir en prioridad estática y prioridad dinámica:

  • Prioridad estática: cuando se crea el proceso, se ha determinado, y luego la prioridad de todo el tiempo de ejecución no cambiará
  • Prioridad dinámica: Ajuste la prioridad de acuerdo con el cambio dinámico del proceso. Por ejemplo, si aumenta el tiempo de ejecución del proceso, se reducirá su prioridad. Si aumenta el tiempo de espera del proceso (el tiempo de espera de la cola de listos), su prioridad disminuirá. incrementarse, es decir, como Aumentar la prioridad de los procesos de espera en el tiempo

El algoritmo también tiene dos métodos para manejar prioridades, no preventivo y preventivo:

  • No preventivo: cuando aparece un proceso de alta prioridad en la cola de procesos listos, el proceso actual termina de ejecutarse y luego se selecciona el proceso de alta prioridad.
  • Preventivo: cuando un proceso con alta prioridad aparece en la cola de procesos listos, el proceso actual se suspende y el proceso con alta prioridad se programa para ejecutarse.

Pero todavía hay desventajas, que pueden causar que los procesos de baja prioridad nunca se ejecuten.

Algoritmo de programación de cola de retroalimentación multinivel

El algoritmo de programación de la cola de retroalimentación multinivel (MFQ) es la síntesis y el desarrollo del [algoritmo Round Robin de intervalo de tiempo] y el [algoritmo de máxima prioridad].

  •  [Multinivel] significa que hay múltiples colas, y la prioridad de cada cola es de mayor a menor, y cuanto mayor sea la prioridad, menor será el intervalo de tiempo
  •  [Comentarios] Significa que si un nuevo proceso se une a una cola de alta prioridad, detenga inmediatamente el proceso que se está ejecutando actualmente y cambie a la cola de alta prioridad.

 Manera de trabajar:

  • Establezca múltiples colas y asigne a cada cola una prioridad diferente. La prioridad de cada cola es de mayor a menor . Al mismo tiempo, cuanto mayor sea la prioridad, menor será el intervalo de tiempo.
  • El nuevo proceso se colocará al final de la cola de primer nivel y se pondrá en cola para su programación de acuerdo con el principio de orden de llegada. Si no se completa el intervalo de tiempo estipulado en la cola de primer nivel, se ser transferido a la cola de segundo nivel al final de la , y así sucesivamente, hasta la finalización de la
  • Cuando la cola de mayor prioridad está vacía, los procesos de la cola de menor prioridad están programados para ejecutarse. Si un nuevo proceso ingresa a una cola de mayor prioridad mientras el proceso se está ejecutando, detenga el proceso que se está ejecutando actualmente y muévalo al final de la cola original, y luego deje que se ejecute el proceso de mayor prioridad.

Se puede encontrar que los trabajos cortos pueden procesarse rápidamente en la cola de primer nivel. Para trabajos largos, si no se pueden procesar en la cola de primer nivel, se pueden mover a la siguiente cola para esperar su ejecución. Aunque el tiempo de espera se hace más largo, el tiempo de ejecución también se vuelve más largo, por lo que el algoritmo tarda mucho y trabajos cortos en consideración Tener un mejor tiempo de respuesta .

Supongo que te gusta

Origin blog.csdn.net/qq_48626761/article/details/132135305
Recomendado
Clasificación