Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Capítulo7 - Deadlock

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

CAPITULO 7 – INTERBLOQUEOS

Modelo de Sistema
Un sistema consta de un número finito de recursos, que se distribuyen entre una serie de
procesos en competición. Los recursos se dividen en varios tipos, contando cada uno de
ellos con varias instancias. Si un sistema tiene 2 CPU, entonces el tipo de recurso CPU
tiene 2 instancias.

Si un proceso solicita una instancia de un tipo de recurso, la asignación de cualquier


instancia del tipo satisfará la solicitud.

Un proceso puede solicitar tantos recursos como necesite para llevar a cabo las tareas que
tenga asignadas.

En modo de operación normal, un proceso puede emplear un recurso solo siguiendo esta
secuencia:

1. Solicitud. Si la solicitud no puede ser concedida inmediatamente, entonces el


proceso solicitante tendrá que esperar hasta que pueda adquirir el recurso.
2. Uso. El proceso puede operar sobre el recurso.
3. Liberación. El proceso libera el recurso.

Un conjunto de procesos estará en estado de interbloqueo cuando todos los procesos del
conjunto estén esperando a que se produzca un suceso que solo puede producirse como
resultado de la actividad de otro proceso del conjunto.

Considere un sistema con 3 unidades regrabables de CD. Suponga que cada proceso está
usando una de estas unidades. Si ahora cada proceso solicita otra unidad, los 3 procesos
entraran en estado de interbloqueo. Cada uno de ellos estará esperando a que se produzca
un suceso, “la liberación de la unidad regrabable.” Esto es un interbloqueo relativo a un
único tipo de recurso.

Sistema con impresora y unidad de DVD. Suponga que el proceso Pi está usando la
impresora y el proceso Pj la unidad de DVD. Si Pj solicita la impresora y Pi solicita la
unidad de DVD, se producirá un interbloqueo.

Los programas multi-hebra son buenos candidatos para los interbloqueos, porque las
distintas hebras pueden competir por la utilización de los recursos compartidos.
Caracterización de los Interbloqueos
En un interbloqueo los procesos nunca terminan de ejecutarse y los recursos del sistema
están ocupados, lo que impide que se inicien otros trabajos.

Condiciones Necesarias

Un interbloqueo puede surgir si de san las 4 siguientes condiciones:

1. Exclusión Mutua. Al menos un recurso debe estar en modo no compartido. Si otro


proceso solicita el recurso, el proceso solicitante tendrá que esperar hasta que el
recurso sea liberado.
2. Retención y Espera. Un proceso debe estar reteniendo al menos un recurso y
esperando para adquirir otros recursos adicionales que actualmente estén retenidos
por otros procesos.
3. Sin Desalojo. Los recursos no pueden ser desalojados; es decir, un recurso solo
puede ser liberado voluntariamente por el proceso que le retiene.
4. Espera Circular. Debe existir un conjunto de procesos en espera tal que P0 esté
esperando a un recurso retenido por P1, P1 esté esperando a un recurso retenido por
P2, etc.

Grafo de asignación de Recursos

 Conjuntos
o P={P1,P2,P3}
o R={R1,R2,R3,R4}
o E={P1->R1, P2->R3, R1->P2, R2->P2, R2->P1,R3->P3}
 Instancias de Recursos
o Una instancia del tipo de recurso R1
o Dos instancias del tipo de recurso R2
o Una instancia del tipo de recurso R3
o Tres Instancias del tipo de recurso R4
 Estados de los procesos
o El proceso P1 retiene una instancia del tipo de recurso R2 y está esperando
una instancia del recurso R1.
o El proceso P2 retiene una instancia del tipo de recurso R1 y está esperando
una instancia del recurso R3.
o El proceso P3 retiene una instancia del tipo de recurso R3.
Si el grafo no contiene ningún ciclo, entonces ningún proceso del sistema está
interbloqueado. Si el grafo contiene un ciclo, entonces puede existir un interbloqueo.

Si cada tipo de recurso tiene exactamente una instancia, entonces la existencia de un ciclo
implica necesariamente que se ha producido un interbloqueo.

