Revisión final del sistema operativo - clase 6 - interbloqueo (2)

1. Prevención de interbloqueos

Evitar el punto muerto también es una estrategia preventiva por adelantado, que consiste en evitar que el sistema entre en un estado inseguro durante la asignación dinámica de recursos para evitar el punto muerto.

1. Estado de seguridad del sistema

En el método de evitación de interbloqueo, el estado del sistema se divide en estado seguro y estado inseguro.Cuando el sistema está en un estado seguro, se puede evitar el interbloqueo, y cuando el sistema está en un estado inseguro, puede entrar en un estado de interbloqueo

2. Secuencia de seguridad

La llamada secuencia segura significa que si el sistema asigna recursos de acuerdo con esta secuencia, cada proceso puede completarse con éxito. Siempre que se pueda encontrar una secuencia segura , el sistema se encuentra en un estado seguro. Por supuesto, puede haber múltiples secuencias de seguridad.

3. De un estado seguro a un estado inseguro

Si no se puede encontrar una secuencia segura en el sistema después de asignar los recursos, el sistema entra en un estado no seguro. Esto significa que es posible que no todos los procesos puedan ejecutarse sin problemas después.
Si el sistema se encuentra en un estado seguro, no debe producirse interbloqueo. Si el sistema entra en un estado inseguro, puede ocurrir un interbloqueo. (El estado inseguro no significa necesariamente que haya ocurrido un interbloqueo, pero debe estar en un estado inseguro cuando ocurre un interbloqueo). Por lo tanto,
antes de la asignación de recursos, es posible prejuzgar si esta asignación hará que el sistema entre un estado inseguro, para decidir si permitir la asignación de recursos. Esta es también la idea central del "Algoritmo del banquero".

Entonces la pregunta es, ¿cuál es el algoritmo del banquero?

Déjame darte un ejemplo para que lo entiendas fácilmente:
en este momento eres un banquero exitoso con 10 mil millones de fondos en tu mano...

En este momento, hay tres empresas que quieren pedirle un préstamo, a saber, la empresa B, la empresa A y la empresa T.

B: "Hermano, quiero pedir prestado hasta 7 mil millones"

A: "Hermano, quiero pedir prestado hasta 4 mil millones"

T: "Hermano, quiero pedir prestado hasta 5 mil millones"

Hay una regla: si el dinero prestado a una empresa no cumple con los requisitos máximos propuestos por la empresa, entonces el dinero prestado será en vano.

Por supuesto, no desea que su dinero se desperdicie, por lo que debe considerar cómo pedir prestado para asegurarse de que sus 10 mil millones no se desperdicien.

requerimiento máximo ya prestado pedir prestado como máximo
B 70 20 50
A 40 10 30
T 50 30 20

En este momento, todavía tienes 4 mil millones en tu mano...
Analiza la secuencia de seguridad de pedir dinero prestado
En este momento, B quiere pedirte prestados 3 mil millones, ¿te atreves a pedirlos prestados?

Si está de acuerdo: prestó B 3 mil millones, entonces todavía tiene 1 mil millones en su mano, la imagen de arriba está ligeramente modificada, como se muestra a continuación:

requerimiento máximo ya prestado pedir prestado como máximo
B 70 20+30=50 50-30=20
A 40 10 30
T 50 30 20

Si otra empresa propone pedir prestado otros 2 mil millones, entonces estarás muerto, obviamente no puedes pedir prestado y tu dinero se desperdicia, por lo que este dinero no se puede pedir prestado. inseguro

En este momento, A quiere pedirte prestados 2 mil millones, ¿te atreves a pedirlos prestados?
Si está de acuerdo: prestó A 2 mil millones, entonces todavía tiene 2 mil millones en su mano, la imagen de arriba está ligeramente modificada, como se muestra a continuación:

requerimiento máximo ya prestado pedir prestado como máximo
B 70 20 50
A 40 10+20=30 30-20=10
T 50 30 20

