Deadlock es un bloqueo permanente donde un conjunto de procesos están esperando recursos que están retenidos por otros procesos del mismo conjunto, y ninguno puede progresar.
Cuatro Condiciones de Coffman
Para que ocurra deadlock, las cuatro deben cumplirse simultáneamente:
- Mutual Exclusion: el recurso no puede ser compartido.
- Hold and Wait: proceso retiene recursos mientras espera otros.
- No Preemption: recursos no pueden ser forzadamente quitados.
- Circular Wait: existe un ciclo de espera entre procesos.
Si rompes cualquier condición, previenes deadlock.
Ejemplo Clásico
Dos procesos, dos recursos:
- Proceso A tiene recurso X, espera Y.
- Proceso B tiene recurso Y, espera X.
Circular wait: A → Y (held por B) → X (held por A). Deadlock.
Estrategias
Prevención
Rompe una de las cuatro condiciones:
- Eliminar mutual exclusion (solo para recursos shareables).
- Eliminar hold and wait (pedir todos los recursos upfront).
- Permitir preemption (forzar release de recursos).
- Imponer orden de recursos (evitar ciclos).
Avoidance
Deja que los procesos pidan recursos dinámicamente, pero verifica que el estado sea safe antes de conceder.
Safe state: existe un orden de ejecución donde todos los procesos terminan.
Banker’s Algorithm
Algoritmo de avoidance para sistemas con recursos de múltiples tipos:
- Proceso solicita recursos.
- Si
request ≤ needyrequest ≤ available, simula la concesión. - Verifica si el estado resultante es safe.
- Si safe: concede. Si no: proceso espera.
Detection y Recovery
Deja que el deadlock ocurra, luego lo detecta y recupera:
- Detection: construye Wait-For Graph, busca ciclos (O(n²)).
- Recovery: aborta procesos o fuerza preemption de recursos.
Comparación
| Estrategia | Cuándo | Complejidad | Uso |
|---|---|---|---|
| Prevención | Siempre previene | Baja | Sistemas simples |
| Avoidance | Previene si safe | Alta (Banker) | Sistemas con recursos conocidos |
| Detection | Detecta luego | O(n²) por ciclo | Sistemas grandes |
Aplicaciones
- Bases de datos — transacciones y locking
- Sistemas distribuidos — deadlock en mensajes
- Enseñanza — introduce modelado de recursos
Trayectoria de Práctica
- Investiga Banker’s algorithm: traza el ejemplo de 5 procesos y 3 recursos.
- Investiga Wait-For Graph: detecta deadlock en O(n²).
- ¿Por qué las cuatro condiciones de Coffman son necesarias? Elimina una, resuelve deadlock.
- Investiga deadlock en bases de datos: two-phase locking.
- Investiga deadlock en sistemas distribuidos: ¿cómo se detecta sin estado global?