Il deadlock é una condizione in cui ogni processo in un gruppo é bloccato in attesa di un evento che puó essere generato solo da un altro processo del gruppo, tipicamente il rilascio di risorse.
Come si verifica un deadlock
Affinché il deadlock si possa verificare devono essere soddisfatte contemporaneamente 4 condizioni:
- Mutua Esclusione: almeno una delle risorse coinvolte é utilizzata in modo mutualmente esclusivo dai processi
- Possesso e Attesa: un processo che possiede delle risorse si mette in attesa per averne altre
- Nessun rilascio anticipato: il sistema operativo si non puó forzare il rilascio di risorse assengate a dei processi.
- Attesa Circolare: n processi attendono in circolare, P1 → P2 → P3 → P1
Come affrontare il problema
Vediamo come affrontare il problema del deadlock:
- Ingorare il deadlock: Nella maggior parte dei casi é una condizione che avviene raramente, ipotizzando che forse é meglio ignorare il problema, resettando il sistema quando si avvia.
- Prevenire il deadlock: Si agisce invalidando una delle condizioni del deadlock, imponendo dei vincoli sulle richieste, che peró indicano un malus per il programmatore.
- Mutua Esclusione: Alcune risorse sono intrisecamente condivisibili, e per questo si puó invalidare, non é possibile farlo per tutte.
- Possesso e Attesa: Si puó invalidare imponendo che i processi richiedano tutte risorse all’avvio, oppure imponendo che un processo prima di fare una richiesta, rilasci tutte le risorse che possiede.
- Nessun rilascio anticipato: Si puó invalidare in due modi:
- Quando un processo viene messo in attesa per una richiesta, tutte le sue risorse sono rilasciate anticipatamente e quindi attende per la
- Attesa circolante: Si puó invalidare imponendo un ordinamento sulle risorse, ossia definendo una funzione che assegni ad ogni risorsa un numero intero, quando un processo richiede risorse di ordine i, questo lo puó ottenere solo se sono disponibili e non possiede giá risorse di ordine ≥ i. Se ne possiede, le deve rilasciare e richiedere in ordine corretto.
Evitare il deadlock
I metodi per evitare il deadlock non pongono vincoli su come fare le richieste, ma chiedono al processo informazioni supplementari sull’utilizzo delle risorse e le utilizzano per verificare se lo stato risultante da una richiesta é sicuro.
Uno stato si dice sicuro per n processi se esiste almeno una sequenza sicura, ossia una sequenza di n processi per cui le richieste di ogni processi Pi della sequenza, possono essere soddisfatte con le risorse attualmente disponibili piú delle detenute dai processi Pj.
Se non esiste tale sequenza, si dice non sicuro.
Istanze singole delle risorse