Starvation
In informatica, per starvation (termine inglese che tradotto letteralmente significa inedia) si intende l'impossibilità perpetua, da parte di un processo pronto all'esecuzione, di ottenere le risorse sia hardware sia software di cui necessita per essere eseguito.
Descrizione
[modifica | modifica wikitesto]Un esempio tipico è il non riuscire ad ottenere il controllo della CPU da parte di processi con priorità molto bassa, qualora vengano usati algoritmi di scheduling a priorità. Può capitare, infatti, che venga continuamente sottomesso al sistema un processo con priorità più alta. Un aneddoto relativo a questo problema riguarda un processo a bassa priorità scoperto quando fu necessario fermare il sistema sull'IBM 7094 al MIT nel 1973: il processo era stato sottomesso nel 1967 e fino ad allora non era mai stato eseguito.[1]
Per evitare questi problemi si possono utilizzare, oltre ad algoritmi di scheduling diversi, come RR, le cosiddette tecniche di invecchiamento (aging), ovvero si provvede ad aumentare progressivamente, ad intervalli regolari, la priorità dei processi qualora questi non siano riusciti ad ottenere le risorse richieste. Questo fa sì che anche un processo con priorità molto bassa possa potenzialmente acquisire priorità maggiore, riuscendo così ad ottenere, in un tempo massimo predefinito, quanto di cui necessita.
Altri usi del termine starvation sono in relazione alle risorse di accesso alla memoria primaria o CPU: si dice che un programma è bandwidth-starved quando la sua esecuzione è rallentata da un'insufficiente velocità di accesso alla memoria, o CPU-starved quando il processore è troppo lento per eseguire efficacemente il codice.
Note
[modifica | modifica wikitesto]- ^ Operating System Concepts, by Abraham Silberschatz, Peter B. Galvin, Greg Gagne, Wiley (9th Ed., 2012), pg 271.