Abrazo mortal
Sebastián Sánchez Prieto
Sincronización de procesos 2
1999-2001 Sebastián Sánchez Prieto
Planteamiento del problema
Deriva del hecho de que en un sistema multiprogramado los procesos compiten por un conjunto limitado de recursos
Se puede, en estas condiciones, producir la situación siguiente: P0 espera por un recurso asignado a P1, el cual
espera por un recurso asignado a P2 que espera por un recurso asignado a P0
Como consecuencia, ningún proceso evoluciona Se dice que están en abrazo mortal o
interbloqueados
Sincronización de procesos 3
1999-2001 Sebastián Sánchez Prieto
Forma de utilizar un recurso
Se pide
Se usa
Se devuelve
open, malloc, P, etc.
close, free, V, etc.
Sincronización de procesos 4
1999-2001 Sebastián Sánchez Prieto
Tipos de recursos
Recursos apropiables (memoria): se pueden tomar del proceso que los posee sin producir daños
Recursos no apropiables (impresora): sólo pueden ser utilizados por un proceso a la vez
Los abrazos mortales pueden darse tanto con recursos hardware (impresora) como software (semáforos)
Cada recurso puede tener varios ejemplares Un conjunto de procesos se bloquea si cada
proceso del conjunto espera un evento que sólo puede ser provocado por otro proceso del conjunto
Sincronización de procesos 5
1999-2001 Sebastián Sánchez Prieto
Condiciones
Exclusión mutua: los recursos implicados deben ser no compartibles
Posesión y espera: deben existir procesos que tienen asignados recursos y están esperando por otros recursos asignados a otros procesos
No apropiación: los recursos son liberados voluntariamente. No hay requisa
Espera circular: P0 espera por P1, P1 por P2, P2 por P3, ..., Pn-1 por Pn y Pn por P0
Si no se producen las cuatro condiciones de forma simultánea, no existe el abrazo mortal
Sincronización de procesos 6
1999-2001 Sebastián Sánchez Prieto
Grafo de asignación de recursos
Sirven para describir el abrazo mortal Consta de un conjunto de vértices (V) y un conjunto
de flechas (F) Dos tipos de vértices:
Procesos P = {P1, P2, ... Pn} y
Recursos R = {R1, R2, ..., Rm} Dos tipos de flechas:
De asignación Rj Pi
De petición Pi Rj
Sincronización de procesos 7
1999-2001 Sebastián Sánchez Prieto
Ejemplo
P1
P2 P3
R1 R2
R3
Sincronización de procesos 8
1999-2001 Sebastián Sánchez Prieto
Ejemplo
Si en el grafo no existen ciclos se puede demostrar que no existe abrazo mortal, pero si existen ciclos, éste puede aparecer
P1
P2
R1 R2
Sincronización de procesos 9
1999-2001 Sebastián Sánchez Prieto
Cómo prevenir el abrazo mortal
Solución: eliminar una cualesquiera de las cuatro condiciones necesarias para que éste se produzca
Exclusión mutua En general no podremos modificar este aspecto Razón: existen recursos intrínsecamente no
compartibles
Sincronización de procesos 10
1999-2001 Sebastián Sánchez Prieto
Cómo prevenir el abrazo mortal
Posesión y espera Métodos:
Los procesos al comienzo de su ejecución solicitan todos los recursos que van a necesitar
Conceder recursos sólo a los procesos que no poseen ninguno. Antes de pedir un recurso tiene que liberar los que en este momento posee
Problemas: baja utilización de los recursos y posible inanición
Sincronización de procesos 11
1999-2001 Sebastián Sánchez Prieto
Cómo prevenir el abrazo mortal
No apropiación Método: si un proceso solicita un recurso, y éste
no está disponible, nos apropiamos de todos los recursos que posee
Problema: existen recursos que no pueden ser asignados y retirados cuando nos de la gana
Sincronización de procesos 12
1999-2001 Sebastián Sánchez Prieto
Cómo prevenir el abrazo mortal
Espera circular Método: asignamos a cada recurso un número
natural N que lo diferencie del resto Si obligamos a que los procesos soliciten los
recursos en orden creciente acorde a sus números, nunca puede producirse el abrazo mortal
Sincronización de procesos 13
1999-2001 Sebastián Sánchez Prieto
Métodos alternativos
Los métodos que describiremos van a ser más efectivos, a costa de mantener mayor información
En función de esa información, podremos proponer diversos algoritmos para evitar el bloqueo
Los algoritmos más sencillos y efectivos se basan en conocer la cantidad máxima de recursos que va a necesitar cada proceso
En función de esa cantidad máxima de recursos y del estado actual de asignación, el algoritmo determinará si las nuevas solicitudes son satisfechas o no, con objeto de evitar los estados inseguros
Sincronización de procesos 14
1999-2001 Sebastián Sánchez Prieto
Manejo de abrazo mortal
¿Qué se puede hacer con el abrazo mortal? Preasignación de recursos Asignación con restricciones Detección y recuperación Ignorarlo
La última alternativa es la más simple y la menos efectiva, pero quizás sea la más ampliamente utilizada
Sincronización de procesos 15
1999-2001 Sebastián Sánchez Prieto
Preasignación de recursos
Cuando un proceso comienza determina los recursos que va a usar
Cuando todos estén disponibles, comienza Utilizado en el sistema OS/360 Inconvenientes:
Es necesario conocer a priori los recursos que se van a emplear
Puede que algún recurso solicitado no se emplee Se obtiene una baja utilización de los mismos
Sincronización de procesos 16
1999-2001 Sebastián Sánchez Prieto
Asignación con restricciones
El usuario está obligado a establecer a priori qué recursos va a utilizar
Al contrario que en el caso anterior, el proceso comienza su ejecución y se le van asignando recursos dinámicamente
Antes de asignar los recursos se comprueba que el sistema permanece en un estado seguro
¿Qué es un estado seguro?
Sincronización de procesos 17
1999-2001 Sebastián Sánchez Prieto
Estado seguro
Se dice que un estado es seguro si el sistema puede asignar, en algún orden, recursos a los procesos evitando el abrazo mortal
Proceso Necesidad máxima Asignados
P1
P2
P3
9
7
3
3
4
1
Si inicialmente tenemos 8 ejemplares del recurso la secuencia <P3, P2, P1> permite la finalización de los tres procesos
Sincronización de procesos 18
1999-2001 Sebastián Sánchez Prieto
Ejemplos
Proceso Necesidad máxima Asignados
P1
P2
P3
10
9
5
3
4
2
P4 3 2
Caso 1: 1 recurso libre. ¿Estado seguro?
Proceso Necesidad máxima Asignados
P1
P2
P3
10
9
4
3
4
2
P4 7 2
Caso 2: 2 recursos libres. ¿Estado seguro?
Sincronización de procesos 19
1999-2001 Sebastián Sánchez Prieto
Estados seguro e inseguro
Los estados inseguros no siempre conducen a un abrazo mortal
Un estado con un abrazo mortal es un estado inseguro
Si los estados son seguros el sistema operativo evita los abrazos mortales
Estadoseguro
Estadoinseguro
Abrazomortal
Sincronización de procesos 20
1999-2001 Sebastián Sánchez Prieto
Algoritmo del banquero
Se denomina así porque puede utilizarse en un banco para asegurar que el banco siempre disponga del suficiente dinero efectivo para satisfacer la necesidad de todos sus clientes
Cuando un proceso inicia su sesión, debe declarar la máxima cantidad de recursos que va a necesitar
Si esta cantidad es mayor que la cantidad disponible, el proceso no se puede ejecutar
A partir de este punto, el sistema asignará los recursos, manteniéndose siempre en un estado seguro
Sincronización de procesos 21
1999-2001 Sebastián Sánchez Prieto
Estructuras de datos necesarias
Disponibles: es un vector de longitud m que indica el número de recursos disponibles de cada tipo
Si Disponible[i]=k, quiere decir que hay k ejemplares del recurso Ri disponibles
Máximo: es una matriz de n x m elementos que define la máxima demanda de recursos de cada proceso
Si Máximo[i,j]=k, Entonces el proceso Pi puede requerir hasta un máximo de k ejemplares del recurso Rj
Sincronización de procesos 22
1999-2001 Sebastián Sánchez Prieto
Estructuras de datos necesarias
Asignados: es una matriz de n x m elementos que define el número de ejemplares de cada recurso que están asignadas en ese momento
Si Asignados[i,j]=k quiere decir que el proceso Pi tiene asignados k ejemplares del recurso Rj
Necesitados: es una matriz de n x m elementos que indica el número de ejemplares necesitados por cada uno de los procesos en un instante determinado
Si Necesitados[i,j]=k, entonces el proceso Pi necesita k ejemplares más del recurso Rj
Sincronización de procesos 23
1999-2001 Sebastián Sánchez Prieto
Notación
Obsérvese que: Necesitados[i,j] = Max[i,j] - Asignados[i,j]
Si X e Y son dos vectores de longitud n, entonces X<=Y si y sólo si X[i]<=Y[i] para todo i
Cada columna de las matrices Necesitados y Asignados representa la situación de cada uno de los procesos
Así Necesitadosi indica todas las instancias de cada recurso necesitadas por el proceso Pi
Sincronización de procesos 24
1999-2001 Sebastián Sánchez Prieto
Algoritmo del banquero
1. Si Pedidosi <= Necesitadosi ir al paso 2 si no error
2. Si Pedidosi <= Disponiblesi ir al paso 3 si no el proceso debe esperar hasta que los recursos estén disponibles
3. Disponibles = Disponibles - Pedidosi
Asignadosi = Disponiblesi + Pedidosi
Necesitadosi = Necesitadosi - Pedidosi
4. Si el estado resultante es seguro al proceso se le asignan los recursos, si no es seguro el proceso debe esperar y se restaura el estado de los recursos
Sincronización de procesos 25
1999-2001 Sebastián Sánchez Prieto
Algoritmo de seguridad
Sean DisponiblesAux y Terminado dos vectores de longitudes m y n respectivamente
1. Inicialmente DisponiblesAux=Disponible y Terminado[i]=FALSE para todo i
2. Encontrar un i que cumpla las condiciones:
a. Terminado[i]=FALSE
b. Necesitadosi<=DisponiblesAux
Si no existe tal i, pasar al paso 4.
3. DisponiblesAux=DisponiblesAux+Asignadosi
Terminado[i]=TRUE
Ir al paso 2
4. Si Terminado[i]=TRUE para todo i, entonces el sistema está en estado seguro
Sincronización de procesos 26
1999-2001 Sebastián Sánchez Prieto
Algoritmo de petición de recursos
Sea Peticioni el vector de peticiones asignado a Pi
Si Peticioni[j]=k, entonces Pi quiere k ejemplares de Rj
Cuando llega una nueva petición de recursos por parte de P i:
1. Si Peticioni <= Necesitadosi, ir al paso 2. Si no, error, superado el máximo de peticiones de Pi.
2. Si Peticioni <= Disponible, ir al paso 3. Si no, Pi debe esperar hasta que se liberen recursos.
3. Realizar lo siguiente:
Disponible=Disponible-Peticioni
Asignados=Asignados+Peticioni
Necesitados=Necesitados-Peticioni
Si el estado es seguro, se asignan recursos a P i, si no Pi espera
Sincronización de procesos 27
1999-2001 Sebastián Sánchez Prieto
Proceso MáximoAsignados
P1
P2
P3
3 2 2
9 0 2
2 2 2
2 0 0
3 0 2
2 1 1
P4 4 3 30 0 2
P0 0 1 0
A B C A B C
7 5 3
Disponible
A B C
3 3 2
Necesitados
1 2 2
6 0 0
0 1 1
4 3 1
A B C
7 4 3
Ejemplo El recurso A tiene 10 ej., B tiene 5 y C tiene 7 ¿Estado seguro?
SÍ: La secuencia <P1, P3, P4, P2, P0> satisface el criterio o algoritmo de seguridad
Sincronización de procesos 28
1999-2001 Sebastián Sánchez Prieto
Proceso MáximoAsignados
P1
P2
P3
3 2 2
9 0 2
2 2 2
3 0 2
3 0 2
2 1 1
P4 4 3 30 0 2
P0 0 1 0
A B C A B C
7 5 3
Disponible
A B C
2 3 0
Necesitados
0 2 0
6 0 0
0 1 1
4 3 1
A B C
7 4 3
Ejemplo
Consideremos la petición: Peticion1=(1, 0, 2) con ello tenemos el siguiente nuevo estado:
¿Estado seguro? SÍ: Secuencia <P1, P3, P4, P0, P2>
¿Qué ocurriría si ahora Peticion4=(3,3,0)?
¿Y con Peticion0=(0,2,0)?
Sincronización de procesos 29
1999-2001 Sebastián Sánchez Prieto
Detección del abrazo mortal
Si un sistema no emplea una prevención de los abrazos mortales puede ocurrir un abrazo. Entonces el sistema debe proporcionar: Un algoritmo para examinar cada estado del
sistema Un algoritmo para recuperarse de los abrazos
Un algoritmo de detección y recuperación necesita mantener cierta información
Además existen ciertas pérdidas cuando nos recuperamos de un abrazo (i. e. tiempo que los procesos no se ejecutan)
Sincronización de procesos 30
1999-2001 Sebastián Sánchez Prieto
Sólo válido cuando el # de ejemplares x recurso = 1 Generación del grafo de espera
Detección mediante grafo de espera
P1
P2
P3
R1R2
R3 P4
R4
P4P1
P2 P3
Si en el grafo de espera no hay bucles -> no hay interbloqueo
Sincronización de procesos 31
1999-2001 Sebastián Sánchez Prieto
Detección general
Como algoritmo de detección se puede emplear una variante del algoritmo de seguridad visto anteriormente
Estructuras de datos: Disponibles: es un vector de longitud m que indica
el número de recursos disponibles Asignados: es una matriz de n x m elementos que
define el número de ejemplares de cada recurso que están asignadas en ese momento
Solicitados: es una matriz de n x m elementos que indica el número de ejemplares solicitados por cada proceso
Sincronización de procesos 32
1999-2001 Sebastián Sánchez Prieto
Algoritmo
1. Inicialmente DisponiblesAux=Disponible.
2. Para cada proceso si Asignadosi!=0 Terminado[i]=FALSE, en otro caso Terminado[i]=TRUE
3. Encontrar un i que cumpla las condiciones:
a. Terminado[i]=FALSE
b. Solicitadosi<=DisponiblesAux
Si no existe tal i, pasar al paso 5
4. DisponiblesAux=DisponiblesAux+Asignados i
Terminado[i]=TRUE
Ir al paso 3
5. Si al terminar tenemos algún proceso con Terminado[i]=FALSE, estos procesos se encontrarán en abrazo mortal
Sincronización de procesos 33
1999-2001 Sebastián Sánchez Prieto
Recuperación del abrazo mortal
Avisar al operador y dejar que decida Terminación de procesos
Abortar todos los proceso implicados Ir abortando procesos uno a uno hasta que
eliminemos el abrazo mortal Se abortan aquellos procesos cuya terminación
conlleva menor coste Abortar un proceso no es fácil ->p.e. se pueden
producir errores si se está guardando un fichero Apropiación de recursos
Sincronización de procesos 34
1999-2001 Sebastián Sánchez Prieto
Criterios para elegir víctimas
Prioridad de los procesos Cuánto tiempo se ha ejecutado y cuánto le queda
para terminar Cuántos y qué tipo de recursos ha usado Cuántos recursos necesita para terminar Cuántos procesos deben ser terminados Tipo de proceso: interactivo o bach