Sei sulla pagina 1di 8

I Compendi OpenSource

di Giacomo Marciani

Teoria, Formulario e Suggerimenti Pratici

Sistemi Operativi

Deadlock dei processi

Un sistema costituito da un insieme nito di risorse suddivise in tipi di risorse dierenti, ciascuno dei quali formato da pi istanze di risorsa identiche. Una risorsa pu essere sica1 o logica2 . In un sistema multiprogrammato le risorse sono commutate fra processi concorrenti3 . Una tabella di sistema registra

lo stato di ogni risorsa, indicando eventualmente il relativo processo a cui assegnata. Il deadlock4 un fenomeno che si verica quando in un insieme di processi ciascun processo dell'insieme attende un evento che pu essere causato solo da un altro processo dell'insieme. Quindi in un deadlock i processi non terminano mai l'esecuzione. Un deadlock generalmente causato dalla competizione nell'acquisizione di una o pi risorse. Un processo pu servirsi in modo sicuro di una risorsa, solo se rispetta la seguente sequenza: 1. 2. 3.
richiesta uso rilascio

Caratterizzazione del deadlock Un deadlock avviene solo se si vericano contemporaneamente le seguenti condizioni5

mutua esclusione: possesso e attesa:

almeno una risorsa deve essere non condivisibile.

un processo in possesso di una o pi risorse attende di acquisire risorse gi in possesso di altri processi.
impossibilit di preemption: attesa circolare:

non esiste diritto di prelazione sulle risorse.

deve esistere una mutua attesa tra tutti i processi.

Gra di assegnazione delle risorse Le situazioni di deadlock possono essere descritte con maggior precisione avvalendosi delle rappresentazioni a digrafo:

grafo di assegnazione delle risorse

V composto dal sottoinsieme dei processi P 6 e dal sottoinsieme delle

: digrafo il cui insieme di vertici

thread possono competere per le risorse condivise. 4 ovvero stallo. 5 le condizioni di deadlock non sono veramente indipendenti: la condizione di attesa circolare infatti implica la condizione di possesso e attesa. 6 un processo generalmente rappresentato da un cerchio.

1 sono risorse siche : la stampante, l'unit a nastri, lo spazio di memoria e i cicli di CPU. 2 sono risorse logiche : i le, i semafori e i monitor. 3 i programmi multithread sono ottimi candidati alle situazioni di deadlock, poich pi

risorse R7 , e il cui insieme di archi orientati A composto dal sottoinsieme di archi di richiesta Pi Rj e dal sottoinsieme di archi di assegnazione Rj Pi 8 . Un arco di richiesta indica che il processo Pi richiede l'assegnazione della risorsa9 Rj . Un arco di assegnazione indica che la risorsa Rj correntemente assegnata al processo Pi . Quando una richiesta viene esaudita, il corrispondente arco di richiesta viene sostituito da un arco di assegnazione. Se ogni risorsa ha una sola istanza, la presenza di un ciclo nel grafo di assegnazione delle risorse una condizione necessaria e suciente per l'esistenza di un deadlock; e ogni processo interno al ciclo in deadlock. Se ogni risorsa ha pi di una istanza, la presenza di un ciclo una condizione solo necessaria.

grafo di assegnazione delle risorse con reclamo: una variante del digrafo precedente, nel quale si aggiunge il sottoinsieme di archi di reclamo Pi Rj 10 . Un arco di reclamo indica che il processo Pi pu richiedere la risorsa Rj in qualunque momento. Quando il processo Pi . richiede la risorsa Rj l'arco di reclamo viene sostituito da un arco di richiesta; quando Pi . rilascia Rj l'arco di assegnazione viene sostituito da un arco di reclamo.

variante del grafo di assegnazione delle risorse, ottenuta togliendo i nodi delle risorse e componendo gli archi tra i processi. La presenza di un ciclo in questo digrafo una condizione necessariua e suciente per l'esistenza di un deadlock.
grafo d'attesa:

1.1

Gestione di un deadlock

Un deadlock pu essere arontato in quattro modi, e tali approcci possono essere combinati fra loro: prevenire: un protocollo assicura che non si verichi almeno una delle condizioni necessarie al deadlock.

evitare: il sistema operativo schedula opportunamente l'assegnazione delle risorse, disponendo di informazioni aggiuntive sulle richieste dei processi, in modo da

