Principios del sistema operativo Capítulo III Programación del procesador y punto muerto (2)

3.6 Prevención de punto muerto

El método para evitar un punto muerto es destruir una o varias de las cuatro condiciones necesarias para que el punto muerto evite el punto muerto. Debido a que la condición mutuamente excluyente es necesaria para un dispositivo no compartido, no solo no se puede cambiar, sino que también se debe garantizar, por lo que es principalmente para destruir las últimas tres condiciones que causan un punto muerto.

3.6.1 Romper la condición de "solicitar y retener"

Para destruir la condición de "solicitar y retener", el sistema debe asegurarse de que cuando un proceso solicite recursos, no pueda retener recursos no preferentes. Esta garantía se puede lograr a través de los siguientes dos protocolos diferentes:

1. El acuerdo estipula que todos los procesos deben solicitar todos los recursos que necesitan en todo el proceso de operación al mismo tiempo antes de comenzar a ejecutarse.
2. Este protocolo es una mejora del primer protocolo, que permite que un proceso comience a ejecutarse solo después de obtener los recursos necesarios en la etapa inicial de operación.

3.6.2 Socavar la condición "ineludible"

Para destruir la condición "no preferente", el acuerdo estipula que cuando un proceso que ha mantenido ciertos recursos no preferentes realiza una nueva solicitud de recursos y no puede satisfacerse, debe liberar todos los recursos que se han retenido, y será necesario más adelante. Luego vuelva a aplicar. Esto significa que los recursos que ya están ocupados por el proceso se liberarán temporalmente o se reemplazarán, destruyendo así la condición "no preventiva".

3.6.3 Romper la condición de "ciclo de espera"

Una forma de garantizar que no se cumpla la condición de "espera circular" es ordenar linealmente todos los tipos de recursos en el sistema y asignar diferentes números de serie.

3.7 Evitar el punto muerto

Evitar el punto muerto también es una estrategia para prevenir por adelantado, pero no es tomar algún tipo de medidas restrictivas por adelantado para destruir las condiciones necesarias para generar un punto muerto, sino evitar que el sistema entre en un estado inseguro durante la asignación dinámica de recursos para evitar el punto muerto. . La limitación impuesta por este método es débil y puede obtener un mejor rendimiento del sistema. Actualmente, este método se usa comúnmente para evitar puntos muertos.

3.7.1 Estado de seguridad del sistema

En el método de evitar el punto muerto, el estado del sistema se divide en un estado seguro y un estado inseguro. Cuando el sistema está en un estado seguro, se pueden evitar los puntos muertos. Por el contrario, cuando el sistema está en un estado inseguro, puede entrar en un estado de punto muerto.

  1. Estado de seguridad
    En este método, el proceso puede solicitar recursos dinámicamente, pero antes de que el sistema asigne recursos, primero debe calcular la seguridad de esta asignación de recursos.
  2. Ejemplo de estado seguro
    Suponga que hay tres procesos P1, P2 y P3 en el sistema, con un total de 12 unidades de cinta. El proceso P1 requiere un total de 10 unidades de cinta, y P2 y P3 requieren 4 y 9 unidades, respectivamente. Suponga que en el momento T0, los procesos P1, P2 y P3 han obtenido 5, 2 y 2 unidades de cinta, respectivamente, y todavía hay 3 inactivos sin asignar, como se muestra en la siguiente tabla:
    Inserte la descripción de la imagen aquí
  3. Transición de un estado seguro a un estado inseguro
    Si los recursos no se asignan de acuerdo con una secuencia segura, el sistema puede entrar en un estado inseguro desde un estado seguro.

3.7.2 Uso del algoritmo bancario para evitar un punto muerto

El algoritmo más representativo para evitar el punto muerto es el algoritmo bancario de Dijkstra. Este nombre se da porque el algoritmo fue diseñado originalmente para el sistema bancario para garantizar que cuando el banco emita préstamos en efectivo, no suceda que no pueda satisfacer las necesidades de todos los clientes. También se puede usar en el sistema operativo para evitar puntos muertos.

1. La estructura de datos
en el algoritmo del banco Para realizar el algoritmo del banco, se deben establecer cuatro estructuras de datos en el sistema para describir los recursos disponibles en el sistema, los requisitos máximos de recursos de todos los procesos y la asignación de recursos en el sistema , Y cuántos recursos se necesitan para todos los procesos.
(1) Vector de recursos disponible Disponible.
(2) Matriz de demanda máxima Máx.
(3) Matriz de asignación.
(4) Necesidad de matriz Necesidad.

