Disciplinas del Interbloqueo: prevención, detección, eliminación y recuperación.
Un interbloqueo se produce cuando dos o más tareas se bloquean entre sí permanentemente teniendo cada tarea un bloqueo en un recurso que las otras tareas intentan bloquear.
Un interbloqueo es una condición que se puede dar en cualquier sistema con varios subprocesos, no
sólo en un sistema de administración de bases de datos relacionales, y
puede producirse para recursos distintos a los bloqueos en objetos de
base de datos
Por ejemplo:
- La transacción A tiene un bloqueo compartido de la fila 1.
- La transacción B tiene un bloqueo compartido de la fila 2.
- La transacción A ahora solicita un bloqueo exclusivo de la fila 2 y se bloquea hasta que la transacción B finalice y libere el bloqueo compartido que tiene de la fila 2.
- La transacción B ahora solicita un bloqueo exclusivo de la fila 1 y se bloquea hasta que la transacción A finalice y libere el bloqueo compartido que tiene de la fila 1.
Prevención del interbloqueo.
Objetivo: conseguir que sea imposible la aparición de situaciones de interbloqueo.
Impedir
que se produzca una de las cuatro condiciones necesarias para
producirlo: Exclusión mutua, Retención y espera, No expropiación, y
Espera circular.
Condicionar un sistema para quitar cualquier posibilidad de ocurrencia de interbloqueo.
Que no se cumpla una condición necesaria
- “Exclusión mutua” y “sin expropiación” no se pueden relajar. Dependen de carácter intrínseco del recurso.
- Las otras dos condiciones son más prometedoras.
Recuperación de Interbloqueo.
Limpiar un sistema de interbloqueos, una vez que fueron detectados.
Cuando
se ha detectado que existe un interbloqueo, podemos actuar de varias
formas. Una posibilidad es informar al operador que ha ocurrido un
interbloqueo y dejar que el operador se ocupe de él manualmente. La otra
posibilidad es dejar que el sistema se recupere automáticamente del
interbloqueo. Dentro de esta recuperación automática tenemos dos
opciones para romper el interbloqueo: Una consiste en abortar uno o más
procesos hasta romper la espera circular, y la segunda es apropiar
algunos recursos de uno o más de los procesos bloqueados.
Eliminar interbloqueos.
Para
eliminar interbloqueos abortando un proceso, tenemos dos métodos; en
ambos, el sistema recupera todos los recursos asignados a los procesos
terminados.
- Abortar todos los procesos interbloqueados. Esta es una de las soluciones más comunes, adoptada por Sistemas Operativos. Este método romperá definitivamente el ciclo de interbloqueo pero con un costo muy elevado, ya que estos procesos efectuaron cálculos durante mucho tiempo y habrá que descartar los resultados de estos cálculos parciales, para quizá tener que volver a calcularlos más tarde.
- Abortar un proceso en cada ocasión hasta eliminar el ciclo de interbloqueo. El orden en que se seleccionan los procesos para abortarlos debe basarse en algún criterio de costo mínimo. Después de cada aborto, debe solicitarse de nuevo el algoritmo de detección, para ver si todavía existe el interbloqueo. Este método cae en mucho tiempo de procesamiento adicional.
Si
éste se encuentra actualizando un archivo, cortarlo a la mitad de la
operación puede ocasionar que el archivo quede en un mal estado.
Si
se utiliza el método de terminación parcial, entonces, dado un conjunto
de procesos bloqueados, debemos determinar cuál proceso o procesos debe
terminarse para intentar romper el interbloqueo. Se trata sobre todo de
una cuestión económica, debemos abortar los procesos que nos
representen el menor costo posible.
No hay comentarios.:
Publicar un comentario