: un algoritmo di rilevamento chiama eventualmente un algoritmo di ripristino del sistema.


rilevare e ripristinare

: si ignora del tutto il problema permettendo il degrado progressivo delle prestazioni, nanche al blocco totale del sistema11 .
ignorare

7 una risorsa generalmente rappresentata da un rettangolo, con all'interno tanti punti quante sono le istanze della risorsa. 8 nel caso in cui una risorsa disponga di pi istanze, l'arco orientato dalla singola istanza al processo. 9 o della istanza di risorsa. 10 anche detti claim edges. Hanno la stessa direzione degli archi di richiesta, ma sono rappresentati da una linea tratteggiata. 11 questo metodo il pi diuso in quanto pi economico.

Prevenire un deadlock Gli algoritmi di prevenzione delle situazioni di deadlock si basano sul controllo delle modalit di richiesta, cos da assicurare che non si possa vericare almeno una delle condizioni necessarie al deadlock. Questi algoritmi possono causare una riduzione nell'utilizzo delle risorse e conseguentemente della produttivit del sistema.
mutua esclusione : non deve mai sussistere la mutua esclusione per le

risorse condivisibili 12 ; tuttavia alcune risorse sono intrinsecamente non

condivisibili, e per esse deve sempre valere la mutua esclusione per garantire la consistenza dei dati.
possesso e attesa: si garantisce che un processo che richieda una risorsa

non ne possegga altre. Esistono due soluzioni: un protocollo che imponga

ad ogni processo di acquisire tutte le risorse necessarie prima della sua esecuzione13 , o un protocollo che permetta ad un processo di richiedere risorse solo se non ne possiede nessuna14 . Queste soluzioni possono rendere ineciente l'utilizzo delle risorse 15 nonch indurre la starvation16 .
impossibilit di prelazione : si impone la prelazione sulle risorse dei processi

in attesa. Si realizza un protocollo che renda disponibili tutte le risorse as-

segnate ad un processo in attesa di altre risorse; il processo viene riavviato quando siano nuovamente disponibili sia le risorse implicitamente rilasciate sia quelle per le quali era in attesa. Alternativamente si realizza un protocollo che assegni ad un processo richiedente quelle risorse assegnate ad un processo in attesa; il processo in attesa viene poi riavviato quando gli siano assegnate tutte le risorse richieste pi tutte quelle sottrattegli durante l'attesa17 .
attesa circolare : si stabilisce una funzione f di ordinamento numerico

totale delle risorse, e si impone un ordinamento numerico crescente di richiesta delle risorse. Si realizza un protocollo che impoga ad un processo

di richieder risorse secondo l'ordinamento numerico crescente. Alternativamente si realizza un protocollo che imponga ad un processo che richieda la risorsa Rj il rilascio di tutte le risorse Rk tali che f (Rk ) > f (Rj ).

Evitare un deadlock Gli algoritmi per evitare le situazioni di deadlock si basano sull'acquisizione di informazioni aggiuntive sulle modalit di richiesta delle risorse da parte dei processi. Una volta acquisite le informazioni sulle
le risorse precedano tutte le altre chiamate di sistema. 14 questa soluzione pu essere realizzata imponendo che le chiamate di sistema che richiedono le risorse inducano il rilascio implicito delle risorse precedentemente assegnate. 15 potrebbero infatti esserci numerose risorse assegnate, ma inutilizzate. 16 ovvero attesa indenita, un processo che richieda pi risorse molto utilizzate potrebbe attenderne indenitivamente il rilascio e quindi mai iniziare la propria esecuzione. 17 notiamo che quest'ultimo protocollo adatto a risorse di cui si possa salvare lo stato per un successivo ripristino. I registri CPU sono particolarmente adatti, a dierenza delle stampanti e le unit a nastri.
12 ad esempio per i le in lettura. 13 questa soluzione pu essere realizzata imponendo che le chiamate di sistema che richiedono

