SlideShare una empresa de Scribd logo
1 de 14
Descargar para leer sin conexión
Interbloqueo (Sistema Operativo)
En sistemas operativos, el bloqueo mutuo (también conocido como
interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo
permanente de un conjunto de procesos o hilos de ejecución en un sistema
concurrente que compiten por recursos del sistema o bien se comunican
entre ellos. A diferencia de otros problemas de concurrencia de procesos,
no existe una solución general para los interbloqueos.
Todos los interbloqueos surgen de necesidades que no pueden ser
satisfechas, por parte de dos o más procesos. En la vida real, un ejemplo
puede ser el de dos niños que intentan jugar al arco y flecha, uno toma el
arco, el otro la flecha. Ninguno puede jugar hasta que alguno libere lo que
tomó.
En el siguiente ejemplo, dos procesos compiten por dos recursos que
necesitan para funcionar, que sólo pueden ser utilizados por un proceso a la
vez. El primer proceso obtiene el permiso de utilizar uno de los recursos
(adquiere el locksobre ese recurso). El segundo proceso toma el lock del
otro recurso, y luego intenta utilizar el recurso ya utilizado por el primer
proceso, por lo tanto queda en espera. Cuando el primer proceso a su vez
intenta utilizar el otro recurso, se produce un interbloqueo, donde los dos
procesos esperan la liberación del recurso que utiliza el otro proceso.
Administración de procesos
Necesidad: La sincronización de procesos creados por diferentes equipos de
programadores, está a cargo del sistema operativo
Definiciones
Interbloqueo:
Se dice que dos o más procesos están bloqueados, cuando están
suspendidos en espera de un evento que sólo puede ser activado por uno de
los procesos bloqueados, y por lo tanto dicho evento nunca sucederá
Postergación indefinida o Inanición (Starving)
Se dice que uno o más procesos están en postergación indefinida cuando la
política de planificación del sistema permite que un proceso quede en
espera de un evento por un tiempo indefinido. Esto puede suceder, por
ejemplo, cuando la asignación de recursos se realiza por prioridad. De este
modo un proceso de baja prioridad estará suspendido mientras existan otros
procesos de mayor prioridad.
Envejecimiento: aumentar la prioridad de los procesos conforme pasa el
tiempo
Clasificación de recursos
Para el estudio del interbloqueo, los recursos se pueden clasificar en:




Compartido/exclusivos: Se dice que un recursos es compartido si
puede ser utilizado por más de un proceso al mismo tiempo. Son
exclusivos los que pueden ser utilizados sólo por un proceso a la vez
Apropiativos/inapropiativos: Son apropiativos los recursos asignados
a un proceso, que pueden ser desasignados del proceso, por al
sistema para asignarlos a otro proceso.

Los recursos involucrados en los interbloqueos son los exclusivos e
inapropiativos
Condiciones necesarias para el interbloqueo
Coffman, Elphuck y Shoshani, establecieron cuatro condiciones, necesarias
y suficientes, para que se dé un interbloqueo:
Exclusión mutua
Si dos procesos solicitan un recurso exclusivo, uno de los dos quedará
suspendido hasta que el favorecido libere el recurso.
Contención o retención y espera
Si un proceso necesita más de un recurso para realizar su trabajo,
conservará en su poder los recursos exclusivos ya asignados, mientras
espera por otro recurso adicional.
Inapropiatividad
Los recursos asignados a un proceso, sólo pueden ser liberados por el
proceso mismo y no pueden ser desasignados por el sistema, cuando otro
proceso los necesite.
Espera circular
Dependencia: Si un proceso P1 está suspendido en espera de un recurso
exclusivo que está asignado a otro proceso P2, entonces decimos que P1
depende de P2 (P1 <= P2).
Espera circular: Existe una cadena circular de procesos en espera de un
recurso, si existe una cadena de dependencias entre procesos de la forma
P1 <= P2 <= P3 <= ... <= Pn <= P1
Ejemplos:
Asignación de recursos sin ciclos
Asignación de recursos con espera circular e interbloqueados

Formas de enfrentar los interbloqueos
Existen varias políticas y estrategias que el sistema operativo puede tomas,
para tratar con los interbloqueos:


Indiferencia:Problema del usuario y del programador, lograr que no se dé el
interbloqueo.






Prevención:Consisten en condicionar el sistema con una serie de
restricciones a los programadores, para que no se den al menos una de las
condiciones del interbloqueo, por lo que éste nunca sucederá.
Evitación o predicción: Esta estrategia consiste en dejar que las condiciones
para el interbloqueo se puedan dar, pero en el momento de asignar
recursos, y se detecte que puede ocurrir un interbloqueo, deniega la
asignación del recurso que puede desencadenar el interbloqueo.
Detección y recuperación: En esta política, el sistema deja que suceda el
interbloqueo, pero se implementan procesos encargados de revisar el
estado de asignación de los procesos, para detectar los interbloqueo. Una
vez detectado, se pueden implementar políticas de recuperación de
interbloqueo, que básicamente consisten en matar procesos.
Indiferencia (algoritmo del avestruz)




o



Simple y eficiente, dado que el sistema operativo no gasta procesador ni
recursos en el manejo del interbloqueo. Usualmente es la política preferida
en los sistemas actuales
El costo esperado de un interbloqueo suele ser muy bajo
Costo esperado = Probabilidad (desastre) * Costo (desastre)
Sólo se deben proporcionar herramientas para revisar el estado de los
procesos
complica el trabajo del operador
Prevención (Estrategias de Havender/Prevención estática)
Se pueden adoptar ¿4? posibles estrategias de prevención del interbloqueo,
una para cada condición. Ya que para se dé un interbloqueo son necesarias
las cuatro, con negar una de ellas, se niega la posibilidad del interbloqueo:
Negación de la exclusividad





Sólo se aplica a recursos compartidos, es muy difícil poder aplicarlo a todos
los recursos, dado que hay recursos que son inherentemente de uso no
compartido.
Uso de spoolers: dar un API concurrente (compartido) a los procesos para
accesar recursos. La estrategia básica es que un servicio del sistema
(daemon) proporciona un API, y ese servicio es el único que accesa el
recurso compartido, exclusivo. Ej: una impresa es un recurso exclusivo e
inapropiativo, pero con el uso de un spooler se convierte en un recurso
compartido.


Test & Get: un API especial que permite revisar primero si el recurso está
disponible, y pedirlo, o retornar un código de error que indica que no está
disponible. Requiere que los procesos hagan uso de este API.
Negación de la contención











Estrategia 1: El proceso pide al sistema TODOS los recursos a necesitar
antes de iniciar su proceso (todo o nada). No siempre se sabe cuántos
recursos se utilizarán.
Estrategia 2: También puede establecerse que un procesos puede pedir
recursos cuando no tiene recursos asignados
No siempre se conoce la cantidad de recursos que se necesitará, por lo que
lo que el operador debe configurar, por prueba y error, lograr que los
procesos funcionen adecuadamente
Obliga a optimizar los programas por medio de división. El programador de
modularizar extremadamente bien los procesos para utilizar los recursos
por fases, de forma que para cada fase, se piden los recursos y se liberan,
antes de la siguiente fase
La utilización de recursos resulta muy pobre
Puede resultar una postergación indefinida de un proceso que requiera
muchos recursos
Negación de la inapropiatividad







Si un proceso que tiene recursos asignados, pide un nuevo recurso que no
está disponible, deberá liberar los recursos asignados y pedirlos
posteriormente.
Sólo se aplica a recursos apropiativos y recursos que se pueden almacenar
su estado para reasignarlo, o que puedan hacerles rollback
puede llevar a que la ejecución de un proceso se prolongue indefinidamente,
debido a que nadie puede garantizar que termine en un tiempo determinado.
Pobre utilización del tiempo de procesamiento
Negación de la espera circular




Se impone un orden a los recursos
Cada proceso sólo puede pedir los recursos en orden ascendente (o
descendente)
Tiemporequerimientos P1
t1

P2

P3

R1 (ok)

t2

R2 (ok)

t3
t4

R3 (ok)
R2 (*)

t5

R3 (*)

t6

R1 (*)

P1 => P2 => P3 => P1
Tiemporequerimientos P1
t1

P2

R1 (ok)

t2

R2 (ok)

t3
t4

P3

R1 (*)
R2 (*)

t5

R3 (ok)

ti

FINALIZA

ti

DESPIERTA

Tj

FINALIZA

DESPIERTA

Tj+1

R3 (ok)

Tn

FINALIZA

DEMOSTRACIÓN:
P0 => P1 => P2 => … => Pn => P0
Para que haya una dependencia de Pi A Pj, significa que Pi tiene asignados
recursos <= k, y está pidiendo un Rk+1, el cual está asignado a Pj, lo que
significa que Pj tiene asignados recursos >= k+1, por lo tanto Pn ¡=> P0
En general las técnicas de prevención, aunque logran su objetivo de eliminar
los interbloqueos, provocan una pobre utilización de los recursos,
incluyendo el procesador. También el algunos casos, provocan postergación
indefinida.
Evitación o Predicción ( Estrategias de Dijkstra, Habermann)
Con la evitación no se tienen reglas estáticas a los procesos, sino que el
sistema operativo analiza cada petición de recursos y determina si el
sistema quedará en un estado estable o inestable, en este último caso, se
deniega la petición, posponiéndola temporalmente.
Conceptos
La evitación se basa en los siguientes conceptos:






Estado de asignación de recursos:Número de recursos asignados,
disponibles y máximo de recursos posibles por proceso.
Secuencia segura:Secuencia de finalización de procesos, tal que todos los
procesos puedan finalizar exitosamente, iniciando en un determinado estado
de asignación de recursos
Estado seguro de asignación de recursos:Estado de asignación de recursos,
donde existe al menos una secuencia segura.
Estado inseguro de asignación de recursos: No existe ninguna secuencia
segura. Obsérvese, que aunque un estado inseguro no implica que exista
interbloqueo, talvez una secuencia determinada de eventos lleve a uno.
Algoritmo del banquero (Dijkstra, Habermann)
En este algoritmo, de evitación en general procede así:




Necesita que cada proceso declare el máximo número de recursos a utilizar
En cada requerimiento, determina si el asignar los recursos pedidos deja
un estado inseguro de asignación de recursos, entonces se pospone el
requerimiento. De lo contrario se asignan los recursos solicitados.

Procedimiento de asignación
Cuando un proceso solicita recursos, el sistema operativo procede así:
1. Determinar si hay disponibles
2. Determinar que no exceda su máximo declarado
3. Determinar que, si se concede la petición, el sistema quede en estado
seguro
Si no se cumple cualquiera de estas condiciones, el proceso queda
suspendido hasta que exista una liberación de recursos.
Estructuras de datos:
sea m el número de tipos de recursos y n el número de procesos
int disponible [m] ; unidades de R j disponibles
int max[n][m]; máximo número de requerimientos del proceso Pi del

recurso Rj
int asignado [n][m]; asignación actual del proceso P i del recurso Rj
int necesario [n][m]; necesario [i][j] = max [i][j] - asignados[i][j]
int requerimiento[m]; vector de requerimiento de cada petición de
recursos//
Relación <= entre vectores
si x in N m , y in N m : x <= y ssi para todo i = 0,...,m-1 : x[i] <= y[i]
Por ejemplo:
<1,1,1> <= <2,5,7>
<1,1,1> NO <= <2,0,7>
Algoritmo
void requerimiento_de_recursos (int requerimiento[], idProceso i) {
if (requerimiento >= necesario[i] )
error () ; máximo de recursos estimados agotados

i f (requerimiento >= disponible)
suspender () ; recursos no disponibles
disponible -= requerimiento;
asignado [i] += requerimiento;
necesario[i] -= requerimiento;
if (! estado_seguro ()) {

regresamos al estado anterior
disponible += requerimiento;
asignado[i] -= requerimiento;
necesario[i] += requerimiento;
suspender () ;
}
}
int estado_seguro() {
int disp_temp = disponible;
bool terminado[n] = (FALSE,...,FALSE);
int i;
encontrar un p[i] tal que terminado[i] = FALSE y necesario[i] <= disponible
while (terminado!=(TRUE,...TRUE)){
for (i=0; (i < n && terminado[i]) || necesario[i] > disp_temp); i++) {
if (i == n-1) {
return FALSE;
}else
if (!terminado[i]){
disp_temp += asignados[i] ;
terminado[i] = TRUE;
} if
} for
} while

return TRUE ;
}estado_seguro
Ejemplo
procesorecurso R1 (7) R2(7) R3(7)
Maximos

