2. Grafo de relación recursos-procesos
Consiste en la representación gráfica de los recursos asignados a los
procesos y los recursos que dichos procesos requieren para finalizar su
ejecución. Esta técnica se basa en recorrer el grafo yendo de un nodo a
otro, por lo que si se consigue volver al nodo de partida estaremos en
un recorrido circular. Para que este tipo de error sea detectado usamos
algoritmos de detección, se lanzan cuando se solicita un recurso
ocupado, es decir, hay una nueva arista dentro de nuestro grafo y
debemos comprobar que no da lugar a un recorrido cíclico.
3. Matrices de relación recursos-procesos
Consiste en la representación
matricial de los recursos
asignados a los procesos y los
recursos que dichos procesos
requieren para finalizar su
ejecución. Se distinguen dos
tipos, el método mediante
matrices binarias de
relación, y el método de
detección matricial:
4. Matrices binarias de relación
• Una matriz binaria de relación es aquella que representa una
relación R entre dos conjuntos, en la cual el primero de estos dos
tiene múltiples asignaciones a elementos del segundo.
• El método consiste en, aplicando matrices binarias de relación,
utilizar el cierre transitivo para determinar si algún proceso está
relacionado consigo mismo a través de otros, señalando así la
existencia de ciclos.
5. El procedimiento sería:
• 1.- Formar la matriz de espera (W: P->R):
Los procesos P están a la espera de
recursos R.
• 2.- Formar la matriz de asignación (A: R->P):
Los recursos R están asignados a procesos
P.
• 3.- Formar la matriz de procesos a la espera
de procesos (T: WxA): Producto cartesiano
de ambas matrices.
• 4.- Hallar el cierre transitivo de la matriz T:
Que se puede obtener, por ejemplo,
aplicando el Algoritmo de Warshall (algoritmo
de análisis sobre grafos para encontrar el
camino mínimo entre todos los pares de
vértices en una única ejecución).
Donde n es la dimensión de la matriz T
6. • 5.- Si hay procesos que tengan un 1 en la diagonal
principal, forman parte de algún ciclo.
• Se trata de un método fácil de implementar, ya que solo
se realizan operaciones con matrices y bucles, algo muy
sencillo para una máquina. Sim embargo, tiene dos
inconvenientes:
• El número de operaciones a realizar es muy alto teniendo
en cuenta el tamaño que pueden alcanzar las matrices de
recursos
• Solo se puede usar cuando solo existe una instancia de
cada recurso.
7. Resolución de interbloqueo
Tras la detección de un interbloqueo, se pueden aplicar algunas de las
siguientes estrategias para resolverlo:
Eliminación:
El sistema operativo selecciona a uno de los procesos que
forma parte del interbloqueo y elimina el ciclo acabando
con la ejecución de dicho proceso, si no es suficiente se
eliminarán procesos hasta que se rompa el ciclo.
La selección del proceso se realiza en base a un cierto
criterio, por ejemplo, aquel proceso que lleve menos
tiempo en ejecución o aquel que sea más voraz
consumiendo recursos. Sin embargo, de una manera u
otra el trabajo realizado por el proceso se pierde, algo que
en algunos casos resulta inadmisible, como en sistemas
en tiempo real. Aunque parezca una medida drástica, es
la empleada en sistemas operativos convencionales..
8. Apropiación temporal:
Se retira la asignación de un recurso a un proceso (durante el tiempo necesario) para deshacer el
interbloqueo (hemos de asegurarnos de que el proceso no se desbloquea al romperse el
interbloqueo).
Por ejemplo, supongamos que el recurso es una impresora: podríamos retirarle la asignación a un
proceso P1 cuando este terminase de imprimir una página, asignarle la impresora a otro proceso P2
y volver a asignársela a P1 cuando P2 haya terminado su ejecución.
El problema es que este método solo es posible dependiendo de la naturaleza del proceso. Con
frecuencia es imposible recuperarse de esta manera ya que los recursos no pueden ser apropiados.
9. Puntos de conformidad,
sincronismo o checkpoints:
Consiste en tomar una imagen del estado
del proceso, ya sea periódicamente o a
instancia del propio proceso, de manera
que si se produce un interbloqueo se vuelve
a un estado de la ejecución anterior.
Son muy poco usados ya que tienen un
elevado coste en memoria y existe la
posibilidad de que un proceso permanezca
indefinidamente sin progresar, y no todos
los recursos permiten almacenar y
recuperar su estado.
Además, puede darse el caso de que el
estado del proceso sea externo al sistema
(Como en el caso de una conexión a Base
de Datos)