2. Algoritmo
bancario Sea Requesti el vector de solicitud del proceso Pi. Si Request i [j] = K, significa que el proceso Pi necesita recursos de tipo K Rj. Cuando Pi envía una solicitud de recursos, el sistema verifica de acuerdo con los siguientes pasos:
(1) Si la Solicitud i [j] ≤Necesita [i, j], vaya al paso (2); de lo contrario, se considera un error debido a la cantidad de recursos que necesita Ha excedido su máximo declarado.
(2) Si Solicitud i [j] ≤ Disponible [j], vaya al paso (3); de lo contrario, significa que no hay suficientes recursos y Pi debe esperar.
(3) El sistema intenta asignar recursos al proceso Pi y modificar los valores en la siguiente estructura de datos: Disponible [j] = Disponible [j] -Request i [j]; Asignación [i, j] = Asignación [i, j ] + Solicitud i [j]; Necesidad [i, j] = Necesidad [i, j] -Solicitar i [j];
(4) El sistema ejecuta un algoritmo de seguridad para verificar si el sistema está en un estado seguro después de esta asignación de recursos. Si es seguro, los recursos se asignarán formalmente al proceso Pi para completar la asignación; de lo contrario, la asignación de prueba se invalidará y el estado de asignación de recursos original se restaurará para permitir que el proceso Pi espere.

3. Algoritmo de
seguridad El algoritmo de seguridad ejecutado por el sistema se puede describir de la siguiente manera:
(1) Establezca dos vectores: vector Vector de trabajo, que representa el número de varios tipos de recursos que el sistema puede proporcionar al proceso para continuar ejecutándose, que contiene m Elemento, al comienzo de la ejecución del algoritmo de seguridad, Trabajo: = Disponible; ② Finalizar: Indica si el sistema tiene suficientes recursos asignados al proceso para completarlo. Al principio, haga Finish [i]: = false; cuando haya suficientes recursos asignados al proceso, deje Finish [i]: = true.
(2) Encuentre un proceso que cumpla con las siguientes condiciones del conjunto de procesos: ① Finish [i] = false; ② Need [i, j] ≤Work [j]; si se encuentra, vaya al paso (3), de lo contrario, vaya a Paso (4).
(3) Después de que el proceso Pi obtiene recursos, puede ejecutarse con éxito hasta su finalización, y los recursos asignados a él se liberan, por lo que debe ejecutarse: Trabajo [j] = Trabajo [j] + Asignación [i, j];
    Finalizar [i ] = verdadero;  
    vaya al paso 2;
(4) Si Finalizar [i] = verdadero de todos los procesos está satisfecho, significa que el sistema está en un estado seguro; de lo contrario, el sistema está en un estado inseguro.

3.8 Detección y liberación de punto muerto

Si en el sistema no se proporcionan medidas de prevención de punto muerto ni algoritmos de evitación de punto muerto, es probable que el sistema se encuentre en punto muerto. En este caso, el sistema debe proporcionar dos algoritmos: ① Algoritmo de detección de punto muerto. Este método se utiliza para detectar el estado del sistema para determinar si se ha producido un punto muerto en el sistema. ② Algoritmo de liberación de punto muerto. Cuando se determina que se ha producido un punto muerto en el sistema, el algoritmo se puede usar para liberar el sistema del estado de punto muerto.

3.8.1 Detección de punto muerto

Para detectar si se ha producido un punto muerto en el sistema, el sistema debe: ① guardar la solicitud y la información de asignación sobre los recursos; ② proporcionar un algoritmo que use esta información para detectar si el sistema ha entrado en un estado de punto muerto.
1. El
punto muerto del sistema del Gráfico de asignación de recursos (Gráfico de asignación de recursos) se puede describir utilizando el gráfico de asignación de recursos.

El gráfico es un doble G = (N, E) compuesto por un conjunto de nodos N y un conjunto de bordes E. Tiene las siguientes definiciones y restricciones:
(1) Divide N en dos sub mutuamente excluyentes Conjunto, es decir, un conjunto de nodos de proceso P = {P1, P2, ..., Pn} y un conjunto de nodos de recursos R = {R1, R2, ..., Rn}, N = P∪R. En el ejemplo que se muestra en la Figura 3-19, P = {P1, P2}, R = {R1, R2}, N = {R1, R2} ∪ {P1, P2}.
(2) Cualquier borde e ∈ E en E está conectado a un nodo en P y un nodo en R, e = {Pi, Rj} es el borde de solicitud de recursos, y el proceso Pi apunta al recurso Rj, Significa que el proceso Pi solicita una unidad de recursos Rj. E = {Rj, Pi} es el lado de asignación de recursos. El recurso Rj apunta al proceso Pi, lo que significa que una unidad de recurso Rj se asigna al proceso Pi. La Figura 3-19 muestra dos bordes de solicitud y dos bordes de distribución, a saber, E = {(P1, R2), (R2, P2), (P2, R1), (R1, P1)}.