P1

5

3

1

P2

3

2

3

P3

2

3

1

P4

5

0

3

Asignados P1

3

3

1

P2

2

2

2

P3

0

1

1

P4

0

0

1

Necesarios P1

2

0

0
P2

1

0

1

P3

2

2

0

P4

5

0

2

2

1

2

Disponibles

Sobre este estado de asignación de recursos (qué es estable ¿?)
supongamos las siguiente peticiones de recursos:



P2[1,0,1]:El sistema queda en un estado seguro
P3[2,0,0]:El sistema queda en un estado inseguro

Desventajas




necesita el conocimiento del máximo por recurso que usará cada proceso
implica un retardo en cada asignación de recursos, lo que puede degradar el
sistema si se manejan muchos recursos y/o procesos
Se requiere una garantía de devolución: c/proceso liberará los recursos
asignados. (suponga que después de hacer la primera asignación de
recursos, el proceso P2 no termina, entonces ninguno de los procesos
podría terminar, sin necesidad de que haya interbloqueo.
Detección y recuperación






El sistema no impone ninguna clase de reglas para prevenir o evitar el
interbloqueo
Se puede tener un proceso de fondo o de activación manual que analice las
estructuras del sistema operativo y determine si existe o no un
interbloqueo.
Una vez detectado el interbloqueo se procede a la recuperación, que puede
ser automática o manual. Básicamente consiste en matar un proceso
Podría utilizar si no es muy costoso que haya un interbloqueo (el costo es
menor que el costo de implementar una de las otras políticas de
interbloqueo.
Normalmente sería utilizado como herramienta de diagnóstico y
recuperación
Detección por reducción de grafos de asignación
Detección por ciclos de espera
La técnica más sencilla para detectar un interbloqueo es deducir un grafo
dirigido de dependencias entre proceso por medio de las colas de espera en
cada recurso y determinar si existen un ciclo en dicho proceso.
Por ejemplo, en la siguiente gráfica, al lado izquierdo, se tiene un grafo del
estado actual de asignación de recursos y a la derecha vemos el grafo de
espera entre procesos. Como se puede apreciar, existe un ciclo en en grafo
de espera, por lo tanto existe un interbloqueo.

Condiciones necesarias para la detección
1. Conocer los procesos: acceso al PCB
2. Conocer los recursos: acceso a la tabla de recursos del sistema
3. Conocer la asignación: debemos poder saber qué recursos está asignado
a cada proceso
4. Conocer la espera: debemos poder saber en que recursos está esperando
(suspendido) un proceso
Recuperación
Una vez que se detecta un interbloqueo, corresponde la decisión sobre la
recuperación del sistema sobre ese interbloqueo, que básicamente se trata
de matar un proceso y recuperar sus recursos.
Esta recuperación puede ser manual o automática. La recuperación
automática es un tema difícil, ya que no se pueden establecer, fácilmente,
condiciones determinísticas para saber cuál es el proceso más adecuado de
eliminar. Existen algunas posibilidades:


El proceso con más recursos: se libera la mayor cantidad cantidad de
recursos, lo que permite continuar a la mayor cantidad de procesos. Se
deshace el "nudo" principal. Sin embargo tiene la desventaja que
normalmente será el proceso más importante, lo que implica el mayor daño,



o el mayor tiempo de repetición.
El proceso con menos recursos: se busca el menor daño, pero puede ser
que pocos procesos puedan continuar.
El proceso que esté involucrado en más ciclos o interbloqueos: se deshace
el mayor número de interbloqueos.
Sin embargo, hay que tomar en cuenta un criterio subjetivo: la
importancia del proceso, lo cual no está dado ni por la cantidad de recursos
que tiene asignados el proceso ni el número de interbloqueos en que está
involucrado. Lo cuál hace de la recuperación manual, una forma muy
recomendable, siempre y cuando se cuente con un operador entrenado en el
funcionamiento de los procesos del usuario.
Herramientas para el interbloqueo en los sistemas operativos existentes
SOLARIS
Utiliza la herramienta CAT (Crash Analysis Tool), que es parte del entorno
del sistema, y ayuda a analizar los archivos centrales del sistema. Esta
herramienta consiste en analizar la salida del desplome o error que se dio.
Esta herramienta genera archivos de salida en los cuales se describen las
causas que provocaron este estado en el sistema.
LINUX
Utiliza las siguientes herramientas:
GDB: Es una herramienta de rastreo y debugeo del kernel, con la
información obtenida en un error en el sistema.
INGO: Es un “perro guardián” que sirve para detectar y reportar los
interbloqueos.
SYSREQ: Permite observar las tareas, procesos y registros dentro del
kernel en caso de fallo.
KDB: Es un debugeador del kernel en línea de comando que sirve para
inspeccionar el estado de los procesos.
WINDOWS
Utiliza las siguientes herramientas:
WINDBG:
DBGMON:
I386KD: Es utilizado para cargar el archivo MEMORY.DMP, el que fue
generado por una computadora con WINDOWS NT. Este archivo contiene
información que puede ser observada para verificar la integridad del
sistema.
KD:
En general, la mayoría de herramientas sirven para observar el estado del
sistema, ya sea por el kernel o por archivos generados conteniendo la
información, y así poder saber el estado del sistema y que situaciones,
procesos y recursos se encuentran involucrados en llevar al sistema a su
estado actual.
Verifier.exe:a partir de WinXp, detecta interbloqueos en drivers
En Windows® XP La detección se presentó por medio del control orientado
a excepciones, que permite interceptar la cadena de control de excepciones
con propósitos de registro y diagnóstico. En Windows Vista™ Windows
Vista tiene una nueva API muy interesante denominada Cruce encadenado
con esperas (WCT). API Cruce permite determinar cuándo y por qué se
produce interbloqueo en un proceso. WCT notifica exactamente en qué
objeto de sincronización se encuentra el interbloqueo. Pero esta sólo
notifica un conjunto limitado de primitivas de sincronización. Aun con esta
limitante, resulta una API muy útil y que deseará tener en su kit de
herramientas de depuración. API de WCT Uso y sus limitaciones Uso
examina si un subproceso se encuentra en espera en una llamada de
bloqueo. Si el subproceso se encuentra en una llamada de bloqueo, busca el
objeto que el subproceso bloquea y determina, si es apropiado, el nombre
del objeto y qué subprocesos o procesos poseen ese objeto. Por ejemplo, si
el subproceso A espera que el proceso B complete la ejecución y el proceso
B invoca SendMessage para el proceso A, existe un interbloqueo que WCT
puede detectar y notificar. Limitaciones El único problema que observo con
la API de WCT es que no notifica interbloqueos cuando se usa
WaitForMultipleObjects, lo que reduce su utilidad en muchas aplicaciones.
Por ejemplo, la sincronización .NET usa WaitForMultipleObjects para toda la
coordinación de sincronizaciones. Aunque WCT no notificará que se produjo
un interbloqueo en el subproceso, notificará que el subproceso está
bloqueado. Lla API de WCT puede notificar los periodos de espera, por lo
que se puede decidir manualmente si se produjo interbloqueo en un
subproceso específico, a través de la inspección y comparación con una
herramienta como LockWatcher (parte de la descarga de código de este
artículo). WCT es una API típica de Win32®, lo cual significa que tiene que
obtener un identificador opaco, pasar ese identificador al método que
registra los datos y llamar a un formulario de CloseHandle cuando finalice.
La documentación del SDK de la plataforma muestra todo lo que se necesita
para inicializar y usar la API de WCT. En la inicialización, siempre deberá
llamar a la función RegisterWaitChainCOMCallback para registrar las
funciones COM CoGetCallState y CoGetActivationState para que WCT pueda
notificar al propietario COM. Dado que estas funciones no están
documentadas, necesitará obtenerlas de ole32.dll a través de
GetProcAddress. Para inicializar WCT, se debe usar la funcion
OpenThreadWaitChainSession exportada de advapi32.dll:

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Sistemas Operativos - Semáforos
Sistemas Operativos - SemáforosSistemas Operativos - Semáforos
Sistemas Operativos - Semáforos
 
Mecanismo de sincronización de procesos
Mecanismo de sincronización de procesosMecanismo de sincronización de procesos
Mecanismo de sincronización de procesos
 
Interbloqueo sistemas operativos
Interbloqueo  sistemas operativosInterbloqueo  sistemas operativos
Interbloqueo sistemas operativos
 
Interbloqueos
InterbloqueosInterbloqueos
Interbloqueos
 
Bloqueos mutuos
Bloqueos mutuosBloqueos mutuos
Bloqueos mutuos
 
Interbloqueos
InterbloqueosInterbloqueos
Interbloqueos
 
Programación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVAProgramación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVA
 
Control de concurrencias investigación
Control de concurrencias investigaciónControl de concurrencias investigación
Control de concurrencias investigación
 
Ejemplo dfd
Ejemplo dfdEjemplo dfd
Ejemplo dfd
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 
Unidad 2 concepto de Programa,Proceso y Procesador
Unidad 2  concepto de Programa,Proceso y ProcesadorUnidad 2  concepto de Programa,Proceso y Procesador
Unidad 2 concepto de Programa,Proceso y Procesador
 
Algoritmo de dekker
Algoritmo de dekker Algoritmo de dekker
Algoritmo de dekker
 
Sistemas operativos procesos
Sistemas operativos   procesosSistemas operativos   procesos
Sistemas operativos procesos
 
Procesos e hilos_parte_3
Procesos e hilos_parte_3Procesos e hilos_parte_3
Procesos e hilos_parte_3
 
Java Threads (Hilos en Java)
Java Threads (Hilos en Java)Java Threads (Hilos en Java)
Java Threads (Hilos en Java)
 
RAID
RAIDRAID
RAID
 
control de concurrencia
control de concurrenciacontrol de concurrencia
control de concurrencia
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Estados de un proceso
Estados de un procesoEstados de un proceso
Estados de un proceso
 
Algoritmo del baquero
Algoritmo del baqueroAlgoritmo del baquero
Algoritmo del baquero
 

Similar a Interbloqueo

Similar a Interbloqueo (20)

Bloqueo mutuo
Bloqueo mutuoBloqueo mutuo
Bloqueo mutuo
 
Modulo 2 interbloqueos
Modulo 2 interbloqueosModulo 2 interbloqueos
Modulo 2 interbloqueos
 
Bloqueos _
Bloqueos _Bloqueos _
Bloqueos _
 
Kelly salina sistemas operativos
Kelly salina sistemas operativosKelly salina sistemas operativos
Kelly salina sistemas operativos
 
Kelly
KellyKelly
Kelly
 
Kelly salina
Kelly salinaKelly salina
Kelly salina
 
Kelly
KellyKelly
Kelly
 
Kelly sistemas operativos
Kelly  sistemas operativosKelly  sistemas operativos
Kelly sistemas operativos
 
Kelly salina
Kelly salinaKelly salina
Kelly salina
 
Unidad 2 sistemas operativos 2011
Unidad 2  sistemas operativos 2011Unidad 2  sistemas operativos 2011
Unidad 2 sistemas operativos 2011
 
Interbloqueos
InterbloqueosInterbloqueos
Interbloqueos
 
Unidad 2 sist. oper. 1
Unidad 2 sist. oper. 1Unidad 2 sist. oper. 1
Unidad 2 sist. oper. 1
 
Capitulo2
Capitulo2Capitulo2
Capitulo2
 
(2) Arquitectura del SO (generalidades).pdf
(2) Arquitectura del SO (generalidades).pdf(2) Arquitectura del SO (generalidades).pdf
(2) Arquitectura del SO (generalidades).pdf
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Bloqueo muto
Bloqueo mutoBloqueo muto
Bloqueo muto
 
Interbloqueosproyect ofinall
Interbloqueosproyect ofinallInterbloqueosproyect ofinall
Interbloqueosproyect ofinall
 
1modulo2seccion5
1modulo2seccion51modulo2seccion5
1modulo2seccion5
 
Interbloqueosproyect ofinal
Interbloqueosproyect ofinalInterbloqueosproyect ofinal
Interbloqueosproyect ofinal
 
U n i d a d 2 sist oper
U n i d a d    2 sist operU n i d a d    2 sist oper
U n i d a d 2 sist oper
 

Más de JosefaYareni

Tipos de virus informáticos
Tipos de virus informáticosTipos de virus informáticos
Tipos de virus informáticosJosefaYareni
 
administracion de procesos
administracion de procesosadministracion de procesos
administracion de procesosJosefaYareni
 
Temas p el examen de seleccion del tec (en español)
Temas p el examen de seleccion del tec (en español)Temas p el examen de seleccion del tec (en español)
Temas p el examen de seleccion del tec (en español)JosefaYareni
 
Protocolos informaticos
Protocolos informaticosProtocolos informaticos
Protocolos informaticosJosefaYareni
 
Diferentes tipos de gabinetes
Diferentes tipos de gabinetesDiferentes tipos de gabinetes
Diferentes tipos de gabinetesJosefaYareni
 
Diferencias,ventajas y desventajas de un microprocesador
Diferencias,ventajas y desventajas de un microprocesadorDiferencias,ventajas y desventajas de un microprocesador
Diferencias,ventajas y desventajas de un microprocesadorJosefaYareni
 
naturaleza e importancia de la mercadotecnia
naturaleza e importancia de la mercadotecnianaturaleza e importancia de la mercadotecnia
naturaleza e importancia de la mercadotecniaJosefaYareni
 
Adaptador de video y red
Adaptador de video y redAdaptador de video y red
Adaptador de video y redJosefaYareni
 

Más de JosefaYareni (11)

Tipos de virus informáticos
Tipos de virus informáticosTipos de virus informáticos
Tipos de virus informáticos
 
administracion de procesos
administracion de procesosadministracion de procesos
administracion de procesos
 
Temas p el examen de seleccion del tec (en español)
Temas p el examen de seleccion del tec (en español)Temas p el examen de seleccion del tec (en español)
Temas p el examen de seleccion del tec (en español)
 
Protocolos informaticos
Protocolos informaticosProtocolos informaticos
Protocolos informaticos
 
Diferentes tipos de gabinetes
Diferentes tipos de gabinetesDiferentes tipos de gabinetes
Diferentes tipos de gabinetes
 
Topologias de red
Topologias de redTopologias de red
Topologias de red
 
Diferencias,ventajas y desventajas de un microprocesador
Diferencias,ventajas y desventajas de un microprocesadorDiferencias,ventajas y desventajas de un microprocesador
Diferencias,ventajas y desventajas de un microprocesador
 
Topologias de red
Topologias de redTopologias de red
Topologias de red
 
Protocolos
ProtocolosProtocolos
Protocolos
 
naturaleza e importancia de la mercadotecnia
naturaleza e importancia de la mercadotecnianaturaleza e importancia de la mercadotecnia
naturaleza e importancia de la mercadotecnia
 
Adaptador de video y red
Adaptador de video y redAdaptador de video y red
Adaptador de video y red
 

Interbloqueo

  • 1. Interbloqueo (Sistema Operativo) En sistemas operativos, el bloqueo mutuo (también conocido como interbloqueo, traba mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de procesos o hilos de ejecución en un sistema concurrente que compiten por recursos del sistema o bien se comunican entre ellos. A diferencia de otros problemas de concurrencia de procesos, no existe una solución general para los interbloqueos. Todos los interbloqueos surgen de necesidades que no pueden ser satisfechas, por parte de dos o más procesos. En la vida real, un ejemplo puede ser el de dos niños que intentan jugar al arco y flecha, uno toma el arco, el otro la flecha. Ninguno puede jugar hasta que alguno libere lo que tomó. En el siguiente ejemplo, dos procesos compiten por dos recursos que necesitan para funcionar, que sólo pueden ser utilizados por un proceso a la vez. El primer proceso obtiene el permiso de utilizar uno de los recursos (adquiere el locksobre ese recurso). El segundo proceso toma el lock del otro recurso, y luego intenta utilizar el recurso ya utilizado por el primer proceso, por lo tanto queda en espera. Cuando el primer proceso a su vez intenta utilizar el otro recurso, se produce un interbloqueo, donde los dos procesos esperan la liberación del recurso que utiliza el otro proceso. Administración de procesos Necesidad: La sincronización de procesos creados por diferentes equipos de programadores, está a cargo del sistema operativo Definiciones Interbloqueo: Se dice que dos o más procesos están bloqueados, cuando están suspendidos en espera de un evento que sólo puede ser activado por uno de los procesos bloqueados, y por lo tanto dicho evento nunca sucederá Postergación indefinida o Inanición (Starving) Se dice que uno o más procesos están en postergación indefinida cuando la política de planificación del sistema permite que un proceso quede en espera de un evento por un tiempo indefinido. Esto puede suceder, por ejemplo, cuando la asignación de recursos se realiza por prioridad. De este modo un proceso de baja prioridad estará suspendido mientras existan otros procesos de mayor prioridad.
  • 2. Envejecimiento: aumentar la prioridad de los procesos conforme pasa el tiempo Clasificación de recursos Para el estudio del interbloqueo, los recursos se pueden clasificar en:   Compartido/exclusivos: Se dice que un recursos es compartido si puede ser utilizado por más de un proceso al mismo tiempo. Son exclusivos los que pueden ser utilizados sólo por un proceso a la vez Apropiativos/inapropiativos: Son apropiativos los recursos asignados a un proceso, que pueden ser desasignados del proceso, por al sistema para asignarlos a otro proceso. Los recursos involucrados en los interbloqueos son los exclusivos e inapropiativos Condiciones necesarias para el interbloqueo Coffman, Elphuck y Shoshani, establecieron cuatro condiciones, necesarias y suficientes, para que se dé un interbloqueo: Exclusión mutua Si dos procesos solicitan un recurso exclusivo, uno de los dos quedará suspendido hasta que el favorecido libere el recurso. Contención o retención y espera Si un proceso necesita más de un recurso para realizar su trabajo, conservará en su poder los recursos exclusivos ya asignados, mientras espera por otro recurso adicional. Inapropiatividad Los recursos asignados a un proceso, sólo pueden ser liberados por el proceso mismo y no pueden ser desasignados por el sistema, cuando otro proceso los necesite. Espera circular Dependencia: Si un proceso P1 está suspendido en espera de un recurso exclusivo que está asignado a otro proceso P2, entonces decimos que P1 depende de P2 (P1 <= P2). Espera circular: Existe una cadena circular de procesos en espera de un recurso, si existe una cadena de dependencias entre procesos de la forma P1 <= P2 <= P3 <= ... <= Pn <= P1 Ejemplos: Asignación de recursos sin ciclos
  • 3. Asignación de recursos con espera circular e interbloqueados Formas de enfrentar los interbloqueos Existen varias políticas y estrategias que el sistema operativo puede tomas, para tratar con los interbloqueos:  Indiferencia:Problema del usuario y del programador, lograr que no se dé el interbloqueo.
  • 4.    Prevención:Consisten en condicionar el sistema con una serie de restricciones a los programadores, para que no se den al menos una de las condiciones del interbloqueo, por lo que éste nunca sucederá. Evitación o predicción: Esta estrategia consiste en dejar que las condiciones para el interbloqueo se puedan dar, pero en el momento de asignar recursos, y se detecte que puede ocurrir un interbloqueo, deniega la asignación del recurso que puede desencadenar el interbloqueo. Detección y recuperación: En esta política, el sistema deja que suceda el interbloqueo, pero se implementan procesos encargados de revisar el estado de asignación de los procesos, para detectar los interbloqueo. Una vez detectado, se pueden implementar políticas de recuperación de interbloqueo, que básicamente consisten en matar procesos. Indiferencia (algoritmo del avestruz)   o   Simple y eficiente, dado que el sistema operativo no gasta procesador ni recursos en el manejo del interbloqueo. Usualmente es la política preferida en los sistemas actuales El costo esperado de un interbloqueo suele ser muy bajo Costo esperado = Probabilidad (desastre) * Costo (desastre) Sólo se deben proporcionar herramientas para revisar el estado de los procesos complica el trabajo del operador Prevención (Estrategias de Havender/Prevención estática) Se pueden adoptar ¿4? posibles estrategias de prevención del interbloqueo, una para cada condición. Ya que para se dé un interbloqueo son necesarias las cuatro, con negar una de ellas, se niega la posibilidad del interbloqueo: Negación de la exclusividad   Sólo se aplica a recursos compartidos, es muy difícil poder aplicarlo a todos los recursos, dado que hay recursos que son inherentemente de uso no compartido. Uso de spoolers: dar un API concurrente (compartido) a los procesos para accesar recursos. La estrategia básica es que un servicio del sistema (daemon) proporciona un API, y ese servicio es el único que accesa el recurso compartido, exclusivo. Ej: una impresa es un recurso exclusivo e inapropiativo, pero con el uso de un spooler se convierte en un recurso compartido.
  • 5.  Test & Get: un API especial que permite revisar primero si el recurso está disponible, y pedirlo, o retornar un código de error que indica que no está disponible. Requiere que los procesos hagan uso de este API. Negación de la contención       Estrategia 1: El proceso pide al sistema TODOS los recursos a necesitar antes de iniciar su proceso (todo o nada). No siempre se sabe cuántos recursos se utilizarán. Estrategia 2: También puede establecerse que un procesos puede pedir recursos cuando no tiene recursos asignados No siempre se conoce la cantidad de recursos que se necesitará, por lo que lo que el operador debe configurar, por prueba y error, lograr que los procesos funcionen adecuadamente Obliga a optimizar los programas por medio de división. El programador de modularizar extremadamente bien los procesos para utilizar los recursos por fases, de forma que para cada fase, se piden los recursos y se liberan, antes de la siguiente fase La utilización de recursos resulta muy pobre Puede resultar una postergación indefinida de un proceso que requiera muchos recursos Negación de la inapropiatividad     Si un proceso que tiene recursos asignados, pide un nuevo recurso que no está disponible, deberá liberar los recursos asignados y pedirlos posteriormente. Sólo se aplica a recursos apropiativos y recursos que se pueden almacenar su estado para reasignarlo, o que puedan hacerles rollback puede llevar a que la ejecución de un proceso se prolongue indefinidamente, debido a que nadie puede garantizar que termine en un tiempo determinado. Pobre utilización del tiempo de procesamiento Negación de la espera circular   Se impone un orden a los recursos Cada proceso sólo puede pedir los recursos en orden ascendente (o descendente)
  • 6. Tiemporequerimientos P1 t1 P2 P3 R1 (ok) t2 R2 (ok) t3 t4 R3 (ok) R2 (*) t5 R3 (*) t6 R1 (*) P1 => P2 => P3 => P1 Tiemporequerimientos P1 t1 P2 R1 (ok) t2 R2 (ok) t3 t4 P3 R1 (*) R2 (*) t5 R3 (ok) ti FINALIZA ti DESPIERTA Tj FINALIZA DESPIERTA Tj+1 R3 (ok) Tn FINALIZA DEMOSTRACIÓN: P0 => P1 => P2 => … => Pn => P0
  • 7. Para que haya una dependencia de Pi A Pj, significa que Pi tiene asignados recursos <= k, y está pidiendo un Rk+1, el cual está asignado a Pj, lo que significa que Pj tiene asignados recursos >= k+1, por lo tanto Pn ¡=> P0 En general las técnicas de prevención, aunque logran su objetivo de eliminar los interbloqueos, provocan una pobre utilización de los recursos, incluyendo el procesador. También el algunos casos, provocan postergación indefinida. Evitación o Predicción ( Estrategias de Dijkstra, Habermann) Con la evitación no se tienen reglas estáticas a los procesos, sino que el sistema operativo analiza cada petición de recursos y determina si el sistema quedará en un estado estable o inestable, en este último caso, se deniega la petición, posponiéndola temporalmente. Conceptos La evitación se basa en los siguientes conceptos:     Estado de asignación de recursos:Número de recursos asignados, disponibles y máximo de recursos posibles por proceso. Secuencia segura:Secuencia de finalización de procesos, tal que todos los procesos puedan finalizar exitosamente, iniciando en un determinado estado de asignación de recursos Estado seguro de asignación de recursos:Estado de asignación de recursos, donde existe al menos una secuencia segura. Estado inseguro de asignación de recursos: No existe ninguna secuencia segura. Obsérvese, que aunque un estado inseguro no implica que exista interbloqueo, talvez una secuencia determinada de eventos lleve a uno. Algoritmo del banquero (Dijkstra, Habermann) En este algoritmo, de evitación en general procede así:   Necesita que cada proceso declare el máximo número de recursos a utilizar En cada requerimiento, determina si el asignar los recursos pedidos deja un estado inseguro de asignación de recursos, entonces se pospone el requerimiento. De lo contrario se asignan los recursos solicitados. Procedimiento de asignación Cuando un proceso solicita recursos, el sistema operativo procede así: 1. Determinar si hay disponibles
  • 8. 2. Determinar que no exceda su máximo declarado 3. Determinar que, si se concede la petición, el sistema quede en estado seguro Si no se cumple cualquiera de estas condiciones, el proceso queda suspendido hasta que exista una liberación de recursos. Estructuras de datos: sea m el número de tipos de recursos y n el número de procesos int disponible [m] ; unidades de R j disponibles int max[n][m]; máximo número de requerimientos del proceso Pi del recurso Rj int asignado [n][m]; asignación actual del proceso P i del recurso Rj int necesario [n][m]; necesario [i][j] = max [i][j] - asignados[i][j] int requerimiento[m]; vector de requerimiento de cada petición de recursos// Relación <= entre vectores si x in N m , y in N m : x <= y ssi para todo i = 0,...,m-1 : x[i] <= y[i] Por ejemplo: <1,1,1> <= <2,5,7> <1,1,1> NO <= <2,0,7> Algoritmo void requerimiento_de_recursos (int requerimiento[], idProceso i) { if (requerimiento >= necesario[i] ) error () ; máximo de recursos estimados agotados i f (requerimiento >= disponible) suspender () ; recursos no disponibles disponible -= requerimiento; asignado [i] += requerimiento; necesario[i] -= requerimiento; if (! estado_seguro ()) { regresamos al estado anterior disponible += requerimiento; asignado[i] -= requerimiento; necesario[i] += requerimiento; suspender () ; } } int estado_seguro() {
  • 9. int disp_temp = disponible; bool terminado[n] = (FALSE,...,FALSE); int i; encontrar un p[i] tal que terminado[i] = FALSE y necesario[i] <= disponible while (terminado!=(TRUE,...TRUE)){ for (i=0; (i < n && terminado[i]) || necesario[i] > disp_temp); i++) { if (i == n-1) { return FALSE; }else if (!terminado[i]){ disp_temp += asignados[i] ; terminado[i] = TRUE; } if } for } while return TRUE ; }estado_seguro Ejemplo procesorecurso R1 (7) R2(7) R3(7) Maximos P1 5 3 1 P2 3 2 3 P3 2 3 1 P4 5 0 3 Asignados P1 3 3 1 P2 2 2 2 P3 0 1 1 P4 0 0 1 Necesarios P1 2 0 0
  • 10. P2 1 0 1 P3 2 2 0 P4 5 0 2 2 1 2 Disponibles Sobre este estado de asignación de recursos (qué es estable ¿?) supongamos las siguiente peticiones de recursos:   P2[1,0,1]:El sistema queda en un estado seguro P3[2,0,0]:El sistema queda en un estado inseguro Desventajas    necesita el conocimiento del máximo por recurso que usará cada proceso implica un retardo en cada asignación de recursos, lo que puede degradar el sistema si se manejan muchos recursos y/o procesos Se requiere una garantía de devolución: c/proceso liberará los recursos asignados. (suponga que después de hacer la primera asignación de recursos, el proceso P2 no termina, entonces ninguno de los procesos podría terminar, sin necesidad de que haya interbloqueo. Detección y recuperación    El sistema no impone ninguna clase de reglas para prevenir o evitar el interbloqueo Se puede tener un proceso de fondo o de activación manual que analice las estructuras del sistema operativo y determine si existe o no un interbloqueo. Una vez detectado el interbloqueo se procede a la recuperación, que puede ser automática o manual. Básicamente consiste en matar un proceso Podría utilizar si no es muy costoso que haya un interbloqueo (el costo es menor que el costo de implementar una de las otras políticas de interbloqueo. Normalmente sería utilizado como herramienta de diagnóstico y recuperación Detección por reducción de grafos de asignación
  • 11. Detección por ciclos de espera La técnica más sencilla para detectar un interbloqueo es deducir un grafo dirigido de dependencias entre proceso por medio de las colas de espera en cada recurso y determinar si existen un ciclo en dicho proceso. Por ejemplo, en la siguiente gráfica, al lado izquierdo, se tiene un grafo del estado actual de asignación de recursos y a la derecha vemos el grafo de espera entre procesos. Como se puede apreciar, existe un ciclo en en grafo de espera, por lo tanto existe un interbloqueo. Condiciones necesarias para la detección 1. Conocer los procesos: acceso al PCB 2. Conocer los recursos: acceso a la tabla de recursos del sistema 3. Conocer la asignación: debemos poder saber qué recursos está asignado a cada proceso 4. Conocer la espera: debemos poder saber en que recursos está esperando (suspendido) un proceso Recuperación Una vez que se detecta un interbloqueo, corresponde la decisión sobre la recuperación del sistema sobre ese interbloqueo, que básicamente se trata de matar un proceso y recuperar sus recursos. Esta recuperación puede ser manual o automática. La recuperación automática es un tema difícil, ya que no se pueden establecer, fácilmente, condiciones determinísticas para saber cuál es el proceso más adecuado de eliminar. Existen algunas posibilidades:  El proceso con más recursos: se libera la mayor cantidad cantidad de recursos, lo que permite continuar a la mayor cantidad de procesos. Se
  • 12. deshace el "nudo" principal. Sin embargo tiene la desventaja que normalmente será el proceso más importante, lo que implica el mayor daño,   o el mayor tiempo de repetición. El proceso con menos recursos: se busca el menor daño, pero puede ser que pocos procesos puedan continuar. El proceso que esté involucrado en más ciclos o interbloqueos: se deshace el mayor número de interbloqueos. Sin embargo, hay que tomar en cuenta un criterio subjetivo: la importancia del proceso, lo cual no está dado ni por la cantidad de recursos que tiene asignados el proceso ni el número de interbloqueos en que está involucrado. Lo cuál hace de la recuperación manual, una forma muy recomendable, siempre y cuando se cuente con un operador entrenado en el funcionamiento de los procesos del usuario. Herramientas para el interbloqueo en los sistemas operativos existentes SOLARIS Utiliza la herramienta CAT (Crash Analysis Tool), que es parte del entorno del sistema, y ayuda a analizar los archivos centrales del sistema. Esta herramienta consiste en analizar la salida del desplome o error que se dio. Esta herramienta genera archivos de salida en los cuales se describen las causas que provocaron este estado en el sistema. LINUX Utiliza las siguientes herramientas: GDB: Es una herramienta de rastreo y debugeo del kernel, con la información obtenida en un error en el sistema. INGO: Es un “perro guardián” que sirve para detectar y reportar los interbloqueos. SYSREQ: Permite observar las tareas, procesos y registros dentro del kernel en caso de fallo. KDB: Es un debugeador del kernel en línea de comando que sirve para inspeccionar el estado de los procesos. WINDOWS Utiliza las siguientes herramientas: WINDBG: DBGMON: I386KD: Es utilizado para cargar el archivo MEMORY.DMP, el que fue generado por una computadora con WINDOWS NT. Este archivo contiene información que puede ser observada para verificar la integridad del
  • 13. sistema. KD: En general, la mayoría de herramientas sirven para observar el estado del sistema, ya sea por el kernel o por archivos generados conteniendo la información, y así poder saber el estado del sistema y que situaciones, procesos y recursos se encuentran involucrados en llevar al sistema a su estado actual. Verifier.exe:a partir de WinXp, detecta interbloqueos en drivers En Windows® XP La detección se presentó por medio del control orientado a excepciones, que permite interceptar la cadena de control de excepciones con propósitos de registro y diagnóstico. En Windows Vista™ Windows Vista tiene una nueva API muy interesante denominada Cruce encadenado con esperas (WCT). API Cruce permite determinar cuándo y por qué se produce interbloqueo en un proceso. WCT notifica exactamente en qué objeto de sincronización se encuentra el interbloqueo. Pero esta sólo notifica un conjunto limitado de primitivas de sincronización. Aun con esta limitante, resulta una API muy útil y que deseará tener en su kit de herramientas de depuración. API de WCT Uso y sus limitaciones Uso examina si un subproceso se encuentra en espera en una llamada de bloqueo. Si el subproceso se encuentra en una llamada de bloqueo, busca el objeto que el subproceso bloquea y determina, si es apropiado, el nombre del objeto y qué subprocesos o procesos poseen ese objeto. Por ejemplo, si el subproceso A espera que el proceso B complete la ejecución y el proceso B invoca SendMessage para el proceso A, existe un interbloqueo que WCT puede detectar y notificar. Limitaciones El único problema que observo con la API de WCT es que no notifica interbloqueos cuando se usa WaitForMultipleObjects, lo que reduce su utilidad en muchas aplicaciones. Por ejemplo, la sincronización .NET usa WaitForMultipleObjects para toda la coordinación de sincronizaciones. Aunque WCT no notificará que se produjo un interbloqueo en el subproceso, notificará que el subproceso está bloqueado. Lla API de WCT puede notificar los periodos de espera, por lo que se puede decidir manualmente si se produjo interbloqueo en un subproceso específico, a través de la inspección y comparación con una herramienta como LockWatcher (parte de la descarga de código de este artículo). WCT es una API típica de Win32®, lo cual significa que tiene que obtener un identificador opaco, pasar ese identificador al método que registra los datos y llamar a un formulario de CloseHandle cuando finalice. La documentación del SDK de la plataforma muestra todo lo que se necesita
  • 14. para inicializar y usar la API de WCT. En la inicialización, siempre deberá llamar a la función RegisterWaitChainCOMCallback para registrar las funciones COM CoGetCallState y CoGetActivationState para que WCT pueda notificar al propietario COM. Dado que estas funciones no están documentadas, necesitará obtenerlas de ole32.dll a través de GetProcAddress. Para inicializar WCT, se debe usar la funcion OpenThreadWaitChainSession exportada de advapi32.dll: