Il sistema operativo è il software più fondamentale che gira su un computer. È responsabile della gestione della memoria e dei processi del computer, nonché della protezione dei dettagli dell'hardware dai programmi applicativi che lo utilizzano. Il sistema operativo di un computer assicura anche un'equa allocazione delle risorse agli utenti e ai programmi rispetto alla distribuzione equa tra i processi. Un sistema di programmazione equo consente a un processo di utilizzare la CPU mentre l'altro è in attesa in coda. Di conseguenza, ogni thread ottiene accesso sufficiente a risorse limitate che impediscono le due condizioni più comuni che altrimenti ritarderebbero il processo: Deadlock and Starvation. Entrambi sono concetti correlati in cui i processi non hanno accesso alle risorse. Questo articolo evidenzia alcuni punti chiave che confrontano i due su vari fronti.
Deadlock è una condizione in cui un set di thread è bloccato perché ogni processo in possesso di una risorsa sta tentando di accedere ad altre risorse che sono trattenute da un altro processo, impedendo infine una corretta pianificazione del sistema. Una situazione di stallo si verifica quando le seguenti quattro condizioni sono vere: l'esclusione reciproca significa che solo un processo può accedere a una risorsa alla volta; Nessuna condizione di prelazione significa che una risorsa può essere rilasciata volontariamente solo dal processo che detiene la risorsa; Hold & wait significa che un processo che trattiene le risorse può richiedere risorse aggiuntive detenute da altri processi e; Attesa circolare significa che due o più processi sono bloccati in una catena circolare in attesa che ciascun processo rilasci le rispettive risorse.
La fame è una condizione che si verifica quando un processo entra nel periodo di attesa indefinitamente poiché un processo a bassa priorità non ha mai la possibilità di accedere alla risorsa a causa di un flusso costante di processi ad alta priorità che accedono alla stessa risorsa. È un problema di gestione delle risorse perché a un processo viene negato l'accesso alla risorsa richiesta, quindi il processo viene trascinato in un periodo di attesa indefinito. Succede perché la risorsa che richiede non viene mai assegnata al processo, facendo sì che il processo muoia di fame di risorse, da cui il nome. Il modo migliore per evitare la fame è utilizzare la tecnica dell'invecchiamento che aumenta gradualmente la priorità dei processi che si trovano nel periodo di attesa per lungo tempo al fine di garantire un sistema di programmazione equo.
Sia il deadlock che la fame sono concetti correlati che impediscono una corretta pianificazione del sistema in cui i processi sono bloccati dall'accesso alle risorse. Deadlock, come suggerisce il nome, fa riferimento a una condizione in cui un insieme di thread o processi sono bloccati perché ogni processo è in attesa di acquisire una risorsa trattenuta da un altro processo, determinando quindi una situazione di deadlock in cui i programmi cessano di funzionare. La fame, d'altra parte, è innescata da un deadlock che causa il blocco di un processo perché a un processo a bassa priorità viene negato l'accesso a una risorsa assegnata a un processo ad alta priorità.
Un deadlock si riferisce a una condizione specifica che si verifica quando un thread o un processo entra in un periodo di attesa perché la risorsa di sistema richiesta è trattenuta da un altro processo, che a sua volta attende un altro processo per rilasciare la risorsa creando quindi un deadlock. Ciò è causato da uno scarso utilizzo delle risorse. La fame è una condizione di rinvio indefinita in cui a un processo a bassa priorità viene negato l'accesso alle risorse necessarie perché le risorse vengono assegnate a un altro processo ad alta priorità. È un problema di gestione delle risorse che costringe il sistema ad allocare risorse solo a processi ad alta priorità.
Deadlock è l'ultima forma di inedia causata quando le seguenti quattro condizioni si verificano in concomitanza: esclusione reciproca, senza prelazione, attesa e attesa e attesa circolare. Una condizione di deadlock si verifica solo nei sistemi in cui tutte e quattro le condizioni sono valide. La fame avviene in base a condizioni diverse, ad esempio quando non ci sono abbastanza risorse per andare in giro e la priorità dei processi inizia ad abbassarsi o quando i processi iniziano a consegnare risorse ad altri processi senza controllo. Se un processo a bassa priorità richiede una risorsa riservata ai processi con priorità più alta, il processo muoia per sempre. La carestia si verifica anche quando le risorse vengono allocate arbitrariamente, causando l'attesa dei processi per un periodo di tempo più lungo.
La fame può essere prevenuta usando un appropriato algoritmo di schedulazione con coda di priorità che di fatto utilizza anche la tecnica dell'invecchiamento - una tecnica di schedulazione che aggiunge il fattore di invecchiamento alla priorità di ogni richiesta, il che significa che aumenta il livello di priorità dei processi a bassa priorità che erano in attesa per molto tempo. Inoltre, fornire più risorse ai programmi dovrebbe evitare la continua congestione di risorse. Per evitare che il sistema entri in una situazione di stallo, ai processi deve essere negato l'accesso a una o più risorse mentre contemporaneamente si attende l'altro e solo a un processo dovrebbe essere consentito di accedere a una risorsa alla volta.
Sia il deadlock che la fame sono concetti correlati nei sistemi operativi multiprocesso o nei sistemi distribuiti che causano uno o più thread o processi bloccati nell'attesa delle risorse di cui hanno bisogno. Deadlock è una situazione che si verifica quando uno o più processi richiedono l'accesso alla stessa risorsa causando il blocco del processo, mentre la fame è causata da un deadlock che spinge il processo verso uno stato posticipato indefinito perché ai processi viene negato l'accesso a una risorsa detenuta da un processo ad alta priorità e bisogna aspettare per sempre.