Si cada tipo de recurso tiene varias instancias, entonces la existencia de un ciclo no


necesariamente implica que se haya producido un interbloqueo. En este caso la existencia
de un ciclo en el grafo es condición necesaria pero no suficiente para la existencia de un
interbloqueo.

En esta situación, en el sistema existen dos ciclos:


Métodos para tratar los Interbloqueos
Podemos abordar el tema de los interbloqueos de 3 formas:

 Podemos emplear un protocolo para impedir o evitar los interbloqueos, asegurando


que el sistema nunca entre en estado de interbloqueo.
 Podemos permitir que el sistema entre en estado de interbloqueo, detectarlo y
realizar una recuperación.
 Podemos ignorar el problema y actuar como si nunca se produjeran interbloqueos en
el sistema.

La tercera solución es la que usan la mayoría de los SO, entonces es problema del
desarrollador de aplicaciones el escribir programas que resuelvan posibles interbloqueos.

Para garantizar que nunca se produzcan interbloqueos, el sistema puede emplear un


esquema de prevención de interbloqueos o un esquema de evasión de interbloqueos.

Si un sistema no emplea un algoritmo de prevención ni uno de evasión, entonces puede


producirse un interbloqueo. Entonces, el sistema puede proporcionar un algoritmo que
examine el estado del mismo para determinar si se ha producido un interbloqueo y otro
algoritmo para recuperarse.

Si un sistema no garantiza que nunca se producirá un interbloqueo, ni proporciona un


mecanismo para la detección y recuperación de interbloqueos, entonces puede darse la
situación de que el sistema esté en estado de interbloqueo y no tenga forma ni siquiera de
saberlo. Esto dará lugar a un deterioro del rendimiento sistema, ya que habrá recursos
retenidos por procesos que no pueden ejecutarse y cada vez más procesos entraran en
estado de interbloqueo. Finalmente el sistema dejará de funcionar y se tendrá que reiniciar
manualmente.

Prevención de Interbloqueos
Exclusión Mutua

Se aplica a los recursos que no pueden ser compartidos. Los recursos compartibles no
requieren acceso mutuamente excluyente. Por ejemplo, varios procesos no pueden
compartir simultáneamente una impresora.

Los archivos de solo lectura son ejemplos de recursos que pueden compartirse. Si varios
procesos intentan abrir un archivo de solo lectura al mismo tiempo, puede concedérseles
acceso al archivo de forma simultánea.

Sin embargo, no podemos negar la condición.

Retención y Espera

Para asegurar que esta condición nunca se produzca debemos garantizar que cuando un
proceso solicite un recurso el proceso no este reteniendo ningún otro recurso. Un posible
protocolo consiste en exigir que cada proceso solicite todos sus recursos antes de comenzar
su ejecución.

Una posible alternativa seria un protocolo que permitiera a un proceso solicitar recursos
solo cuando no tenga ninguno retenido.

Sin Desalojo

La tercera condición necesaria para la intervención de interbloqueos, es que los recursos


que ya están asignados no sean desalojados, para impedir que suceda esto podemos usar el
siguiente protocolo: si un proceso está reteniendo varios recursos y solicita otro recurso
que no se le pueda asignar inmediatamente, entonces todos los recursos actualmente
retenidos se desalojan.
Espera Circular

Una forma de garantizar que esta condición nunca se produzca es imponer una ordenación
total de todos los tipos de recursos y requerir que cada proceso solicite sus recursos en un
orden creciente de numeración.

Podemos considerar el siguiente protocolo para impedir los interbloqueos: cada proceso
puede solicitar los recursos solo en orden creciente de numeración es decir, un proceso
puede solicitar cualquier numero distancias de un cierto tipo de recurso como por ejemplo
Ri; a continuación el proceso puede solicitar instancias del tipo de recursos Rj si y solo si
F(Rj)>F(Ri).

Si se usan estos dos protocolos entonces la condición de espera circular no puede llegar a
cumplirse.

