1. Cos'è il Deadlock (Stallo)?
In un sistema operativo, un deadlock (stallo) si verifica quando un insieme di processi è permanentemente bloccato perché ciascun processo detiene una risorsa ed è in attesa di acquisire un'altra risorsa che è attualmente detenuta da un altro processo dello stesso insieme. Nessun processo può avanzare, rilasciare risorse o terminare, bloccando indefinitamente l'esecuzione del sistema.
2. Le 4 Condizioni di Coffman
Affinché possa verificarsi un deadlock, devono essere presenti simultaneamente quattro condizioni fondamentali:
- Mutua Esclusione (Mutual Exclusion): Almeno una risorsa deve essere detenuta in modo non condivisibile (un solo processo alla volta può usarla).
- Possesso e Attesa (Hold and Wait): Un processo deve detenere almeno una risorsa e contemporaneamente essere in attesa di acquisire ulteriori risorse possedute da altri processi.
- Assenza di Preompzione (No Preemption): Le risorse non possono essere sottratte con la forza a un processo; possono essere rilasciate solo volontariamente dal processo stesso dopo il completamento del suo compito.
- Attesa Circolare (Circular Wait): Deve esistere un insieme chiuso di processi $\{P_0, P_1, \dots, P_n\}$ tale che $P_0$ attende una risorsa detenuta da $P_1$, $P_1$ attende $P_2$, e $P_n$ attende $P_0$.
3. Simulatore Interattivo: Rilevamento dello Stallo
Simula l'interazione tra due processi e due risorse critiche per osservare quando insorge una situazione di deadlock o un'esecuzione sicura.
Processo P1
Possiede: Nessuna
Attende: Nessuna
Processo P2
Possiede: Nessuna
Attende: Nessuna