Abraçada mortal
De Viquipèdia
Una abraçada mortal (també coneguda com a deadlock ó interblocatge) és una situació on dues o més accions s'esperen mútuament, incapaces de seguir fins que les altres no acabin, i, per tant, cap d'elles no acaba mai. Apareix sovint a les paradoxes, com el dinar de filòsofs.
En informàtica, abraçada mortal es refereix a un problema específic on dos o més processos esperen el mateix recurs compartit. En el context de bases de dades, es refereix a la possibilitat d'una espera infinita quan un SGBD fa el control de concurrència mitjançant un sistema de reserves. Les abraçades mortals són un problema habitual de concurrència, on diversos processos comparteixen un tipus específic de recurs mutualment exclusiu anomenat mutex. Són especialment problemàtiques perquè no hi ha una solució general per a resoldre abraçades mortals.
Taula de continguts |
[edita] Condicions necessàries
- Exclusió mútua: un recurs o bé és assignat a un sol procés o bé està disponible.
- "Agafar i esperar": els processos que han bloquejat un recurs poden seguir bloquejant-ne d'altres.
- No preemptció: només pot alliberar un recurs el procés que l'ha bloquejat (no és possible l'alliberament forçat)
- Espera circular: dos o més processos formen una cadena on cada procés espera el recurs que el següent procés té bloquejat.
[edita] Evitar abraçades mortals
Les abraçades mortals poden evitar-se si tenim certa informació a priori sobre el bloqueig dels recursos. Per cada petició de bloqueig el sistema pot comprovar si el fet d'assignar el recurs al procés que el demana durà el sistema a un estat insegur, entenent com a estat insegur aquell on l'abraçada mortal és possible. Si tenim, doncs, la capacitat de fer aquesta comprovació, el sistema només assignarà un recurs quan aquesta assignació mantingui el sistema en un estat segur. Tanmateix, en molts sistemes és no és possible saber d'antuvi si un estat és segur o insegur, i per tant no tenim un algorisme genèric per a evitar abraçades mortals.
[edita] Prevenció d'abraçades mortals
Podem prevenir l'aparició d'abraçades mortals assegurant que una de les quatre condicions d'abans no succeeix. D'aquestes condicions la que habitualment és més senzilla d'evitar és l'espera circular: podem imposar un ordre en l'adquisició de recursos, de tal manera que no pugiun produir-se esperes circulars.
[edita] Detecció d'abraçades mortals
A vegades no és possible de prevenir ni evitar les abraçades mortals. En aquests casos s'empra un algorisme de detecció d'abraçades mortals, que cerca esperes circulars i mata un o més dels processos involucrats per a desfer l'abraçada mortal.