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.
Inteligencia artificial: Lo que usted necesita saber sobre el aprendizaje automático, robótica, aprendizaje profundo, Internet de las cosas, redes neuronales, y nuestro futuro
Excel para principiantes: Aprenda a utilizar Excel 2016, incluyendo una introducción a fórmulas, funciones, gráficos, cuadros, macros, modelado, informes, estadísticas, Excel Power Query y más
44 Apps Inteligentes para Ejercitar su Cerebro: Apps Gratuitas, Juegos, y Herramientas para iPhone, iPad, Google Play, Kindle Fire, Navegadores de Internet, Windows Phone, & Apple Watch
Ciberseguridad: Una Simple Guía para Principiantes sobre Ciberseguridad, Redes Informáticas y Cómo Protegerse del Hacking en Forma de Phishing, Malware, Ransomware e Ingeniería Social