Está en la página 1de 12

Detección de

Deadlocks

Yeliana Torres ft. jesús Chavarro


¿Qué es un Deadlock?

Un deadlock es el estado de un
proceso, donde este está
condenado a esperar por siempre.

Ocurre si hay un ciclo de


procesos que esperan por...

Información de los demás Recursos ocupados por


procesos del ciclo. otro proceso del ciclo.

Communication deadlock Resource deadlock


Wait-for graphs
- Los nodos son procesos o recursos (u, v)
- Los enlaces direccionados, son peticiones (uv, vu)
- Los nodos hacen N-out-of-M requests donde se necesita
que se acepten N de las M peticiones que se enviaron.
Análisis estático de deadlocks
- Los nodos que envían peticiones se bloquean.
- Los nodos con N peticiones respondidas, se desbloquean, y
piden que el resto de N - M peticiones sean eliminadas.
- Solo nodos desbloqueados pueden enviar peticiones.

Los círculos grises representan nodos bloqueados


Análisis estático de deadlocks
Análisis estático de deadlocks
El algoritmo de detección de
deadlock Bracha-Toueg
Bracha-Toueg proporciona un método
algorithm distribuido para realizar el
análisis estático del grafo
wait-for para tratar de
encontrar los deadlocks.
Variables
● Out[u]: Los nodos a los que u envió una solicitud (no otorgada).
● In[u] : Los nodos de los que u recibió una solicitud (no
descartada).
● requests[u]: Es el número de recursos que u requiere para ser
desbloqueado.
● notify[u]: El nodo u ha sido notificado.

● Free[u]: El nodo u no esta bloqueado.


Condiciones e inicialización

Cuando u recibe un mensaje de concesión, requests[u] -= 1

Si la requests[u] = 0, u envía mensajes de concesión a todos los


nodos en In[u].

Si después de la terminación de la detección de deadlock se


cumple requests[u] > 0 en nodo incial, entonces hay un deadlock.

Inicialmente notified[u] = falso y free[u] = falso en todos los nodos


u. Esto para que se corra el proceso Notify y Grant por los menos
una vez.
Pseudocodigo AKA Python

Def notify(u): Def grant(u):


Notified[u] = True free[u] = True
For w in Out[u]: For w in In[u]:
send(Grant,w)
send(NOTIFY,w) For w in In[u]:
If request[U]==0: await(ACK,w)
grant(u)
For w in Out[u]:
await(DONE,w)
Pseudocodigo AKA Python

#u es el que envio la petición


Def receiveNotify(u): Def receiveGrant(u):
If notified[self] == If request[self] > 0:
false request[self] =
notify(self) request[self]-1
send(DONE,u) If request[self] == 0:
grant(u)
send(ACK,u)
Finalización

● Cuando el nodo inicial ha recibido DONE de todos los


nodos en su conjunto Out[u], comprueba el valor de su
campo free[u].
● Si aún es falso, el nodo inicial concluye que tiene un
deadlock.
● El algoritmo de Bracha-Toueg está libre de deadlocks ya
que eventualmente el nodo inicial recibirá DONE de todos
los nodos de Out[u], en ese momento el algoritmo
termina.

También podría gustarte