Inserte la descripción de la imagen aquí
2. Punto muerto

Podemos usar el método para simplificar el gráfico de asignación de recursos (Figura 3-19) para detectar si el sistema está en el estado de punto muerto cuando está en el estado S. El método simplificado es el siguiente:
(1) En el diagrama de asignación de recursos, encuentre un nodo de proceso Pi que no sea bloqueante ni independiente. En una situación sin problemas, Pi puede obtener los recursos necesarios y continuar ejecutándose hasta que se complete la operación, luego liberar todos los recursos que posee, lo que equivale a eliminar el lado de solicitud y el lado de asignación de Pi, convirtiéndolo en un nodo aislado. En la Figura 3-20 (a), los dos bordes de distribución y un borde de solicitud de P1 se eliminan para formar la situación que se muestra en la Figura (b).

Inserte la descripción de la imagen aquí

(2) Después de que P1 libera recursos, P2 puede obtener recursos y continuar ejecutándose, hasta que P2 complete y libere todos los recursos que contiene, formando la situación que se muestra en la Figura ©, es decir, dos bordes de solicitud y una asignación de P2 Desaparecer
(3) Después de una serie de simplificaciones, si se pueden eliminar todos los bordes del gráfico para que todos los nodos del proceso se conviertan en nodos aislados, se puede decir que el gráfico está completamente simplificado; si el gráfico no se puede hacer a través de ningún proceso Completamente simplificado, se dice que el gráfico no puede ser completamente simplificado.

3. Estructura de datos en la detección de punto muerto

La estructura de datos en la detección de punto muerto es similar a la estructura de datos en el algoritmo del banquero:
(1) Vector de recursos disponibles Disponible, que representa el número disponible de cada tipo de recursos en m tipos de recursos.
(2) Escriba el proceso que no ocupa recursos (asignación de vectores = 0) en la tabla L, es decir, Li∪L.
(3) Encuentre un proceso con Requesti≤Work del conjunto de procesos y haga lo siguiente: ① Simplifique su diagrama de asignación de recursos, libere recursos y aumente el vector de trabajo Work = Work + Allocation i. ② Escríbelo en la lista L.
(4) Si no se pueden registrar todos los procesos en la tabla L, indica que el diagrama de asignación de recursos del estado del sistema S no se puede simplificar por completo. Por lo tanto, el estado del sistema estará bloqueado.

3.8.2 Liberación del punto muerto

1. El método para terminar el proceso.

  1. Terminar todos los procesos de punto muerto
    Este es el método más simple, es decir, para terminar todos los procesos de punto muerto, el punto muerto se levantará naturalmente, pero el precio pagado puede ser muy alto. Debido a que algunos de estos procesos pueden haber estado ejecutándose durante mucho tiempo y están llegando al final, una vez que finalizan, se puede decir que están "perdidos" y que tienen que comenzar de nuevo. Puede haber otros costos, y no los enumeraré aquí.
  2. Terminar procesos uno por uno Un
    método ligeramente más suave es terminar los procesos uno por uno en un cierto orden hasta que haya suficientes recursos para romper el ciclo y esperar a liberar el sistema del punto muerto. Pero el costo de este método también puede ser significativo. Debido a que cada vez que finaliza un proceso, debe usar el algoritmo de detección de punto muerto para determinar si se ha liberado el punto muerto del sistema; de lo contrario, debe terminar otro proceso. Además, al adoptar la estrategia de terminar el proceso uno por uno, también implica qué estrategia se debe adoptar para seleccionar un proceso que se terminará. La base más importante para elegir una estrategia es que el "costo es el más pequeño" para la eliminación del punto muerto. Pero, ¿cuál es el "menor costo"? Es difícil tener una medida precisa.

2. Algoritmo de contacto de punto muerto con costo mínimo
Inserte la descripción de la imagen aquí

123 artículos originales publicados · Me gusta 91 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/weixin_43092232/article/details/105541023
Recomendado
Clasificación