Evasión de Interbloqueos
Detección de Interbloqueos
Si un sistema no emplea ni algoritmos de prevención ni de evasión de interbloqueos,
entonces puede producirse un interbloqueo en el sistema. En este caso el sistema debe
proporcionar:

 Un algoritmo que examine el estado del sistema para determinar si se ha producido


un interbloqueo.
 Un algoritmo para recuperarse del interbloqueo.

Una sola Instancia de cada tipo de Recurso

Si todos los recursos tienen una única instancia, entonces podemos definir un algoritmo de
detección de interbloqueos que utilice una variante del grafo de asignación de recursos,
denominada grafo de espera. Se eliminan los nodos de recursos y se colapsan las
correspondientes aristas.
Existirá un interbloqueo en el sistema si y solo si el grafo de espera contiene un ciclo. Para
detectar interbloqueos, el sistema necesita mantener el grafo de espera e invocar un
algoritmo periódicamente que compruebe si existe un ciclo en el grafo.

Utilización del Algoritmo de Detección

¿Cuándo debemos invocar el algoritmo de detección? La respuesta depende de dos factores:

1. ¿Con qué frecuencia se producirá probablemente un interbloqueo?


2. ¿Cuántos procesos se verán afectados por el interbloqueo cuando se produzca?

Si los interbloqueos se producen frecuentemente, entonces el algoritmo de detección debe


invocarse frecuentemente. Los recursos asignados a los procesos en interbloqueo estarán
inactivos hasta que el interbloqueo se elimine.

Si se invoca el algoritmo de detección para cada solicitud de recursos, esto dará lugar a una
considerable sobrecarga en el tiempo de uso del procesador. Una alternativa, consiste
simplemente en invocar el algoritmo a intervalos menos frecuentes, por ejemplo cuando la
utilización de la CPU caiga por debajo del 40%.

Recuperación de un Interbloqueo
Cuando el algoritmo de detección determina que existe un interbloqueo, tenemos varias
alternativas. Una es informar al operador que se ha producido un interbloqueo y dejar que
lo trate de forma manual. Otra es dejar que el sistema haga la recuperación del interbloqueo
de forma automática.

Existen 2 opciones para romper un interbloqueo:


Terminación de Procesos

Para eliminar los interbloqueos interrumpiendo un proceso se utiliza uno de dos posibles
métodos:

 Interrumpir todos los procesos interbloqueados. Este método interrumpirá el


ciclo de interbloqueo pero a un precio muy alto; los procesos en interbloqueo
pueden haber consumido un largo periodo de tiempo y los resultados de estos
cálculos parciales deben descartarse y, probablemente, tendrán que repetirse mas
tarde.
 Interrumpir un proceso cada vez hasta que el ciclo de interbloqueo se elimine.
Este método requiere una gran cantidad de trabajo adicional ya que después de
haber interrumpido cada proceso hay que invocar un algoritmo de intervención de
interbloqueos para determinar si todavía hay procesos en interbloqueo.

Apropiación de Recursos

Se desalojan de forma sucesiva los recursos de los procesos y asignamos dichos recursos a
otros procesos hasta que el ciclo de interbloqueos se interrumpa.

Si se necesita el desalojo para tratar interbloqueos entonces debemos abordar tres


cuestiones:

 Selección de una víctima. De que recursos hay que apropiarse y de que procesos.
Es necesario determinar el orden de apropiación de forma de que se minimicen los
costes.
 Anulación. Si nos apropiamos de un recurso de un proceso, ¿qué debería hacerse
con este proceso? Debemos devolver el proceso a un estado seguro y reiniciarlo a
partir de dicho estado.
 Inanición. ¿Cómo se puede asegurar que no se produzca la muerte por inanición de
un proceso es decir que los recursos no se tomen siempre del mismo proceso? Puede
ocurrir que siempre se elija el mismo proceso como víctima. Como resultado este
proceso nunca completara sus tareas dando lugar a una situación de inanición.
Debemos asegurar que cada proceso pueda ser seleccionado como víctima solo un
numero finito (pequeño) de veces.

También podría gustarte