Sunteți pe pagina 1din 19

Interbloqueo (Sistema Operativo)

En sistemas operativos, el bloqueo mutuo (tambin conocido como interbloqueo, traba


mortal, deadlock, abrazo mortal) es el bloqueo permanente de un conjunto de procesos o hilos de
ejecucin 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 solucin
general para los interbloqueos.

Todos los interbloqueos surgen de necesidades que no pueden ser satisfechas, por parte de dos o
ms procesos. En la vida real, un ejemplo puede ser el de dos nios 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 slo 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 liberacin del recurso que utiliza el otro proceso.


Administracin de procesos
Necesidad
La sincronizacin de procesos creados por diferentes equipos de programadores, est a
cargo del sistema operativo
Definiciones

Interbloqueo
Se dice que dos o ms procesos estn bloqueados, cuando estn suspendidos en espera de un
evento que slo puede ser activado por uno de los procesos bloqueados, y por lo tanto dicho
evento nunca suceder
Postergacin indefinida o Inanicin (Starving)
Se dice que uno o ms procesos estn en postergacin indefinida cuando la poltica de
planificacin del sistema permite que un proceso quede en espera de un evento por un tiempo
indefinido. Esto puede suceder, por ejemplo, cuando la asignacin 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

Clasificacin 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
ms de un proceso al mismo tiempo. Son exclusivos los que pueden ser utilizados slo 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:
Exclusin mutua
Si dos procesos solicitan un recurso exclusivo, uno de los dos quedar suspendido hasta que el
favorecido libere el recurso.
Contencin o retencin y espera
Si un proceso necesita ms 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, slo 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:
Asignacin de recursos sin ciclos


Asignacin de recursos con espera circular e interbloqueados


Formas de enfrentar los interbloqueos
Existen varias polticas 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.
Prevencin: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.
Evitacin o prediccin: 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 asignacin del recurso que puede
desencadenar el interbloqueo.
Deteccin y recuperacin: En esta poltica, el sistema deja que suceda el interbloqueo,
pero se implementan procesos encargados de revisar el estado de asignacin de los
procesos, para detectar los interbloqueo. Una vez detectado, se pueden implementar
polticas de recuperacin de interbloqueo, que bsicamente consisten en matar procesos.
Indiferencia (algoritmo del avestruz)
Simple y eficiente, dado que el sistema operativo no gasta procesador ni recursos en el
manejo del interbloqueo. Usualmente es la poltica preferida en los sistemas actuales
El costo esperado de un interbloqueo suele ser muy bajo
o Costo esperado = Probabilidad (desastre) * Costo (desastre)
Slo se deben proporcionar herramientas para revisar el estado de los procesos
complica el trabajo del operador
Prevencin (Estrategias de Havender/Prevencin esttica)
Se pueden adoptar 4? posibles estrategias de prevencin del interbloqueo, una para cada
condicin. Ya que para se d un interbloqueo son necesarias las cuatro, con negar una de ellas, se
niega la posibilidad del interbloqueo:

Negacin de la exclusividad
Slo se aplica a recursos compartidos, es muy difcil 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 bsica 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 cdigo de error que indica que no est disponible. Requiere que los
procesos hagan uso de este API.
Negacin de la contencin
Estrategia 1: El proceso pide al sistema TODOS los recursos a necesitar antes de iniciar su
proceso (todo o nada). No siempre se sabe cuntos recursos se utilizarn.
Estrategia 2: Tambin 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 divisin. 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 utilizacin de recursos resulta muy pobre
Puede resultar una postergacin indefinida de un proceso que requiera muchos recursos
Negacin 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.
Slo 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 ejecucin de un proceso se prolongue indefinidamente, debido a que
nadie puede garantizar que termine en un tiempo determinado.
Pobre utilizacin del tiempo de procesamiento
Negacin de la espera circular
Se impone un orden a los recursos
Cada proceso slo puede pedir los recursos en orden ascendente (o descendente)
Tiempo\requerimientos P1 P2 P3
t1 R1 (ok)
t2 R2 (ok)
t3 R3 (ok)
t4 R2 (*)
t5 R3 (*)
t6 R1 (*)
P1 => P2 => P3 => P1
Tiempo\requerimientos P1 P2 P3
t1 R1 (ok)
t2 R2 (ok)
t3 R1 (*)
t4 R2 (*)
t5 R3 (ok)
..
ti FINALIZA
ti DESPIERTA
Tj FINALIZA DESPIERTA
Tj+1 R3 (ok)
Tn FINALIZA
DEMOSTRACIN:
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 tcnicas de prevencin, aunque logran su objetivo de eliminar los interbloqueos,
provocan una pobre utilizacin de los recursos, incluyendo el procesador. Tambin el algunos
casos, provocan postergacin indefinida.

Evitacin o Prediccin ( Estrategias de Dijkstra, Habermann)
Con la evitacin no se tienen reglas estticas a los procesos, sino que el sistema operativo analiza
cada peticin de recursos y determina si el sistema quedar en un estado estable o inestable, en
este ltimo caso, se deniega la peticin, posponindola temporalmente.

Conceptos
La evitacin se basa en los siguientes conceptos:
Estado de asignacin de recursos:Nmero de recursos asignados, disponibles y mximo
de recursos posibles por proceso.
Secuencia segura:Secuencia de finalizacin de procesos, tal que todos los procesos
puedan finalizar exitosamente, iniciando en un determinado estado de asignacin de
recursos
Estado seguro de asignacin de recursos:Estado de asignacin de recursos, donde existe
al menos una secuencia segura.
Estado inseguro de asignacin de recursos: No existe ninguna secuencia segura.
Obsrvese, 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 evitacin en general procede as:

Necesita que cada proceso declare el mximo nmero de recursos a utilizar
En cada requerimiento, determina si el asignar los recursos pedidos deja un estado
inseguro de asignacin de recursos, entonces se pospone el requerimiento. De lo contrario
se asignan los recursos solicitados.
Procedimiento de asignacin
Cuando un proceso solicita recursos, el sistema operativo procede as:

1. Determinar si hay disponibles
2. Determinar que no exceda su mximo declarado
3. Determinar que, si se concede la peticin, el sistema quede en estado seguro
Si no se cumple cualquiera de estas condiciones, el proceso queda suspendido hasta que exista
una liberacin de recursos.
Estructuras de datos:
sea m el nmero de tipos de recursos y n el nmero de procesos
int disponible [m] ; unidades de R j disponibles

int max[n][m]; mximo nmero de requerimientos del proceso Pi del recurso Rj
int asignado [n][m]; asignacin 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 peticin de recursos//
Relacin <= 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 () ; mximo 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
proceso\recurso 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
Disponibles 2 1 2
Sobre este estado de asignacin 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 mximo por recurso que usar cada proceso
implica un retardo en cada asignacin de recursos, lo que puede degradar el sistema si se
manejan muchos recursos y/o procesos
Se requiere una garanta de devolucin: c/proceso liberar los recursos asignados.
(suponga que despus de hacer la primera asignacin de recursos, el proceso P2 no
termina, entonces ninguno de los procesos podra terminar, sin necesidad de que haya
interbloqueo.
Deteccin y recuperacin
El sistema no impone ninguna clase de reglas para prevenir o evitar el interbloqueo
Se puede tener un proceso de fondo o de activacin 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 recuperacin, que puede ser
automtica o manual. Bsicamente consiste en matar un proceso
Podra utilizar si no es muy costoso que haya un interbloqueo (el costo es menor que el costo de
implementar una de las otras polticas de interbloqueo.
Normalmente sera utilizado como herramienta de diagnstico y recuperacin
Deteccin por reduccin de grafos de asignacin
Deteccin por ciclos de espera
La tcnica ms 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 grfica, al lado izquierdo, se tiene un grafo del estado actual de
asignacin 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 deteccin
1. Conocer los procesos: acceso al PCB
2. Conocer los recursos: acceso a la tabla de recursos del sistema
3. Conocer la asignacin: 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

Recuperacin
Una vez que se detecta un interbloqueo, corresponde la decisin sobre la recuperacin del
sistema sobre ese interbloqueo, que bsicamente se trata de matar un proceso y recuperar sus
recursos.
Esta recuperacin puede ser manual o automtica. La recuperacin automtica es un tema difcil,
ya que no se pueden establecer, fcilmente, condiciones determinsticas para saber cul es el
proceso ms adecuado de eliminar. Existen algunas posibilidades:

El proceso con ms 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 ms importante, lo que
implica el mayor dao, o el mayor tiempo de repeticin.
El proceso con menos recursos: se busca el menor dao, pero puede ser que pocos
procesos puedan continuar.
El proceso que est involucrado en ms ciclos o interbloqueos: se deshace el mayor
nmero 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 nmero de
interbloqueos en que est involucrado. Lo cul hace de la recuperacin 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 informacin obtenida en un error
en el sistema.
INGO: Es un perro guardin 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 lnea 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 informacin que puede ser observada para
verificar la integridad del sistema.
KD:
En general, la mayora de herramientas sirven para observar el estado del sistema, ya sea por el
kernel o por archivos generados conteniendo la informacin, 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.3
Verifier.exe:a partir de WinXp, detecta interbloqueos en drivers
En Windows XP La deteccin se present por medio del control orientado a excepciones, que
permite interceptar la cadena de control de excepciones con propsitos de registro y diagnstico.
En Windows Vista Windows Vista tiene una nueva API muy interesante denominada Cruce
encadenado con esperas (WCT). API Cruce permite determinar cundo y por qu se produce
interbloqueo en un proceso. WCT notifica exactamente en qu objeto de sincronizacin se
encuentra el interbloqueo. Pero esta slo notifica un conjunto limitado de primitivas de
sincronizacin. Aun con esta limitante, resulta una API muy til y que desear tener en su kit de
herramientas de depuracin. 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 ejecucin 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
sincronizacin .NET usa WaitForMultipleObjects para toda la coordinacin 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 especfico, a travs de la
inspeccin y comparacin con una herramienta como LockWatcher (parte de la descarga de
cdigo de este artculo). WCT es una API tpica de Win32, lo cual significa que tiene que obtener
un identificador opaco, pasar ese identificador al mtodo que registra los datos y llamar a un
formulario de CloseHandle cuando finalice. La documentacin del SDK de la plataforma muestra
todo lo que se necesita para inicializar y usar la API de WCT. En la inicializacin, siempre deber
llamar a la funcin RegisterWaitChainCOMCallback para registrar las funciones COM
CoGetCallState y CoGetActivationState para que WCT pueda notificar al propietario COM. Dado
que estas funciones no estn documentadas, necesitar obtenerlas de ole32.dll a travs de
GetProcAddress. Para inicializar WCT, se debe usar la funcion OpenThreadWaitChainSession
exportada de advapi32.dll:

S-ar putea să vă placă și