A continuación, puede prestar todos los 2 mil millones a la empresa T. Cuando devuelva todo el dinero, tendrá 5 mil millones en su mano y luego le prestará el dinero a la Compañía B. Cuando devuelva todo el dinero, tendrá 7 mil millones en la mano, y finalmente se los prestará a la empresa A. De esta forma recuperas todo tu dinero.

Entonces esta secuencia de préstamo (secuencia segura): T->B->A
verifica esta secuencia por sí misma de acuerdo con las ideas anteriores: A->T->B

4. Algoritmo del banquero

El algoritmo del banquero fue diseñado por el académico holandés Dijkstra para el sistema bancario para garantizar que cuando el banco emita préstamos en efectivo, no dejará de satisfacer las necesidades de todos los clientes. Este algoritmo se usó más tarde en los sistemas operativos para evitar interbloqueos.
***Idea central: ***Cuando un proceso realiza una aplicación de recursos, primero juzgue si la asignación hará que el sistema entre en un estado inseguro. Si entrará en un estado inseguro, la solicitud no se otorgará temporalmente y el proceso se bloqueará y esperará primero.
1) Estructura de datos:
① Vector de recursos disponible Disponible. Una matriz unidimensional con una longitud de my Disponible indica cuántos
recursos quedan disponibles.
②Matriz de demanda máxima Máx. Indica el número máximo de recursos requeridos por cada proceso, matriz nxm.
③ Matriz de asignación Asignación. Indica cuántos recursos se han asignado a cada proceso, matriz nxm
④ matriz de demanda Necesidad. La matriz indica cuántos recursos necesita cada proceso como máximo,
Max -Allocation=Need
⑤El vector de solicitud del proceso P. Use una matriz de un bit con una longitud de m para indicar la cantidad de varios recursos que el proceso ha aplicado durante este tiempo.

2) Pasos del algoritmo:
Sea Request el vector de solicitud del proceso Pi. Si Requesti[j]=K, significa que el proceso Pi necesita K recursos de tipo Rj. Cuando Pi envía una solicitud de recursos, el sistema verifica de acuerdo con los siguientes pasos:
①Si Requesti[j]≤Need[i,j] gate, vaya al paso ②; de lo contrario, se considera un error, debido a la cantidad de recursos que necesita ha superado lo anunciado como valor máximo.
②Si Requesti[j]≤Available[j], vaya al paso ③; de lo contrario, significa que no hay suficientes recursos Pi para esperar.
③El sistema asigna tentativamente recursos al proceso Pi y modifica el valor en la siguiente estructura de datos
Disponible[j]=Disponible[j]-Solicitud[j];
Asignación[i,j]=Asignación[i,j]+Solicitud[ j];
Need[ij]=Need[i,j]-Requesti[j];
④El sistema ejecuta el algoritmo de seguridad para verificar si el sistema está en un estado seguro después de la asignación de recursos. Si es seguro, el recurso se asigna formalmente al proceso Pi para completar la asignación; de lo contrario, la asignación tentativa se invalida
, se restaura el estado de asignación del recurso original y el proceso Pi espera.

3) Algoritmo de seguridad:
El algoritmo de seguridad que ejecuta el sistema se puede describir de la siguiente manera:
①Establece dos vectores:
a) Vector de trabajo Trabajo, que indica la cantidad de recursos diversos que el sistema puede proporcionar al proceso para que continúe ejecutándose, y contiene m Cuando el elemento comienza a ejecutar el algoritmo de seguridad, Work=Available
b.Finish: Indica si el sistema tiene suficientes recursos asignados al proceso para que se complete. Al principio, haga Finish[i]=false; cuando haya suficientes recursos asignados al proceso, haga Finish[i]=true.
②Encuentre un proceso del conjunto de procesos que pueda satisfacer las siguientes condiciones
a.Terminar[i]=falso,
b.Necesitar[i,j]≤Trabajar[j],
si lo encuentra, ejecute el paso ③, de lo contrario, ejecute el paso ④.
③ Después de que el proceso Pi obtenga recursos, puede ejecutarse sin problemas hasta que se complete y libere los recursos asignados, por lo que debe ejecutarse:
Trabajo[j]=Trabajo[j]+Asignación[i,j];
Finalizar[i ]= verdadero;
regrese al paso ②.
④ Si se cumple Finish[i]=true de todos los procesos, significa que el sistema está en un estado seguro; de lo contrario, el sistema está en un estado inseguro.
4) Ejemplos de algoritmos de seguridad
Algoritmo: Algoritmo del banquero (proceso de formulación de preguntas)

Pregunta:
inserte la descripción de la imagen aquí
Análisis:
Suponga 0, 6, 2, no es seguro de la siguiente manera:
inserte la descripción de la imagen aquí
Suponga 1, 1, 1, no es seguro de la siguiente manera:
inserte la descripción de la imagen aquí
Suponga 0, 4, 7, no es seguro de la siguiente manera:
inserte la descripción de la imagen aquí
Suponga 1, 4 , 0, es seguro de la siguiente manera:
inserte la descripción de la imagen aquí

2. Detección y liberación de puntos muertos

Si no se adoptan medidas de prevención de interbloqueo ni de evitación de interbloqueo en el sistema, es muy probable que se produzca un interbloqueo en el sistema. En este caso, el sistema debe proporcionar dos algoritmos:
1) Algoritmo de detección de interbloqueo: se utiliza para detectar el estado del sistema y se ha determinado si se ha producido un interbloqueo en el sistema.
Para poder detectar interbloqueos, el sistema debe:
①Usar algún tipo de estructura de datos para guardar la solicitud de recursos y la información de asignación.
②Proporcione un algoritmo que utilice la información anterior para detectar si el sistema entra en un estado de interbloqueo.
Diagrama de asignación de recursos
Dos tipos de nodos: nodo de proceso y nodo de recurso (puede haber varios nodos de recurso)
Dos tipos de aristas:
nodo de proceso -> nodo de recurso: solicita un tipo de recurso en nombre de un nodo de proceso.
Nodo de recurso -> nodo de proceso: Significa que este tipo de recurso ha sido asignado al nodo de proceso apuntado.
Teoría de punto muerto: si el gráfico de asignación de recursos del sistema es irreducible en un momento determinado, entonces el sistema está en punto muerto en ese momento.
inserte la descripción de la imagen aquí
2) Algoritmo de liberación de punto muerto: cuando se usa este algoritmo, el algoritmo puede liberar el sistema del punto muerto. Una vez que se detecta un interbloqueo, el interbloqueo debe resolverse inmediatamente.
Suplemento: No todos los procesos en el sistema están en un estado de interbloqueo. Después de que el gráfico se asigna con el algoritmo de detección de interbloqueo, los procesos que todavía están conectados al borde son procesos de interbloqueo.
El método principal para eliminar el punto muerto:
① método de privación de recursos.
Prive y asigne recursos ocupados por algunos bloqueos de procesos en interbloqueo a otros procesos. Pero debería evitar que el proceso suspendido se quede sin recursos durante mucho tiempo.
② Método del proceso de revocación. Revocar por la fuerza algunos procesos de interbloqueo o todos los procesos de interbloqueo es simple y de mala educación, pero el precio es relativamente alto.
③ Método de reversión del proceso. Retroceda uno o más procesos interbloqueados lo suficiente para evitar el interbloqueo. Esto requiere registrar los mensajes históricos del proceso y establecer un punto de restauración.

Hay otro tipo de pregunta:
inserte la descripción de la imagen aquí
Según tengo entendido: no puede dejar que los dos funcionen juntos, uno por uno, de lo contrario, no sabe si las cosas generadas se usan en otro lugar, y cuál usará causará un punto muerto.
¡Practica una vez más! ! !

Ejemplo: hay tres procesos simultáneos en un sistema que necesitan cuatro recursos del mismo tipo, entonces los recursos mínimos que definitivamente no causarán interbloqueo en este sistema son (B) A.9
B.10 C.11 D.12
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_52030647/article/details/130753390
Recomendado
Clasificación