sequenza completa delle richieste e dei rilasci di ogni processo, il sistema operativo pu schedulare l'assegnazione delle risorse in modo da evitare un deadlock. Questi algoritmi esaminano ad ogni richiesta lo stato di assegnazione 18 19 del sistema in ogni delle risorse , e intendono garantire lo stato sicuro istante; dieriscono tra loro per la quantit e la tipologia di informazioni richieste. Questi algoritmi possono rendere ineciente l'utilizzo delle risorse20 . Il protocollo pi semplice e utile richiede che ciascun processo dichiari il numero massimo delle risorse di ciascun tipo di cui necessita. Questo algoritmo esamina dinamicamente lo stato di assegnazione delle risorse garantendo lo stato sicuro delle stesse e che quindi non si verichi la condizione di attesa circolare. In uno stato non sicuro il sistema operativo non pu impedire ai processi di richiedere risorse in modo da causare un deadlock: ci che accade in uno stato non sicuro dipende dunque esclusivamente dai processi ed fuori dal controllo del sistema operativo. L'algoritmo del grafo di assegnazione delle risorse si applica a sistemi con risorse a singola istanza, e consiste nel rilevamento dei cicli21 all'interno di un grafo di assegnazione delle risorse con reclamo. L'algoritmo del banchiere22 si applica a sistemi con risorse a istanza multipla, e si basa sulla gestione di alcune strutture dati che codicano lo stato di assegnazione delle risorse, al ne di garantire in ogni istante lo stato sicuro del sistema. Dati n processi ed m risorse eventualmente ad istanze multiple, le strutture dati necessarie sono:
Disponibili[m]:indica il numero delle istanze disponibili per ogni risorsa. M assimo[n][m]: indica la richiesta massima di risorse per ogni processo. Assegnate[n][m]: indica il numero di istanze assegnate di ogni risorsa ad

ogni processo.

N ecessita `[n][m]: indica la necessit residua di risorse per ogni processo.

Per la descrizione dell'algoritmo utilizziamo le seguenti notazioni:


18 lo stato di assegnazione delle risorse denito dal numero di risorse disponibili e assegnate e dalle richieste massime dei processi. 19 lo stato sicuro quello stato di assegnazione delle risorse per cui il sistema in grado di assegnare in un certo ordine risorse a ciascun processo (no al numero massimo) e impedire il vericarsi di un deadlock. Formalmente si dice che un sistema si trova in stato sicuro se e solo se esiste una sequenza sicura per lo stato di assegnazione attuale, altrimenti si dice che il sistema in stato non sicuro. Notiamo che: uno stato di deadlock uno stato non sicuro. non tutti gli stati non sicuri sono stati di deadlock. uno stato non sicuro potrebbe condurre ad un deadlock. 20 se un processo richiedesse una risorsa disponibile potrebbe comunque essere costretto ad attendere. 21 la complessit algoritmica quadratica del numero dei processi. 22 il nome dell'algoritmo dovuto al fatto che potrebbe essere applicato ad un sistema bancario perch impedisca di assegnare tutto il denaro disponibile, poich, se ci avvenisse, non potrebbe pi soddisfare le richieste dei suoi clienti.

tutte le righe delle matrici Assegnate[n][m] e N ecessita `[n][m] possono considerarsi vettori e si possono chiamare rispettivamente Assegnatei e N ecessita `i . dati due vettori X e Y di eguale dimensione, aermiamo che X Y sse X [i] Y [i] i = 1, ..., n.

Questo algoritmo si divide in:

algoritmo di verifica della sicurezza

trovi o meno in uno stato sicuro.

: determina se il sistema si

1. Lavoro = Disponibili, F ine[i] = f also i = 0, ..., n 1. 2. cerca un indice i tale che F ine[i] == f also N ecessita `i Lavoro . Se i vai al passo 4. 3. Lavoro = Lavoro + Assegnate F ine[i] = vero, e torna al passo 2. 4. se F ine[i] == vero i = 0, ..., n 1, allora il sistema in uno stato sicuro.

algoritmo di richiesta delle risorse

sano essere garantite in uno stato sicuro.

: determina se le richieste pos-

