Sistemi Operativi

Prevenire o evitare i deadlock

Per prevenire il verificarsi di uno stallo è sufficiente fare in modo che non sia soddisfatta almeno una delle quattro condizioni necessarie per lo stallo, imponendo vincoli sulle modalità con le quali si possono avanzare richieste di risorse:

  1. La condizione di mutua esclusione si applica alle risorse non condivisibili ed in generale non e’ possibile violarla in quanto alcune risorse (per es. le stampanti) sono intrinsecamente non condivisibili.

  2. Per far si che non si presenti mai la condizione di possesso ed attesa occorre fare in modo che, quando un processo richiede una risorsa, non sia in possesso di altre risorse. Questo risultato si può ottenere in due modi: il primo prevede che un processo richieda e riceva tutte le risorse di cui ha bisogno prima di cominciare l’esecuzione; il secondo prevede che un processo possa richiedere risorse solo quando non ne ha. Questi approcci presentano due grossi inconvenienti: scarsa utilizzazione delle risorse e morte per fame. E Infatti nel primo modo le risorse possono essere assegnate ma non utilizzate per un lungo intervallo di tempo. Inoltre un processo che ha bisogno di diverse risorse molto usate può essere obbligato ad attendere indefinitamente perchè una delle risorse di cui ha bisogno e’ sempre assegnata a qualche altro processo.

  3. Per fare in modo che non sia soddisfatta la terza condizione, l’assenza di diritto di prelazione, si può seguire il seguente procedimento. Se un processo al quale sono state assegnate risorse richiede ulteriori risorse che non gli possono essere assegnate subito, viene privato di tutte le risorse che sono aggiunte alla lista di risorse delle quali il processo è in attesa. Il processo in questione riprenderà l’esecuzione solo quando potrà ricevere sia le risorse che già aveva sia le nuove richieste.

  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, ed esigere che ogni processo richieda le risorse in ordine crescente di elencazione per prevenire in tal modo la formazione di cicli nel grafo delle attese. Se R e’ l’insieme dei tipi di risorse, a ciascun tipo si assegna un diverso numero intero. A questo punto il procedimento da seguire per impedire il soddisfacimento della condizione e’ il seguente. Ogni processo può richiedere risorse solo secondo l’ordine di numerazione crescente.

Evitare un deadlock è invece 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. Più informalmente un sistema è in uno stato sicuro se esiste una sequenza di processi <P0 , P1 , ...., Pn > tale che, per ogni Pi , le risorse aggiuntive che Pi può ancora richiedere possono essere ottenute dalle risorse al momento libere e da quelle assegnate ai processi Pj con j<i. 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. Occorre fare in modo che il sistema, che ovviamente parte da uno stato sicuro, resti sempre in uno stato sicuro: pertanto di fronte ad una richiesta di risorse disponibili il sistema decide di procedere alla allocazione solo se resta in uno stato sicuro. 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.






















































Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.