quali sono i diversi modi per prevenire un deadlock? | - Ignorare il deadlock: questo è il metodo più semplice, ma può portare a prestazioni scadenti e alla perdita di dati.
- Prevenire il deadlock: questo può essere fatto invalidando una delle quattro condizioni per il verificarsi di un deadlock. Ad esempio, il sistema operativo potrebbe impedire ai processi di richiedere risorse che non sono disponibili.
- Evitare il deadlock: questo può essere fatto richiedendo al processo informazioni supplementari sull'utilizzo delle risorse. Ad esempio, il sistema operativo potrebbe richiedere al processo di specificare quali risorse utilizzerà all'avvio.
- aspettare che il deadloc si verifichi. per implementare funzioni di risoluzione |
quali sono i diversi modi per rilevare i deadlock(metodo di rilevazione e recupero)? | Il rilevamento del deadlock può essere fatto utilizzando un grafo di attesa(variante del grafo di allocazione delle risorse) o un algoritmo simile all'algoritmo del banchiere.
Un grafo di attesa è una rappresentazione grafica dei processi
Ogni processo è rappresentato da un nodo nel grafo e quando un processo è in attesa di una risorsa detenuta da un altro processo allora viene segnato da una freccia.
un semplice algoritmo controlla periodicamente il grafo in cerca di cicli.
L'algoritmo del banchiere è un algoritmo che può essere utilizzato per determinare se un sistema è in uno stato sicuro. Un sistema è in uno stato sicuro se esiste una sequenza di processi che possono essere eseguiti senza causare un deadlock. |
quale la differenza fra un deadlock e una starvation? | Un deadlock è una situazione in cui un gruppo di processi è bloccato in attesa di risorse che non saranno mai disponibili. Uno starvation è una situazione in cui un processo non è in grado di ottenere le risorse di cui ha bisogno per completare l'esecuzione.
sostanzialmente il deadlock coinvolge piu di un processo mentre la starvation coinvolge un solo processo |
quali sono le possibili conseguenze di un deadlock? | Un deadlock può portare a una serie di conseguenze negative, tra cui:
* Perdite di dati
* Perdite di prestazioni
* Instabilità del sistema |
come si puo' prevenire un deadlock? | Un deadlock può essere prevenuto adottando una serie di misure che influiscano direttamente sulle cause del deadlock:
1) Rispettare la mutua esclusione
2) Possesso e attesa:
Evitare che i processi richiedano risorse quando ne detengono già altre, due tecniche:
- il processo richiede tutte le risorse prima di iniziare.
- un processo che possiede alcune risorse e vuole chiederne altre deve PRIMA rilasciare tutte quelle che già detiene
3) implementazione della pre emption:
- un processo che richiede le risorse che però risultano occupate allora rilascia tutte quelle che detiene per poi richiederle
- preemption sui processi attesi, se A attende risorse di B che non sono utilizzate vengono fatte rilasciare
4) attesa circolare: grazie all'implementazione di una gerarchia delle risorse
un processo che ha la risorsa n.5 puo richiedere solo risorse maggiori ,
se ne vuole chiedere di inferiori allora deve rilasciare tutte quelle che ha |
cosa prevede l'ingoramento di un deadlock? | Posso permettermi di adottare tale metodo quando l'eventualità che accadano stalli sia rarissima, ad esempio legata ad un errore hardware o software che avviene con frequenza molto bassa. Questa politica normalmente consente all'utente che non vede progredire il suo processo di abortirlo o riavviare tutto il sistema. |
spiega l'algoritmo del banchiere in breve | l'algoritmo del banchiere viene usato quando sono presenti risorse che possono avere istanze multiple(quindi un ciclo non significa per forza deadlock).
le regole sono due:
- i processi devono dichiarare per ogni risorsa richiesta il numero di istanze massimo di cui avranno bisogno
- ogni processo dovrà resistuire in un tempo finito le risorse utilizzate
si divide in due parti
1) Verifica della sicurezza: questa parte verifica se lo stato corrente del sistema è sicuro.
2) Gestione delle richieste: questa parte gestisce le richieste di risorse dei processi. |
come possono essere gestiti i deadlocks? | metodi per affrontare i deadlocks sono :
- Ignorando: il sistema si ferma e viene riavviato il tutto
- Prevenzione : eliminazione di una delle cause del deadlock (mutua esclusione, possesso e attesa, preemption, attesa circolare)
- Avoidance : verificare in anticipo se le risorse possono essere assegnate al processo( grafo di allocazione delle risorse, Algoritmo del banchiere)
- Rilevazione e recupero: viene utilizzato il grafo di attesa per stabilire la presenza di un deadlock, nel caso vengono terminati i processi ritenuti responsabili del deadlock |
quali sono le quattro condizioni per il verificarsi di un deadlock? | Mutua esclusione: almeno una delle risorse coinvolte è utilizzata in modo mutuamente 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 non può forzare il rilascio di risorse assegnate ai processi.
Attesa circolare: n processi attendono in modo che P1 attende P2, P2 attende P3, ..., Pn attende P1. |
che metodi esistono per la risoluzione di un deadlock? (metodo della rilevazione e ripristino del deadlock) | quando viene rilevata la presenza di un deadlock il sistema operativo può agire in due diverse maniere:
1) informare l'utente e chiedere indicazioni sul come procedere
2) il sistema operativo implementa alcuni algoritmi per il ripristino del deadlcok quali
- eliminazione dei processi coinvolti nel deadlock(uno a uno oppure tutti assieme)
- applicare il rilascio anticipato delle risorse (facendo in modo che 1. il processo vittima scelto non sia sempre lo stesso(starvation) 2. fare in modo che il processo che rilasci le risorse ricominci la sua esecuzione da uno stato sicuro(rollback)) |