# Algoritmo de grafos de asignación de recursos

El algoritmo de grafos de asignación de recursos es un método de detección de situaciones de bloqueo mutuo.
Esta técnica consiste en representar gráficamente los recursos asignados a los procesos y los recursos que los procesosnecesitan para completar su ejecución. Se utiliza un enfoque de recorrido de grafo, donde se exploran los nodos siguiendo las conexiones entre ellos. Si se llega de nuevo al nodo de inicio, significa que hay una espera circular y por tanto un bloqueo.
El propósito de esta técnica consiste además de detectar el interbloqueo, obtener información precisa acerca de los recursos y procesos involucrados en dicho bloqueo.

## Grafos de asignación de recursos

Se representa un grafo mediante el cual se aprecia de forma sencilla y muy visual los bloqueos. Se representan los procesos mediante cuadrados y los recursos mediante círculos. Cuando un proceso solicita un recurso, se dibuja una flecha que va desde el proceso hacia el recurso. Por otro lado, cuando un recurso está asignado a un proceso, se dibuja una flecha que va desde el recurso hacia el proceso.
En la Figura 1, veo como P1 solicita el recurso R1 y P2 tiene asignado el recurso R2. En cambio en la Figura 2 vemos como P3 solicita el recurso R3 pero es P4 el que tiene asignado este recurso.
En la Figura 3 existe el interbloqueo. Una espera circular, como vemos en la imagen: cuando el recurso que se solicita está asignado a otro proceso y este proceso solicita un recurso que ya está asignado al proceso citado anteriormente. En este caso, P5 solicita R4 pero R4 esta asignado a P6 y a la vez P6 solicita R5 pero R5 está asignado a P5.
Esa espera circular o ciclo puede involucrar más de dos procesos y dos recursos, como vemos en la Figura 4.

## Manera de actuar
### Conceder todas las solicitudes

La premisa es atender todas las solicitudes siempre que haya suficientes recursos disponibles, y si se detecta un interbloqueo, implementar acciones correctivas.
* No hay infrautilización de recursos, todos los disponibles se aprovechan plenamente.
* No se limitan escenarios donde no exista la posibilidad de interbloqueo.
Se conceden todas las solicitudes porque el objetivo es llegar al bloqueo y detectarlo, en el caso de que queramos evitarlo o prevenirlo llevaríamos a cabo otros métodos o algoritmos como por ejemplo el algoritmo del banquero.

### Momento en el que utilizar el algoritmo

Este algoritmo de grafos, se puede realizar en diferentes momentos durante la asignación de recursos:

#### Ante cada solicitud que no puede ser satisfecha de manera inmediata

* La identificación más ágil y eficiente.
* Permite la identificación del proceso responsable del interbloqueo.
* Puede implicar un costo desproporcionado.

#### Periodicamente

Con el inconveniente de elegir el periodo más acertado.

#### Cuando se observe una disminución en el rendimiento

En el momento en el que se detecte una degradación de las prestaciones del sistema.

## Recuperación ante el bloqueo
### Abortar procesos

* La forma más drástica, abortar todos los involucrados, los que participan de alguna forma en el bloqueo.
* Se verifica uno a uno cada proceso, comprobando si se resuelve el problema. Estos procesos que se van verificando se eligen en torno a ciertas prioridades, número y tipo de recursos consumidos, por ejemplo.

### Expropiar recursos

* Elección de los procesos afectados. Es necesario tener en cuenta los procesos previamente afectados para evitar situaciones de inanición.
* Elección de los recursos, no todos se pueden expropiar.
* La solución más radical y más sencilla sería la de abortar y reiniciar. Revertir los procesos a un estado previo de la ejecución.