Qué Ocasiona Un Deadlock
Enviado por ian427 • 12 de Mayo de 2012 • 1.858 Palabras (8 Páginas) • 1.188 Visitas
DEADLOCKS
¿Qué es un deadlock?
Es de conocimiento de muchos programadores que el uso de la palabra clave ’synchronized’ ya sea para establecer metodos o bloques de código sincronizado, afectan el optimo desempeño de las aplicaciones con respecto a la velocidad de proceso. Aunque el uso abusivo de estos bloques de código sincronizado no es recomendable, las constantes mejoras en la máquina virtual de java a través de los años han hecho que el porcentaje de desempeño afectado versus los enormes beneficios que trae a la hora de resolver problemas de concurrencia, hacen que la balanza se incline en favor de este último.
El principal problema asociado con el abuso de los bloques de código sincronizado es que entra más bloques de este tipo tengamos dentro de una aplicación, mayor será la probabilidad que en algún punto durante la ejecución del programa, ocurra un DeadLock y el programa empiece un bucle infinito lo cual hará que finalmente el programa sea forzado a su reinicio manualmente.
Generalmente, un DeadLock ocurre cuando al menos dos hilos intentan asegurar un objeto al mismo tiempo. Con el fin de ser más específico doy un ejemplo: El hilo A asegura el objeto obj1 mientras el hilo B asegura el objeto obj2. Luego el hilo A intenta asegurar el objeto obj2 antes de liberar el objeto obj1. Al mismo tiempo el hilo B intenta asegurar el objeto obj1 antes de liberar el objeto obj2. Lo que tenemos aquí es que el hilo A esperara hasta que el hilo B libere el objeto obj2, mientras que B seguirá esperando hasta que el hilo A libere el objeto obj1 y así se quedaran esperando el uno al otro hasta el día del juicio final.
En un ambiente de multiprogramación, varios procesos pueden competir por un numero finito de recursos. Un proceso solicita recursos y si estos no están disponibles en ese momento, el proceso entra en estado de espera. Puede ocurrir que procesos en espera nunca cambien de estado, pues los recursos que han solicitado han sido tomados por otros procesos en espera. Por ejemplo, en un sistema con 4 unidades de cinta y 2procesos, cada uno de los cuales ha tomado 2 unidades de cinta pero necesitan 3, cada uno de ellos esperara que el otro libere las cintas. Esta situación se conoce como deadlock (abrazo mortal).Un sistema debe tomar acciones extremas para provenir un deadlock o recuperarse si ello sucede, tales como liberación de todos los recursos de uno o mas procesos que han entrado en deadlock.
EL PROBLEMA DEL DEADLOCK (ABRAZO MORTAL)
Este problema no es único de los S.O. Generalizando la interpretación de recursos y procesos, tenemos situaciones de deadlock en nuestra vida diaria. Por ejemplo, consideremos el cruce de un río a través de piedras. Para cruzarlo, una persona (en nuestro ejemplo un proceso) debe pisar una a una las piedras(recursos). Si dos personas de ambos lados del río comienzan el cruce, al llegar a la mitad se produce el deadlock
.Una solución seria que una de ellas retroceda. Esto, en el ambiente de S.O. se denomina rollback. Sivarias personas son las que cruzan, para solucionar el problema, puede que sea necesario que mas deuna de ellas retrocedan. La única manera de asegurar que el deadlock no ocurra, es poniéndose de acuerdo en un protocolo. Por ejemplo para iniciar el cruce se vea que de la otra orilla nadie ya lo ha iniciado. Debemos hacer algunas observaciones a este protocolo: Se debe determinar un mecanismo para saber si alguien este cruzando, el río. Si es posible saber el estado de todas las piedras, esta sola condición es suficiente, pero si no (por ejemplo que el río sea muy ancho ono se divise la otra orilla) debo implementar otro mecanismo.
Supongamos que simultáneamente 2 personas de orillas opuestas quieran cruzar el río. Nuestro protocolo no especifica que se debe hacer. Si ambos cruzan, tengo deadlock. Si cada una espera por la otra a comenzar, estamos también en otra forma de deadlock. Una solución seria asignar a una de las orillas mayor prioridad: por ejemplo la persona de la costa Este cruzara primero, mientras la otra deberáesperar.
Si aplicamos lo anterior, una o mas personas pueden esperar indefinidamente para cruzar. Esta situación se conoce como inanición. Sería el caso que una fila continua de gente cruce del Este (de mayor prioridad). Para evitar esto debo extender mi protocolo. Por ejemplo, definiendo un algoritmo que alterne la dirección de cruce.
MODELO DE UN SISTEMA
Un sistema consiste en un número finito de recursos a ser distribuidos entre un numero de procesos en competencia. Los recursos se particionan en distintos tipos, cada uno de los cuales se llaman "Instancias". Como ejemplo de tipos de recursos tengo ciclos de CPU, espacio de memoria, archivos, dispositivos deE/S (impresoras, unidades de cintas etc.).
Si el sistema tiene 2 CPU, entonces este tipo de recurso tiene 2 instancias. Si un proceso solicita una instancia de algún tipo de recurso, la asignación de cualquier instancia satisface el pedido. Sí no sucede así, entonces las instancias no son idénticas, y por lo tanto no han sido definidas correctamente las clases de tipo de recursos. Por ejemplo, si un sistema tiene 2 impresoras, estas pueden definirse dentro del mismo tipo de recurso, si es indiferente por donde se imprima una salida. Sin embargo, si una impresora esta en el piso 9 y la otra en el sótano de un edificio, evidentemente los usuarios del piso 9 no verán ambas impresoras como equivalentes y por lo tanto debo definir ambas como distintos tipos de recursos. Un proceso debe solicitar un recurso antes de usarlo, y liberarlo luego. El proceso puede solicitar tantos recursos como requiera la tarea a realizar. Obviamente, el numero de recursos solicitados no puede superar el numero de recursos disponibles en el sistema. Bajo condiciones normales de trabajo, un proceso puede utilizar un recurso solo en la secuenciasiguiente:1.- Pedido o solicitud: si el pedido no puede ser cumplido (por ejemplo por estar siendo usado por otro proceso, el proceso debe esperar hasta que este disponible.2.-
...