Sistemas Operativos II
Interbloqueo (Abrazo Mortal - deadlock)
Definición Interbloqueo
● Recursos exclusivos: Los sistemas computacionales tienen recursos limitados
(ej. impresoras, unidades de cinta).
● Problema: Si dos procesos intentan acceder al mismo recurso al mismo
tiempo, el sistema puede corromperse (ej. tabla de archivos).
● Solución: Los sistemas operativos aseguran acceso exclusivo a los recursos,
evitando interbloqueos.
Acceso Exclusivo a Recursos
● Múltiples recursos: Algunos procesos requieren acceso exclusivo a varios recursos.
Ejemplo: Interbloqueo en dos procesos
1. Proceso A: Pide el escáner → se le otorga.
2. Proceso B: Pide el grabador de CDs → se le otorga.
3. Proceso A: Pide el grabador de CDs → rechazo.
4. Proceso B: Pide el escáner → bloqueo.
Resultado: Ambos procesos están bloqueados y no pueden continuar (interbloqueo).
Interbloqueos en Diferentes Contextos
Entre máquinas: Interbloqueos pueden ocurrir en redes de computadoras.
En bases de datos: Un programa puede bloquear el acceso a registros.
Recursos: Pueden ser tanto de hardware como de software.
Interbloqueo - Recursos
Definición de recurso: Un recurso es cualquier objeto que debe ser adquirido, utilizado y
liberado con el tiempo. (Puede no estar disponible de inmediato)
Tipos de recursos:
Hardware: Dispositivos físicos (ej. impresoras, unidades de disco).
Información: Datos o registros en memoria.
Objetos otorgados como recursos: Para un análisis general de interbloqueos, llamamos
"recursos" a todos los elementos que se deben gestionar.
Recursos apropiativos y no apropiativos
Apropiativos: Se pueden reasignar sin afectar la ejecución. (Ej: memoria).
No apropiativos: No pueden ser reasignados sin causar fallos. (Ej: grabador de CD
en uso).
Nuestro análisis se enfocará en los recursos no apropiativos.
Enfoque en Si un recurso no
recursos no está disponible, el
apropiativos proceso debe
esperar.
Interbloqueo: Definición
Formalmente:
Un conjunto de procesos se encuentra en un interbloqueo si cada proceso en el
conjunto está esperando un evento que sólo puede ser ocasionado por otro
proceso en el conjunto.
Todos los procesos quedan en espera indefinida → Ninguno puede desbloquear al otro.
🔹 Condiciones del modelo:
● Procesos de un solo hilo.
● No hay interrupciones para reactivarlos.
Adquisición de Recursos
🔹 En algunos casos, los procesos de usuario
gestionan los recursos. typedef int semaforo;
semaforo recurso_1;
void proceso_A(void) {
down(&recurso_1);
🔹 Se usa un semáforo para controlar el acceso usar_recurso_1();
a cada recurso. up(&recurso_1);}
Adquisición Secuencial de Recursos
Código con potencial
Código libre de interbloqueos
interbloqueo
🔹 Algunos procesos
typedef int semaforo;
requieren múltiples semaforo recurso_1; semaforo recurso_1;
recursos. semaforo recurso_2; semaforo recurso_2;
void proceso_A(void) { void proceso_A(void) {
🔹 Se pueden obtener down(&recurso_1); down(&recurso_1);
uno a la vez, en un down(&recurso_2); down(&recurso_2);
usar_ambos_recursos(); usar_ambos_recursos();
orden específico. up(&recurso_2); up(&recurso_2);
up(&recurso_1); } up(&recurso_1);
void proceso_B(void){ void proceso_B(void) {
down(&recurso_1); down(&recurso_2);
down(&recurso_2); down(&recurso_1);
usar_ambos_recursos(); usar_ambos_recursos();
up(&recurso_2); up(&recurso_1);
up(&recurso_1);} up(&recurso_2);}
Condiciones Necesarias para el Interbloque (Desadlock)
1⃣ Exclusión Mutua → Cada recurso solo puede ser usado r(1)
por un proceso a la vez.
.
2⃣ Contención y Espera (Hold & Wait) → Un proceso
retiene un recurso mientras espera otro.
p(1) p(2)
3⃣ No Apropiación → Un recurso no puede ser forzado a
liberarse, solo lo hace voluntariamente.
4⃣ Espera Circular → Existe una cadena de procesos .
bloqueados, donde cada uno espera un recurso retenido r(2)
por otro.
Modelado de Interbloqueos mediante Grafos
🔹 Tipos de recursos: R1, R2, R3, … (cada uno con varias instancias Wi).
🔹 Uso de un recurso:
1⃣ REQUEST → Solicita el recurso (si no está disponible, espera en cola).
2⃣ USE → Utiliza el recurso asignado.
3⃣ RELEASE → Libera el recurso después de usarlo.
GRAFO DE ASIGNACIÓN DE RECURSOS (elementos)
• Procesos
• Tipo de Recurso con 4 instancias
• Pi pide instancia of Rj Pi
• Pi retiene una instancia de Rj Pi
GRAFO DE ASIGNACION DE RECURSOS
• Sea G = (V,E), donde V es el conjunto de vértices y E es el conjunto de flechas
(arcos orientados).
• A su vez V está compuesto por 2 tipos:
• P = {p(1),p(2),...,p(n)} conjunto de Procesos
• R = {r(1),r(2),......,r(m)} conjunto de Recursos
GRAFO DE ASIGNACION DE RECURSOS
Los elementos de E son:
🔹 (p(i) ➝ r( j)) → El proceso p(i) está esperando una instancia del recurso r( j).
🔹 (r( j) ➝ p(i)) → Una instancia del recurso r( j) está asignada al proceso p(i).
Ejemplo de un grafo de asignación de recursos
GRAFO DE ASIGNACIÓN DE RECURSOS
Para recursos con múltiples instancias, la presencia de un ciclo cerrado es una condición
necesaria, pero no suficiente para que ocurra un interbloqueo.
• CONCLUSION: Cuando no existe un ciclo no hay deadlock.
Ahora si existe un ciclo puede o no haber deadlock.
Ciclo:
p(1) → r(1) → p(3) → r(2) → p(1).
Si p(4) o p(2) liberan sus recursos se
rompe el ciclo.
MANEJO DE INTERBLOQUEO (DEADLOCK)
Existen dos maneras de manejar los Interbloqueos:
● Permitirlo y luego recuperar (es caro y dificultoso).
● No permitir que ocurran ( Prevención - Evitarlo ).
Interbloqueo- Algoritmo del Avestruz
El método más simple es el algoritmo de la avestruz:
meta su cabeza en la arena y pretenda que no hay
ningún problema.
Las personas reaccionan a esta estrategia de diversas formas.
● Los matemáticos la encuentran totalmente inaceptable y dicen que los interbloqueos se deben
prevenir a toda costa.
● Los ingenieros preguntan con qué frecuencia se espera el problema. Si ocurren interbloqueos en
promedio de una vez cada cinco años, la mayoría de los ingenieros no estarán dispuestos a reducir
considerablemente el rendimiento por la conveniencia de eliminar los interbloqueos.
Interbloqueo- Algoritmo del Avestruz
🔹 Un sistema operativo bloquea procesos si un Muchos sistemas ignoran los
dispositivo está ocupado. interbloqueos en lugar de
prevenirlos.
🔹 Ejemplo:
1⃣ Proceso A abre la unidad de CD-ROM. Prefieren evitar el costo de
2⃣ Proceso B abre la impresora. detección y resolución, asumiendo
3⃣ Ambos intentan acceder al recurso del otro → que ocurren raramente.
se bloquean mutuamente.
❌ Resultado: Interbloqueo no detectado por la
mayoría de los sistemas.
Interbloqueo - DETECCIÓN Y RECUPERACIÓN
Una segunda técnica es la detección y recuperación.
🔹 El sistema no previene interbloqueos, sino que los detecta cuando ocurren.
🔹 Luego, aplica estrategias para recuperarse del problema.
➡ Próximo análisis:
✅ Métodos de detección de interbloqueos.
✅ Estrategias de recuperación.
DETECCION DE DEADLOCK
1. El proceso A contiene a R y quiere a S.
● Utilizando grafos 2. El proceso B no contiene ningún recurso
pero quiere a T.
3. El proceso C no contiene ningún recurso
pero quiere a S.
4. El proceso D contiene a U y quiere a S y
a T.
5. El proceso E contiene a T y quiere a V.
6. El proceso F contiene a W y quiere a S.
7. El proceso G contiene a V y quiere a U.
Algoritmo de Detección de Ciclos
Algoritmo simple de detección (detección de ciclos)
L: Lista de nodos y lista de arcos
1⃣ N como nodo inicial 4⃣ Del nodo actual :¿arcos salientes desmarcados?
2⃣ Inicializar: Inicializar L vacía y arcos Si → ir al paso 5 No → ir al paso 6
desmarcados
5⃣ Elegir arco saliente desmarcado y marcarlo. Paso 3
3⃣ Nodo actual al fin de L
6⃣ Si ¿nodo = inicial? → fin sin ciclos.
¿Nodo aparece dos veces en L?
¿nodo ≠ inicial? → punto muerto retroceder nodo
Si →FIN → CICLO anterior
No → Continúa
DETECCION DE DEADLOCK
● Inicio: R y L vacia.
● R-> L
● Avanzamos a A => L=[R,A]
● Avanzamos a S => L=[R,A,S]
● S no tiene arcos salientes
=>Regresamos a A.
● A no tiene arcos salientes
desmarcados => a R. FIN
No hay ciclos!
DETECCION DE DEADLOCK
● Comenzamos con B.
● Se completa la lista hasta D =>
L = [B, T, E, V, G, U, D]
● Si elegimos S llegamos a un punto
muerto y regresamos a D
● Si elegimos T y actualizamos la lista: L
= [B, T, E, V, G, U, D, T]
● T se repite => Ciclo
-> Potencial Interbloqueo
DETECCION DE DEADLOCK
ALGORITMO DE SHOSHANI Y COFFMAN (1970)
● Disponible : Vector de longitud M. Disponible(j) = k, indica que existen k instancias
disponibles del recurso r(j).
● Asignación :Matriz de NxM. Define el número de recursos de cada tipo actualmente
tomados por cada proceso.
Asignación(i,j,) = k, dice que el proceso p(i) tiene k instancias del recurso r(j).
● Requerimiento o Espera: Matiz de NxM. Define los recursos requeridos por cada
proceso en un instante, es decir, aquellos recursos por los cuales el proceso se
encuentra en espera de disponibilidad.
DETECCION DE DEADLOCK
ALGORITMO DE SHOSHANI Y COFFMAN (1970)
P1. Work = Disponible
Si Asignación(i) ≠ 0 => Finish(i) = Falso sino
Finish(i) = Verdadero
P2. Encontrar un i tal que
a) Finish(i) = F
b) Requerimiento(i) ≤ Work sino ir a Paso P4.
P3. Work = Work + Asignación(i)
Finish(i) = V ir a Paso P2.
P4. Si Finish(i) = F -> sistema está en DEADLOCK.
Más aún, los p(j) cuyo Finish(j) = F son los procesos
involucrados en el deadlock
DETECCION DE DEADLOCK Ejemplo: Se tiene 7 de A
ALGORITMO DE SHOSHANI Y COFFMAN (1970) 2, de B y 6 de C
Asignados Requeridos Disponibles 1. Work[M] = [0 0 0]
Finish[N] = [F F F F]
P A B C A B C A B C
2. P0
P0 0 1 0 0 0 0 0 0 0
3. Work[M] = [0 1 0]
P1 2 0 0 2 0 2
Para T0 Finish[N] = [V F F F]
P2 3 0 3 0 0 0
2. P2
P3 2 1 1 1 0 0
3. Work[M] = [3 1 3]
P4 0 0 2 0 0 2
Finish[N] = [V F V F]
Secuencia P0,P2,P1,P3,P4
Work[M] = [7 2 6]
No Deadlock
DETECCION DE DEADLOCK Ejemplo: Se tiene 7 de A
ALGORITMO DE SHOSHANI Y COFFMAN (1970) 2, de B y 6 de C
Asignados Requeridos Disponibles 1. Work[M] = [0 0 0]
Finish[N] = [F F F F]
P A B C A B C A B C
2. P0
P0 0 1 0 0 0 0 0 0 0
3. Work[M] = [0 1 0]
P1 2 0 0 2 0 2
Para T0 Finish[N] = [V F F F]
P2 3 0 3 0 0 1
2. P2
P3 2 1 1 1 0 0 Req(i) ≤ Work ??? NO
P4 0 0 2 0 0 2
Si bien se pueden asignar los
recursos de P0, no es suficiente
para el resto
Deadlock -> Entre P1, P2, P3 y P4
RECUPERACION FRENTE DEADLOCK (técnicas)
🛑 Opciones principales:
✅ Romper la exclusión mutua → Permitir que varios procesos usen el recurso.
✅ Romper la espera circular → Cancelar procesos hasta eliminar el ciclo.
✅ Desalojar recursos de los procesos bloqueados.
🔴 Eliminar el deadlock matando procesos:
1⃣ Matar todos los procesos en deadlock
🔹 Solución drástica, pero efectiva.
🔹 Alto costo en pérdida de progreso.
2⃣ Matar procesos uno por uno ⚠
🔹 Se elimina un proceso y se vuelve a verificar si el deadlock desapareció.
🔹 Alto overhead, ya que requiere múltiples ejecuciones del algoritmo de detección.
RECUPERACION FRENTE DEADLOCK (Kill Proccess)
🔴 Matando procesos:
🎯 Selección de Víctimas para Resolver un Deadlock
🔍 Objetivo: Elegir procesos para liberar recursos con mínimo costo.
📌 Criterios de selección:
✅ Prioridad del proceso.
✅ Tiempo de ejecución (cuánto hizo y cuánto falta).
✅ Recursos liberados (cantidad y tipo).
✅ Impacto en otros procesos (cuántos siguen bloqueados).
✅ Posibilidad de retroceder (¿se puede reintentar sin perder trabajo?).
🔴 Clave: Elegir procesos que rompan el ciclo con la menor pérdida posible.
RECUPERACION FRENTE DEADLOCK (Rollback)
🔄 Rollback para Resolver un Deadlock
🔍 Objetivo: Retroceder la ejecución para liberar recursos y romper el ciclo.
📌 Opciones de retroceso:
🔴 Cancelar completamente el proceso.
🟡 Revertir hasta un punto seguro donde se guardó toda la información necesaria
(CHECKPOINT).
💡 Clave: Usar puntos de control para minimizar la pérdida de trabajo.
RECUPERACION FRENTE DEADLOCK (Starvation)
⚠ Inanición (Starvation)
🛑 Problema: Un proceso nunca adquiere los recursos que necesita.
🔍 Ejemplo:
📌 Mas Corto Primero: Los procesos largos quedan siempre relegados.
📌 Prioridades: Procesos de baja prioridad pueden quedar bloqueados indefinidamente.
💡 Solución:
✔ Contador de Rollbacks para evitar que siempre se afecte el mismo proceso.
Interbloqueo – ¿Cómo evitarlo?
🔍 Problema:
● En la mayoría de los sistemas, los recursos se solicitan uno a la vez.
● El sistema debe decidir si es seguro otorgar un recurso.
💡 Pregunta clave:
👉 ¿Podemos evitar interbloqueos con la elección correcta?
✅ Respuesta:
● Sí, pero solo si contamos con información previa.
● Se requiere una asignación cuidadosa de los recursos.
Veremos estrategias para evitar interbloqueos.
ALGORITMOS PARA EVITAR DEADLOCK
🏦 Algoritmo del Banquero ( The Banker's Algorithm)
🔹 Dijkstra (1965) y Habermann (1969)
🔍 ¿Cómo funciona?
✔ Evalúa si los recursos libres pueden asignarse a procesos sin salir de un estado
seguro.
👥 Suposiciones:
🔸 N procesos
🔸 M clases de recursos
🔸 Uso de estructuras de datos específicas
🛡 Objetivo: Evitar interbloqueos mediante una asignación controlada de recursos.
Algoritmo Banquero y Seguridad
🟢 Disponible (Vector de longitud M)
📌 Disponible(j) = k → Hay k instancias disponibles del recurso r(j)
🟠 MAX (Matriz NxM)
📌 MAX(i,j) = k → El proceso p(i) puede necesitar hasta k instancias del recurso r(j)
🟡 Asignación (Matriz NxM)
📌 Asignación(i,j) = k → El proceso p(i) está usando k instancias del recurso r(j)
🔵 Necesidad (Matriz NxM)
📌 Necesidad(i,j) = k → El proceso p(i) aún necesita k instancias del recurso r(j)
🟣 Requerimiento (Vector de p(i))
📌 Requerimiento(i,j) = k → El proceso p(i) está pidiendo k instancias del recurso r(j)
Algoritmo Banquero y Seguridad
La necesidad de un proceso se calcula como:
🔹 Necesidad(i,j) = MAX(i,j) - Asignación(i,j)
📌 Notación simplificada:
✅ Si X e Y son vectores:
● X ≤ Y ⇔ X(i) ≤ Y(i) ∀ i
● X<Y⇔X ≤ YyX ≠ Y
Además trataremos aparte las matrices por sus filas, por ejemplo:
● Asignación(i) define todos los recursos asignados por el proceso p(i).
● Requerimiento(i) es el vector de requerimientos de p(i).
Algoritmo Banquero y Seguridad
Verificación antes de adjudicar recursos
Cuando un proceso solicita un recurso, el 3⃣ Simulación de asignación
sistema verifica: 🛠 Se ajustan los estados:
1⃣ ¿Se pide más de lo declarado? 🔹 Disponible = Disponible - Requerimiento(i)
✅ Si Requerimiento(i) ≤ Necesidad(i) → 🔹 Asignación(i) = Asignación(i) + Requerimiento(i)
Continuar 🔹 Necesidad(i) = Necesidad(i) - Requerimiento(i)
❌ Si no → ERROR (se pide más que MAX(i)) 4⃣ Verificación del estado del sistema
2⃣ ¿Los recursos están disponibles? ✅ Si el sistema sigue "seguro" → Se adjudican los
✅ Si Requerimiento(i) ≤ Disponible → recursos
Continuar ❌ Si el sistema queda "inseguro" → p(i) debe esperar
⏳ Si no → Esperar (no hay recursos y se restaura el estado anterior
disponibles) 📌 Para comprobar esto, se usa el ALGORITMO DE
SEGURIDAD
Algoritmo Banquero y Seguridad
Algoritmo de segridad 3⃣ Simulación de ejecución:
1⃣ Inicialización:
● Work = Work + Asignación(i) (libera
● Work = Disponible (vector de M elementos) recursos)
● Finish(i) = Falso para todo i (procesos) ● Finish(i) = Verdadero (proceso
● Work acumula los recursos libres conforme los terminado)
procesos terminan 🔄 Repetir Paso 2
2⃣ Buscar procesos que puedan ejecutarse:
🔍 Encontrar un proceso p(i) tal que: 4⃣ Verificación final:
✅ Si Finish(i) = Verdadero para todo i →
● Finish(i) = Falso (aún no ha terminado) El sistema está en estado "SAFE"
● Necesidad(i) ≤ Work (puede ejecutarse con los ❌ Si no, el estado es "inseguro"
recursos disponibles)
❌ Si no existe p(i), ir a Paso 4 📊 Complejidad: Requiere M × N × N
operaciones
ALGORITMO DEL BANQUERO (ejemplo)
Dado un conjunto de procesos {P₀, P₁, P₂, P₃, P₄} y tres tipos de
recursos {A, B, C}:
● A dispone de 10 instancias.
● B dispone de 5 instancias.
● C dispone de 7 instancias.
Requerimiento de P(1)= <1, 0, 2 >
ALGORITMO DEL BANQUERO (ejemplo)
Para decidir que puedo garantizar la satisfacción de este requerimiento:
a) Veo que Req(i) ≤ Disponible ((1,0,2) ≤ (3,3,2))
b) Veo que Req(i) ≤ Necesidad ((1 0 2 ) ≤ (1 2 2))
c) Cumplimos el requerimiento, con lo cual se altera la información reflejando el siguiente
estado:
Asig (P1) = Req + Asig P(1)
<3 0 2> = <1 0 2> + <2 0 0>
Veamos Ahora el algoritmos de Seguridad
ALGORITMO DEL BANQUERO
(ejemplo del algoritmo de seguridad)
Paso 1: Inicialización
🔹 WORK = < 2, 3, 0 > (Disponibles)
🔹 Finish(i) = F para todo i -> [F F F F F]
Paso 2: Buscar un proceso seguro
Necesidad Work
✔ Tomamos P₁ porque < 0, 2, 0 > ≤ < 2, 3, 0 > y Finish(1) = F
✔ Actualizamos WORK:
🔹 WORK = WORK + ASIG
🔹 P₁ = < 2, 3, 0 > + < 3, 0, 2 > = < 5, 3, 2 >
✔ Marcamos P₁ como finalizado: Finish(1) = V -> [F V F F F]
ALGORITMO DEL BANQUERO
(ejemplo del algoritmo de seguridad)
Paso 2: Buscar siguiente proceso seguro
✔ Tomamos P₃ porque < 0, 1, 1 > ≤ < 5, 3, 2 > y Finish(3) =[F V F F F]
✔ Actualizamos WORK:
🔹 WORK = WORK + ASIG P₃ = < 5, 3, 2 > + < 2, 1, 1 > = < 7, 4, 3 >
✔ Marcamos P₃ como finalizado: Finish(3) = [F V F V F]
ALGORITMO DEL BANQUERO
(ejemplo del algoritmo de seguridad)
Continuamos buscando
✔ Tomamos P₄ porque < 4, 3, 1 > ≤ < 7, 4, 3 > y Finish(4) = [F V F V F]
✔ Actualizamos WORK:
🔹 WORK = WORK + ASIG P₄ = < 7, 4, 3 > + < 0, 0, 2 > = < 7, 4, 5 >
✔ Marcamos P₄ como finalizado: Finish(4) = [F V F V V]
Repetimos el proceso hasta obtener la secuencia segura:
✅ Secuencia segura encontrada: { P₁, P₃, P₄, P₀, P₂ }
Consideraciones sobre el Algoritmo del Banquero
📌 Restricciones del algoritmo
● Solo permite asignar recursos si el estado resultante es seguro.
● Existen situaciones donde se podrían asignar recursos atravesando estados inseguros sin llegar a
un deadlock, pero el algoritmo no lo permite.
⚠ Limitaciones
● Requiere una gran cantidad de información previa.
● No siempre es posible conocer de antemano si un proceso realmente necesitará lo declarado en
MAX.
💡 Pregunta clave
👉 ¿Cómo se puede estar seguro de que un proceso solicitará todos los recursos que declaró en MAX?
Algoritmo para recursos de una sola instancia
📌 Detección de Estado Seguro
● Para recursos de una sola instancia, es suficiente con
usar un grafo de asignación de recursos.
● Este grafo permite determinar si el sistema se
encuentra en un estado seguro o inseguro.
📍 Representación en el Grafo
● 🔹 Una línea punteada indica que un proceso podría
requerir un recurso.
● 🔸 Un arco dirigido representa la asignación de un
recurso a un proceso.
🔍 ¿Cómo funciona?
Si el grafo contiene un ciclo, significa que hay un posible
deadlock en el sistema.
Algoritmo para recursos de una sola instancia
Algoritmo para recursos de una sola instancia
Ejemplo de un estado
Inseguro en un grafo de
asignación de recursos.
Interbloqueo – Cómo prevenirlo
PREVENCIÓN
🔹 Exclusión Mutua
➡ Evitar recursos exclusivos cuando sea posible.
➡ Permitir acceso concurrente (ejemplo: solo lectura).
🔹 Espera y Retenido (Hold & Wait)
➡ Asignación total al inicio (previene bloqueos, pero puede causar desperdicio o inanición).
➡ Alternativa: liberar recursos antes de solicitar nuevos.
🔹 Sin Desalojo
➡ Permitir que los procesos liberen recursos si no pueden obtener todos los que necesitan.
➡ Reduce el riesgo de bloqueo, pero puede generar sobrecarga en la reasignación.
Prevención de Espera Circular
🔹 Numeración de Recursos
➡ Se asigna un número único a cada tipo de recurso.
➡ Los procesos solo pueden solicitar recursos en orden ascendente.
A cada "tipo de recurso" le asignamos un número Natural único
R = {r(1),r(2),....,r(n)}
F: R --> N
📌 Ejemplo de Asignación:
✅ F(impresora) = 1
✅ F(disco) = 5
✅ F(cinta) = 7
Prevención de Espera Circular (cont)
🔹 Reglas para la Solicitud de Recursos
✅ Un proceso solo puede solicitar un recurso r(j) sii F(r(j)) > F(r(i)) ∀i de los recursos que ya posee.
✅ Si no cumple esta condición, debe liberar todos los r(i) que cumplen F(r(i)) ≥ F(r(j)).
Es decir el proceso siempre debe solicitar los recursos en un órden creciente.
📌 Ejemplo:
● Un proceso tiene F(disco) = 5
● Puede pedir F(cinta) = 7 ✅
● No puede pedir F(impresora) = 1 ❌ (debe liberar antes el disco)
🔹 ¿Por qué evita el deadlock?
✅ Se impone un orden estricto de solicitud.
✅ No se pueden formar ciclos de espera.
✅ Siempre habrá un camino para avanzar.
Estado Seguro
🔹 Condición de Seguridad
Un sistema está en estado seguro si existe una secuencia segura de procesos que permita
asignar los recursos sin generar deadlock.
🔹 Definición Formal
Un sistema es seguro ⇔ ∃ una secuencia <p(1), p(2), ..., p(n)> tal que:
∀ p(i), los recursos que necesita pueden ser satisfechos por:
● Recursos disponibles en el sistema
● Recursos retenidos por todos los procesos p(j) con j < i
📌 Implica que siempre habrá un proceso que pueda ejecutarse y liberar recursos para los
siguientes.
Estado Seguro (un ejemplo)
📌 Recursos: 12 cintas disponibles 🔹 Asignación actual:
🔹 Máximo requerido: ● P(0) → 5 cintas
● P(1) → 2 cintas
● P(0) → 10 cintas
● P(2) → 2 cintas
● P(1) → 4 cintas
● Libres: 3 cintas
● P(2) → 9 cintas
✅ Existe una secuencia segura:
< P(1), P(0), P(2) >
Necesita Tiene ✅ Secuencia segura:
P(0) 10 5 1⃣ P(1) necesita 2 (disponibles: 3) → Se asigna y luego libera 4 (total libre: 5).
P(1) 4 2 2⃣ P(0) necesita 5 (disponibles: 5) → Se asigna y luego libera 10 (total libre: 10).
P(2) 9 2 3⃣ P(2) necesita 7 (disponibles: 10) → Se asigna y finaliza.
Estado Seguro
📌 Una secuencia segura es una simulación partiendo del estado del sistema en un
momento dado.
⚠ NO significa que los pedidos y/o liberaciones se realizarán así en el mundo real. 🚫
Estado Seguro
⚠ De SAFE a podemos pasar a UNSAFE ⚠
🔹 En el instante T(1), se asigna 1 recurso más a P(2):
📌 Estado actual:
● P(0) ⟶ 5
● P(1) ⟶ 2
● P(2) ⟶ 3
● Libres: 2
❌ Solo P(1) puede continuar, pero P(0) y P(2) quedan bloqueados.
➡ No hay secuencia segura, riesgo de Deadlock.
✅ Si se hubiera seguido la secuencia segura, esto no pasaría.
Estado Seguro
🔹 Resumiendo 🔹
✅ Deadlock ⟶ Siempre es un estado "inseguro".
⚠ Estado "inseguro" ⟶ Puede llevar a Deadlock, pero no siempre.
🔄 Esperar por un recurso libre ⟶ Reduce su utilización.
Seguro, Inseguro , Deadlock
Bibliografía
📚 Capítulo 6 – Tanenbaum, "Sistemas Operativos Modernos"
📚 Capítulo 7 – Silberschatz, "Fundamentos de Sistemas Operativos"