1. se Richiestei N ecessita `i , vai al passo 2, altrimenti riporta una condizione di errore, in quanto Pi sta richiedendo pi risorse di quanto non gli siano necessarie. 2. se Richiestei Disponibili, vai al passo 3, altrimenti Pi deve attendere in quanto le risorse non sono disponibili. 3. simula l'assegnazione al processo Pi modicando come segue lo stato di assegnazione delle risorse
Disponibili = Disponibili Richiestei Assegnatei = Assegnatei + Richiestei N ecessita `i = N ecessita `i Richiestei

Si esegue l'algoritmo di verica della sicurezza: se lo stato di assegnazione delle risorse risultante sicuro, la transazione viene completata, altrimenti viene ripristinato il precedente stato di assegnazione delle risorse, e Pi viene messo in attesa di Richiestei .

Rilevare un deadlock e ripristino Se un sistema non si avvale di un protocollo per prevenire o evitare situazioni di deadlock, possibile che il deadlock si verichi eettivamente. Il sistema deve dunque disporre di:

algoritmo di rilevamento del deadlock

: in un sistema con risorse ad istanza singola consiste nell'individuare un ciclo all'interno del grafo d'attesa. L'algoritmo di rilevamento del deadlock in un sistema con risorse ad istanze multiple indaga su ogni possibile sequenza di assegnazione per i processi che devono ancora essere completati, e si serve delle seguenti strutture dati che codicano lo stato di assegnazione delle risorse: 6

 Disponibili[m]: indica il numero delle istanze disponibili per ogni risorsa.  Assegnate[n][m]: indica il numero di istanze assegnate di ogni risorsa ad ogni processo.  Richieste[n][m]: indica la richiesta attuale di ogni processo.

L'algoritmo esegue i seguenti passi: 1. Lavoro = Disponibili i = 1, ..., n. Se Assegnatei = 0 F ine[i] = f also, altrimenti F ine[i] = vero. 2. cerca un indice i tale che F ine[i] = f also Richiestei Lavoro23 . Se i vai al passo 4. 3. Lavoro = lavoro + Assegnatei F ine[i] = vero vai al passo 2. 4. se F ine[i] == f also per qualche i, allora il sistema in deadlock; in particolare se F ine[i] == f also, il processo Pi in deadlock. La frequenza di utilizzo dell'algoritmo di rilevamento del deadlock dipende dalla frequenza di deadlock prevista, e dal numero di processi inuenzabili dalil deadlock. In generale non conveniente richiedere l'algoritmo di rilevamento in momenti arbitrari, in quanto nel grafo di assegnazione delle risorse potrebbero coesistere pi cicli, nei quali non sarebbe identicabile il processo responsabile del deadlock.

: la ntura del ripristino pu essere manuale o automatica. Esistono due modalit di ripristino:
algoritmo di ripristino dalla condizione di deadlock

: il sistema recupera immediatamente tutte le risorse. Esistono due soluzioni di ripristino con terminazione: terminazione totale: consiste nel recupero immediato di tutte le risorse da parte del sistema; un'operazione onerosa, comporta la ricomputazione dei risultati, e pu causare l'inconsistenza dei dati24 . terminazione singola: viene terminato un processo alla volta; ad ogni terminazione segue l'esecuzione dell'algoritmo di rilevamento del deadlock.  ripristino con prelazione: consiste nella riassegnazione con prelazione di tutte le risorse no all'interruzione del deadlock. Esistono due soluzioni di ripristino con prelazione:

ripristino con terminazione

23 questa condizione garantisce che P non attualmente in deadlock, quindi, assumendo un i atteggiamento ottimistico, si suppone che Pi non intenda richiedere altre risorse per completare il proprio compito, e che restituisca presto le risorse. Qualora ci non sia vero, si pu vericare un deadlock. 24 si pensi all'interruzione della scrittura su le, o alla reimpostazione della stampante.

: il processo selezionato per essere sottoposto a prelazione viene terminato per poi essere opportunamente riavviato; la soluzione pi eciente. prelazione con ripristino a stato sicuro: il processo selezionato per essere sottoposto a prelazione viene riportato ad un suo precedente stato sicuro; la soluzione pi ecace.
prelazione con terminazione

Il criterio di selezione dei processi da terminare o su cui eettuare la prelazione si basa sui seguenti fattori:
 priorit e tipologia dei processi.  numero di processi da terminare.  quantit e tipologia di risorse assegnate e necessarie al completamento.  tempo trascorso dall'inizio della computazione, e tempo necessario al suo completamento.

Le euristiche di minimizzazione del costo devono includere nei fattori di costo il numero di terminazioni subite da ogni processo, al ne di evitare l'attesa indenita dovuta alla continua terminazione o prelazione di uno stesso processo pi costoso degli altri.