Thursday, February 09, 2006

Evitar bloqueos mutuos

Aunque no se pueda eliminar todas las condiciones de un bloqueo mutuo un sistema operativo puede evitarlo si conoce el orden de las solicitudes de cada proceso activo. Un algoritmo con este propósito fue propuesto por Dijkstra en 1965. Este algoritmo se basa en los principios de un banco con una cantidad fija de capital que:
  • No concede préstamos que excedan el capital.
  • Todos los clientes tienen un límite de crédito máximo.
  • Ningún cliente puede pedir prestado más allá de ese límite.
  • La suma de todos los préstamos no pude exceder el capital total del banco.

En los ejemplos siguientes podemos ver dos situaciones:

  • En la primera el sistema está en un “estado seguro” porque tiene suficientes dispositivos libres para completar los requerimientos de cualquier trabajo.
  • En la segunda el sistema entró en un “estado inseguro” ya que no tiene suficientes recursos para completar los requerimientos de ninguno de los procesos.


Cuando el sistema entra en un estado inseguro es muy probable que se produzca un bloqueo mutuo por lo que el sistema operativo nunca debe permitirlo.

De todas formas este algoritmo también tiene sus desventajas. No se usan los recursos al máximo, los trabajos deben enunciar el máximo de sus recursos desde el principio, si un dispositivo deja de funcionar el algoritmo no funciona, el número de trabajos debe mantenerse fijo y esto no ocurre en la realidad, ejecutar el algoritmo agrega carga a la memoria y al procesador, entre otras.

No comments: