prof. Nunzio Brugaletta |
atapSO |
EnneBi –
Computer Science
Avanti – Indietro – Inizio
Durante la sua esistenza un processo si può trovare in un
determinato stato corrispondente ad una configurazione della sua
immagine. Le transizioni di stato, il passaggio del processo da uno
stato ad un altro, possono avvenire per effetto di chiamate al
sistema operativo o in seguito al verificarsi di determinati eventi.
IDL (Image Definition & Loading). È lo stato iniziale in cui si trova un processo quando il sistema operativo prepara la sua immagine. Quando il processo è generato ed è pronto ad iniziare la sua esecuzione, viene posto allo stato READY. In questo stato non ci sono ancora risorse impegnate.
Ready. Si trovano in questo stato i processi che sono in attesa di poter avere assegnata la risorsa CPU. L'ordine con cui i processi sono accodati dipende dalle politiche di scheduling. Quando il processo corrente, quello a cui è assegnata la CPU, rilascia la risorsa, il processo che si trova per primo nella coda dei Ready, diventa il processo corrente e passa allo stato di Running. Può esserci l'esigenza di liberare spazio in memoria e, in questi casi, il processo può essere copiato in memoria di massa, passare cioè allo stato di Swapped, anche se questa probabilità è abbastanza remota e limitata a quando il sistema non riesce a liberare la memoria che serve dopo aver copiato su disco i processi bloccati.
Running. In questo stato il processo utilizza la risorsa CPU. In un sistema monoprocessore ci può essere un solo processo in questo stato. Un processo in questo stato può ritornare in stato Ready quando termina il time-slice a sua disposizione e, in questo caso, il kernel porta allo stato di Ready il processo corrente e assegna la CPU al primo processo della coda Ready, che diventa ora il processo corrente. Un processo può anche decidere di sospendersi in attesa di qualche evento esterno (tipicamente operazioni di I/O) e, in questo caso, passa allo stato di Sleeping. Se invece, per mezzo di una chiamata al sistema di tipo exit(), il processo richiede la propria terminazione, viene posto allo stato di Zombie, in attesa di essere eliminato.
Sleeping. Come già accennato prima, si trovano in questo stato i processi in attesa di un evento esterno. Questi processi sono quelli preferiti dal kernel per essere ricopiati in memoria di massa e liberare così memoria necessaria, infatti, finché l'evento richiesto non si verifica, il processo non può continuare la propria evoluzione ed è quindi inutile che occupi risorse che potrebbero essere utili a qualche altro processo che può evolversi. Quando l'evento esterno si verifica, il processo viene risvegliato e viene rimesso in coda allo stato di Ready.
Swapped. Si trovano in questo stato i processi la cui immagine è stata copiata nella memoria di massa, nella swap area. Il sistema operativo può prendere in considerazione i processi in questo stato e riportarli in stato di Ready anche decidendo, per trovare lo spazio necessario, di portare in stato di Swapped qualche altro processo. Quando un processo si trova in questo stato, l'unica parte della sua immagine che è presente in memoria centrale è la process table area contenendo, questa, le informazioni necessarie alla gestione del processo stesso.
Zombie. Sono i processi la cui esecuzione è terminata e che sono in attesa di essere eliminati in maniera definitiva. La loro immagine è ridotta solo alla table area e si aspetta che il processo che li ha generati raccolga il loro valore di ritorno, una specie di rapporto sull'andamento dell'esecuzione. Ricevuto il valore di ritorno, il processo padre provvede a eliminare in maniera definitiva il processo Zombie.
http://ennebi.solira.org |
ennebi@solira.org |