Thursday, February 09, 2006

Detección y recuperación de un bloqueo

Los bloqueos mutuos se pueden detectar de manera relativamente fácil como pudimos ver en las gráficas dirigidas. Siempre que se produzca un ciclo en la solicitud y retención de dispositivos hay un bloqueo. El algoritmo para que el sistema busque los bloqueos se explica de la manera siguiente:
a) Encuentre un proceso que esté utilizando un recurso y no espere ningún otro. Este se puede eliminar de la gráfica.
b) Encentre un proceso que nada más espere recursos que no están asignados por completo.
c) Vuelva al paso uno hasta eliminar todas las líneas posibles.Si todavía quedan procesos que no se han eliminado hay un bloqueo.

En la primera imagen no hay bloqueo, pero en la segunda si.
(Haga click en la imagen para agrandar)


El sistema operativo después de detectar el bloqueo mutuo debe recuperarse del mismo y continuar con su trabajo. Para esto necesita una “víctima”, un programa que se pueda terminar y volver a iniciar desde el principio o desde un punto medio conveniente.
Algunos algoritmos para la recuperación son los siguientes:

  • Terminar todos los trabajos activos y volver a arrancarlos.
  • Terminar los trabajos en el bloqueo solamente y solicitar su nuevo envío.
  • Terminar uno por uno los trabajos que participan en el bloqueo y ver si el bloqueo desaparece después de cada terminación.
  • Terminar un trabajo que se pueda reiniciar desde un punto medio si este resuelve el bloqueo.
  • Terminar un trabajo que no está en el bloqueo y asignar sus recursos a uno bloqueado.
  • Este último método detiene los trabajos nuevos y permite que los que no están bloqueados terminen y liberen sus recursos para que los bloqueados los usen, es el único que no requiere víctimas, pero al igual que el anterior no siempre funciona.

No comments: