Es
el proceso de determinar si realmente existe un
bloqueo mutuo e identificar los procesos y recursos
implicados en él.
Mediante
estrategias de detección de interbloqueos se
concederán los recursos que los procesos necesiten
siempre que sea posible, y periódicamente el SO
ejecuta un algoritmo que permite detectar la condición
de espera circular. El control del interbloqueo puede
llevarse a cabo:
En cada
solicitud de recurso: conduce a una pronta
detección y el algoritmo es relativamente simple
puesto que está basado en cambios incrementales del
estado del sistema. La frecuencia de comprobación
consume un tiempo de procesador considerable.
Con una
frecuencia estipulada: consume menos tiempo
de procesador.
Una
vez detectado el interbloqueo hace falta una
estrategia de recuperación, algunos de los enfoques
posibles son:
- Abandonar
todos los procesos bloqueados (la más utilizada por
los SO).
- Retroceder
cada proceso bloqueado hasta algún punto de control
definido previamente y volver a ejecutar todos los
procesos. El no determinismo del procesamiento
concurrente asegura que, en general, no se repetirá
el interbloqueo original.
- Abandonar
sucesivamente los procesos bloqueados hasta que deje
de haber interbloqueo. Para ello se seguirá un
criterio de mínimo coste. Después de cada abandono
se deberá ejecutar nuevamente el algoritmo de
detección.
- Apropiarse
de recursos sucesivamente hasta que deje de haber
interbloqueo. Se debe emplear también una solución
basada en el coste. Un proceso que pierde un recurso
debe retroceder hasta un momento anterior a la
adquisición de ese recurso.
|