En sistemas operativos, el bloqueo mutuo (también conocido como interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de procesos o hilos de ejecución en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos. Un sistema está en bloqueo cuando uno o mas procesos están esperando un evento que no va a suceder.
Representación de Bloqueos Mutuos usando GRAFOS
El Bloqueo mutuo también puede ser representado usando grafos dirigidos, donde el proceso es representado por un cuadrado y el recurso, por un círculo. Cuando un proceso solicita un recurso, una flecha es dirigida del círculo al cuadrado. Cuando un recurso es asignado a un proceso, una flecha es dirigida del cuadrado al círculo. En este ejemplo clásico de bloqueo mutuo, es fácilmente visible la condición de espera circular en la que los procesos se encuentran, donde cada uno solicita un recurso que está asignado a otro proceso.
Evitando bloqueos mutuos
Los bloqueos mutuos pueden ser evitados si se sabe cierta información sobre los procesos antes de la asignación de recursos. Para cada petición de recursos, el sistema controla si satisfaciendo el pedido entra en un estado inseguro, donde puede producirse un bloqueo mutuo. De esta forma, el sistema satisface los pedidos de recursos solamente si se asegura que quedará en un estado seguro. Existen varios algoritmos para evitar bloqueos mutuos:
Algoritmo del banquero, introducido por Dijkstra.
Algoritmo de grafo de asignación de recursos.
Algoritmo de Seguridad.
Algoritmo de solicitud de recursos.
Condiciones necesarias
Exclusión mutua: sólo un proceso puede usar un recurso simultáneamente.
Retención y espera: un proceso retiene unos recursos asignados mientras espera que se le asignen otros.
No expropiación: ningún proceso puede ser forzado a abandonar un recurso que retenga.
Espera circular: las anteriores causas son las más importantes pero no son suficientes. Se debe dar también el caso de que exista una cadena cerrada de procesos, cada uno de los cuales retiene, al menos, un recurso que necesita el siguiente proceso de la cadena para continuar su ejecución (círculo vicioso).
No hay comentarios:
Publicar un comentario