Site hosted by Angelfire.com: Build your free website today!
     
 



Administrador de Procesos y del Procesador

2.4.3 Interbloqueo (DeadLock)

 

El estancamiento se puede definir formalmente como sigue: "Un conjunto de procesos se estancan si cada proceso del conjunto esta esperando un evento que solo otro proceso del conjunto puede provocar". Puesto que todos los procesos estan en espera, ninguno de ellos podra ocasionar nuca ninguno de los eventos que podrian desbloquear a algunos de los otros miembros del conjunto y todos los procesos seguiran esperando indefinidamente.

Definicion de Abrazo Mortal

Un conjunto de procesos esta en un abrazo mortal cuando todos los procesos en ese conjunto estan esperando un evento que solo puede ser causado por otro proceso en el conjunto. Los eventos a los cuales nos estamos refiriendo son concernientes con la asignacion y liberacion de recursos principalmente. Sin embargo, otro tipo de eventos pueden llevar a la existencia de abrazos mortales.

Para ejemplificar un estado de abrazo mortal, considere un sistema con tres unidades de disco. Suponga que existen tres procesos, cada uno de ellos tiene asignada una de las unidades de disco. Si ahora cada proceso pide otra unidad de disco, los tres procesos se encuentran ahora en un estado de abrazo mortal. Cada uno esta esperando el evento "unidad de disco liberada", lo cual solo puede ser causada por alguno de los otros procesos en espera. Este ejemplo ilustra un abrazo mortal involucrando procesos compitiendo por el mismo tipo de recurso.

Los abrazos mortales pueden tambien involucrar diferentes tipos de recursos. Por ejemplo, considere un sistema con una impresora y una unidad de disco. Suponga que el proceso A tiene asignada la unidad de disco y que el proceso B tiene asignada la impresora. Ahora, si A pide la impresora y B pide la unidad de disco, ocurre un abrazo mortal.

sd
Ejemplo de un abrazo mortal.

 

Debe ser obvio que un abrazo mortal es una condicion indeseable. En un abrazo mortal, los procesos nunca terminan de ejecutarse y los recursos del sistema esta amarrados, evitando que otros procesos puedan siquiera empezar.? Antes de discutir varios metodos para manejar el problema de los abrazos mortales, seria util describir algunas de las propiedades que los caracterizan.

Condiciones Necesarias

Segun Coffman (1971), existen cuatro condiciones que deben cumplirse para que haya estancamiento. Una situacion de abrazo mortal puede surgir si y solo si las siguientes cuatro condiciones ocurren simultaneamente en un sistema:

  1.     Exclusion Mutua.     Cada recurso se asigna por lo regular exactamente a un proceso o bien esta disponible. Al menos un recurso es mantenido en un modo no-compartible; esto es, solo un proceso a la vez puede usar el recurso. Si otro proceso solicita ese recurso, tiene que ser retardado hasta que el recurso haya sido liberado.
  2.     Retener y Esperar.     Los procesos que regularmente contienen recursos otorgados antes pueden solicitar nuevos recursos. Debe existir un proceso que retenga al menos un recurso y este esperando para adquirir recursos adicionales que estan siendo retenidos por otros procesos.
  3.     No existe el derecho de desasignar (No preemtion). Los recursos previamente otorgados no pueden extraerse por la fuerza de un proceso. Deben ser liberados explicitamente por el proceso que los contiene. Los recursos no pueden ser desasignados (preempted); esto es, un recurso solo puede ser liberado voluntariamente por el proceso que lo retiene, despues de que el proceso ha terminado su tarea.
  4.     Espera Circular    . Debe haber una cadena de dos o mas procesos, cada uno d los cuales este esperando u recurso contenido en el siguiente miembro de la cadena. Debe existir un conjunto {p0, p1, ...,pn} de procesos en espera tal que p0 este esperando por un recurso que esta siendo retenido por p1, p1 esta esperando por un recurso que esta siendo retenido por p2, ..., pn-1 esta esperando por un recurso que esta siendo retenido por pn y pn esta esperando por un recurso que esta siendo retenido por p0.


Enfatizamos que las cuatro condiciones deben de cumplirse para que pueda ocurrir un abrazo mortal. La condicion de espera circular implica la condicion de retener y esperar, de tal manera que las cuatro condiciones no son totalmente independientes. Sin embargo, puede ser util el considerar cada condicion por separado.

Una forma de modelar estas condiciones es usando un grafo de recursos: los circulos representan procesos, los cuadrados recursos. Una arista desde un recurso a un proceso indica que el recurso ha sido asignado al proceso. Una arista desde un proceso a un recurso indica que el proceso ha solicitado el recurso, y esta bloqueado esperandolo. Entonces, si hacemos el grafo con todos lo procesos y todos los recursos del sistema y encontramos un ciclo, los procesos en el ciclo estan bajo bloqueo mutuo.

daed
Ejemplo de un grafo de recursos.



    Metodos para manejar los abrazos mortales

Principalmente, existen dos metodos para manejar el problema de los abrazos mortales. Podemos usar algun protocolo para asegurar que el sistema nunca entrara en un estado de abrazo mortal. Alternativamente, podemos permitir que el sistema entre en un estado de abrazo mortal y despues recuperarnos. Como podremos ver posteriormente, el recuperarse de un abrazo mortal puede ser muy dificil y muy caro. Por ello, primeramente consideraremos los metodos para asegurar que no ocurran
los abrazos mortales. Comunmente, existen dos metodos: El de PREVENCION de abrazos mortales (Deadlock Prevention) y el de EVASION de abrazos mortales (Deadlock Avoidance).

2.4.1 Exclusion mutua de Seccion Critica 2.4.2 Sincronizacion de Procesos 2.4.2.1 Mecanismos de Semaforos 2.4.2.2 Mecanismos de Monitoreo 2.4.3 Interbloqueo ->Regresar al Indice Evaluacion