1. Por qué un simulador de banquero y detección
El algoritmo del banquero y la detección de deadlocks son difíciles de entender porque involucran múltiples procesos y recursos con estados complejos. Un simulador permite:
- Pedir recursos: ver si la solicitud se concede o se deniega.
- Ver el estado: seguro o inseguro, con la secuencia segura.
- Detectar deadlocks: buscar ciclos en el grafo de asignación.
- Experimentar: cambiar parámetros y ver el efecto.
En la realidad, las solicitudes de recursos ocurren en paralelo y el estado cambia rápidamente. El simulador permite experimentar con el algoritmo del banquero y la detección en un entorno controlado, paso a paso, sin el riesgo de bloquear un sistema real.
2. El modelo
El simulador modela un sistema con:
- Procesos: 2 a 5 procesos (P0, P1, ..., Pn-1).
- Recursos: 2 a 4 tipos de recurso (R0, R1, ..., Rm-1).
- Instancias: cada tipo de recurso tiene un número de instancias (total).
- Asignación: cuántos recursos de cada tipo tiene cada proceso.
- Demanda máxima: cuántos recursos de cada tipo puede necesitar cada proceso en el peor caso.
- Necesidad: la diferencia entre la demanda máxima y la asignación actual.
- Disponibles: los recursos libres en el sistema.
La relación invariante es: Disponibles + Σ Asignación = Total de recursos. Esta relación se mantiene siempre, incluso cuando se conceden o deniegan solicitudes.
3. El algoritmo del banquero en el simulador
El simulador implementa el algoritmo del banquero completo:
- Generar un estado inicial: asignar recursos a procesos aleatoriamente, asegurando que la asignación no exceda el total. generar
- Calcular la necesidad: Need[i][j] = Max[i][j] − Allocation[i][j]. calcular
- Verificar la seguridad: ejecutar la prueba de seguridad (simular que los procesos terminan en algún orden). verificar
- Mostrar la secuencia segura: si es seguro, mostrar el orden en que los procesos pueden terminar. secuencia
- Permitir solicitudes: el usuario puede pedir recursos para un proceso. solicitar
- Evaluar la solicitud: conceder solo si el estado resultante es seguro. evaluar
La prueba de seguridad simula que los procesos terminan uno a uno, liberando sus recursos. Si se puede encontrar un orden en el que todos terminen, el estado es seguro.
4. La detección en el simulador
El simulador también implementa la detección de deadlocks:
- Buscar ciclos: en el grafo de asignación de recursos (RAG). buscar
- Identificar procesos en deadlock: los que no pueden terminar en la prueba de seguridad. identificar
- Mostrar el ciclo: la cadena de espera circular. mostrar
La detección se ejecuta automáticamente cuando el estado es inseguro, para determinar si hay un deadlock real o solo un estado inseguro. Esto es importante porque un estado inseguro no siempre implica deadlock: es un estado en el que el deadlock es posible, pero no inevitable.
5. La visualización
El simulador muestra:
- Tabla de recursos: para cada proceso, la asignación, la demanda máxima, la necesidad y los recursos disponibles.
- Estado: seguro o inseguro, con la secuencia segura si existe.
- Utilización: la fracción de recursos asignados.
- Grafo (opcional): visualización del RAG con ciclos resaltados.
- Log: la secuencia de operaciones realizadas.
6. Casos de interés
| Caso | Descripción | Qué observar |
|---|---|---|
| Estado seguro | La utilización es baja y hay una secuencia segura. | La secuencia segura se muestra. |
| Estado inseguro | La utilización es alta y no hay secuencia segura. | No hay secuencia segura. |
| Solicitud concedida | El estado resultante es seguro. | Los recursos se asignan. |
| Solicitud denegada | El estado resultante es inseguro. | El proceso espera. |
| Deadlock | Ciclo en el RAG. | Los procesos en el ciclo están en deadlock. |
| Recuperación | Terminar un proceso para liberar recursos. | El estado vuelve a ser seguro. |
7. Simulador interactivo
Este simulador ejecuta el algoritmo del banquero y muestra si el estado es seguro:
Simulador · algoritmo del banquero
8. Extensiones posibles
- Pedir recursos: permitir al usuario solicitar recursos para un proceso y ver si se conceden.
- Visualización del grafo: mostrar el RAG con ciclos resaltados.
- Detección en vivo: detectar deadlocks en tiempo real cuando el usuario pide recursos.
- Recuperación: mostrar cómo se recupera de un deadlock terminando un proceso.
- Múltiples instancias: manejar recursos con múltiples instancias.
- Comparación con otros algoritmos: comparar el banquero con la prevención y la detección.
9. Resumen
- El simulador ejecuta el algoritmo del banquero y muestra si el estado es seguro.
- También detecta deadlocks buscando ciclos en el RAG.
- Muestra la secuencia segura si el estado es seguro.
- Permite experimentar con parámetros.
- Es la herramienta que cierra el bloque de interbloqueos.
10. Preguntas de repaso
Intenta responder cada una antes de abrir la respuesta.
1. ¿Qué verifica el simulador?
Si un estado es seguro (algoritmo del banquero) y si hay deadlocks (detección).
2. ¿Qué muestra la secuencia segura?
El orden en que los procesos pueden terminar sin deadlock.
3. ¿Qué es un estado inseguro?
Un estado en el que no existe una secuencia segura.
4. ¿Qué es la detección de deadlocks?
Buscar ciclos en el grafo de asignación de recursos.
5. ¿Qué procesos están en deadlock?
Los que no pueden terminar en la prueba de seguridad.
6. ¿Qué parámetros ajusta el simulador?
Número de procesos y tipos de recurso.
7. ¿Qué bloque del curso cierra este simulador?
El bloque 8 (interbloqueos).
8. ¿Qué es la recuperación?
Salir del deadlock terminando procesos o quitando recursos.
9. ¿Cómo se elige a la víctima?
Por prioridad, tiempo de ejecución, recursos usados, etc.
10. ¿Por qué la detección es poco usada en SO?
Porque la prevención es más simple y no tiene overhead.
Para practicar
- Ejecuta el simulador y observa estados seguros e inseguros.
- Modifica el simulador para permitir solicitudes de recursos.
- Implementa la detección de deadlocks en el simulador.
- Visualiza el grafo de asignación de recursos.
- Implementa la recuperación por terminación de procesos.
- Investiga cómo PostgreSQL detecta deadlocks.