Explicar el algoritmo centralizado de detección de deadlocks.
El algoritmo centralizado de detección de deadlocks implica la existencia de un coordinador o líder que mantenga un grafo con los procesos y los recursos pedidos por cada uno.
Cuando un proceso quiere pedir un recurso, le avisa al coordinador, que agrega una arista conectando al recurso con el proceso. Cuando quiere liberar el recurso, el coordinador elimina la arista. Al ingresar una nueva arista, si se detecta un ciclo en el grafo, quiere decir que ocurrió un deadlock.
Se debe tener en cuenta que si los mensajes llegan en desorden, se pueden dar falsos positivos, donde se cree que se tiene un deadlock cuando en realidad no es así. Para resolver este problema, se pueden utilizar timestamps globales.
Explicar el algoritmo distribuido de detección de deadlocks.
El algoritmo distribuido de detección de deadlocks comienza cuando un proceso quiere pedir un recurso. En este caso, el proceso le envía un mensaje al proceso que ya tiene el recurso con su info y qué recurso está pidiendo. El proceso que recibe el mensaje, a su vez, envía un mensaje a los procesos que tienen los recursos que él quiere. Si el proceso original (el que comenzó el algoritmo) recibe un mensaje de este tipo, es porque hay un ciclo en la estructura del sistema distribuido, y se detectó un deadlock.
A nivel conceptual, en qué se diferencian los algoritmos de detección de deadlocks de los de prevención de deadlocks?
Los algoritmos de detección de deadlocks se utilizan para averiguar si hay un deadlock en el sistema, pero no resuelven el deadlock. Los algoritmos de prevención, en cambio, sí abortan el proceso o transacción correspondiente para salir de la situación de deadlock.
Explicar el algoritmo wait-die de prevención de deadlocks?
El algoritmo wait-die utiliza timestamps globales. Presupone dos transacciones, A y B, ambas con timestamp único. Si la transacción A pide un recurso que B ya tiene, se comparan los timestamps:
Se busca abortar la transacción vieja por sobre la nueva ya que, estadísticamente, la transacción vieja realizó más operaciones, por lo que abortarla será más laborioso y costoso que abortar una nueva.
Explicar el algoritmo wound-wait de prevención de deadlocks?
El algoritmo wound-wait utiliza timestamps globales. Presupone dos transacciones, A y B, ambas con timestamp único. Si la transacción A pide un recurso que B ya tiene, se comparan los timestamps:
Se busca abortar la transacción vieja por sobre la nueva ya que, estadísticamente, la transacción vieja realizó más operaciones, por lo que abortarla será más laborioso y costoso que abortar una nueva.
Explicar las complicaciones de los deadlocks en entornos de concurrencia distribuida.