Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Deadlock - Wikipedia

Deadlock

Da Wikipedia, l'enciclopedia libera.

In informatica il Deadlock è una situazione in cui due (o più) task si bloccano a vicenda aspettando che uno esegua una certa azione (es. rilasciare il controllo su una risorsa come un File, una porta Input/Output ecc.) che serve all'altro e viceversa.

Un esempio è rappresentato da due persone che vogliono disegnare. Per disegnare hanno a disposizione solo una riga e una matita. Per disegnare hanno bisogno di entrambe. Potendo prendere un solo oggetto per volta, se uno prende la matita e l'altro prende la riga i due generano un deadlock.

Questa situazione può esser vista come un paradosso (come la questione dell'uovo e della gallina) e non può essere risolta. Applicazioni che sono tipicamente soggette ai deadlock sono i database, nel caso in cui ci siano richieste circolari di accesso esclusivo da parte di diverse transazioni sulle stesse risorse, oppure i sistemi operativi che gestiscono l'accesso contemporaneo a file e a dispositivi di I/O di diversi processi.

Indice

[modifica] Condizioni necessarie e sufficienti

Le condizioni necessarie, ma non sufficienti, per il verificarsi di un Deadlock sono:

  1. Mutua esclusione: almeno una delle risorse del sistema deve essere 'non condivisibile' (ossia usata da un processo alla volta oppure libera).
  2. Possesso ed attesa: i processi che possiedono una risorsa possono richiederne altre.
  3. Impossibilità di prelazione: solo il processo che detiene la risorsa può rilasciarla.
  4. Attesa circolare: esiste un gruppo di processi {P0,P1,...,Pn} per cui P0 è in attesa per una risorsa occupata da P1, P1 per una risorsa di P2, ecc... Pn per una risorsa di P0.

Una situazione di Deadlock può essere riconosciuta analizzando il Grafo delle attese dei task del sistema.

Le quattro condizioni di cui sopra, sono collettivamente anche sufficienti per provocare il Deadlock.

[modifica] Gestione

[modifica] Evitare i Deadlock

È una soluzione possibile solo se il sistema è capace di mantenere delle informazioni sulle risorse disponibili al sistema e sulle risorse che ogni processo può potenzialmente richiedere.

Si definisce Stato sicuro di un sistema quando è possibile eseguire i processi in una sequenza tale per cui, allocando ad ognuno di essi tutte le risorse che potenzialmente può richiedere, gli si permetta di terminare la propria esecuzione e quindi evitare il Deadlock. Se il sistema si trova in uno stato sicuro il Deadlock può essere evitato, ma uno stato non sicuro non implica necessariamente un Deadlock.

Il sistema può dunque evitare del tutto gli stalli se, ad ogni richiesta di una risorsa da parte di un processo, effettua una verifica dello stato in cui si troverebbe allocando la risorsa. Se lo stato è sicuro la risorsa può essere tranquillamente allocata. A tal fine si può utilizzare l'Algoritmo del banchiere.

Tuttavia, per la maggior parte dei sistemi è impossibile conoscere in anticipo le risorse che richiederà un processo, per cui è spesso impossibile evitare del tutto i Deadlock.

[modifica] Prevenzione dei Deadlock

In questo caso si cercando di evitare i Deadlock annullando una o più delle condizioni di cui sopra: essendo esse collettamente sufficienti basta infatti invalidarne una.

Per esempio:

  1. Annullando la condizione di mutua esclusione e permettendo l'accesso contemporaneo ad una stessa risorsa da parte di diversi processi (es. file aperti in lettura). Può essere impossibile come nei casi di scrittura su file o accesso ad una risorsa senza spooling.
  2. Si può richiedere ad un processo di richiedere tutte le risorse di cui dovrà disporre all'avvio oppure con la convenzione di rilasciare una risorsa prima di richiederne un'altra. Spesso questa soluzione non è praticabile o poco efficace. Tuttavia è utilizzata nei database che fanno uso di Two Phase Locking.
  3. Permettere la prelazione, che però può lasciare l'applicazione vittima in uno stato inconsistente.
  4. L'attesa circolare si può risolvere permettendo ad ogni processo di richiedere solo una risorsa alla volta oppure imponendo un ordinamento (o una gerarchia) sui processi e prevenire in tal modo la formazione di cicli nel grafo delle attese.

[modifica] Ripristinare i Deadlock

Quando non è possibile evitare o prevenire i Deadlock si possono solo definire degli algoritmi per riconoscere e ripristinare i stati di Deadlock. Il riconoscimento dello stato di blocco può avvenire con lo stesso Algoritmo del banchiere.

Per quanto riguarda il ripristino, si può procedere con la terminazione di tutti i processi in stallo o di un processo alla volta fino alla risoluzione del Deadlock, oppure con la prelazione sulla risorsa che causa il problema. Particolare cura deve essere riposta nella scelta della vittima della prelazione.

[modifica] Deadlock distribuiti

In presenza di un sistema distribuito (come per esempio un database risiedente su diversi server), riconoscere una situazione di potenziale Deadlock si rende ancora più complessa. In genere la rivelazione del possibile stato insicuro può essere effettuata solo ricostruendo il grafo delle attese globale a partire da quelli locali o con particolari algoritmi (vedi la variante distribuita del Two Phase Locking).

Tuttavia, la possibilità che il grafo delle attese globale non rifletta sempre correttamente l'effettivo stato del sistema distribuito, può rivelare dei Deadlock inesistenti (Phantom Deadlocks) che sono già stati risolti perché uno dei processi ha terminato la sua esecuzione nel frattempo o che non sono mai esistiti realmente.

[modifica] Voci correlate

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com