I processi

Unix è: un sistema operativo multitasking e multiutente ; può pertanto accettare richieste da più terminali ed eseguire contemporaneamente piú processi sfruttando il parallelismo hardware della CPU e dei canali di I/O dell' elaboratore.
La coesistenza di più processi e più utenti richiede al kernel il ricorso a tecniche di ripartizione e protezione delle risorse condivise;

Per la gestione "contemporanea dei processi" il kernel utilizza tecniche di paging e di swapping ( ripartizione della memoria ) e di scheduling ( ripartizione della CPU ).
La memoria fisica è una risorsa da distribuire : può accadere infatti che non tutti i processi in esecuzione siano fisicamente presenti in memoria ad ogni istante, dal momento che la somma delle loro dimensioni sarebbe superiore alla quantitą di memoria disponibile.

Il kernel utilizza in questo caso due tecniche: la paginazione e lo swapping. Chiaramente le operazioni di "swap out" (da memoria centrale a disco) e "swap in" (da disco a memoria centrale) comportano un ritardo nell' esecuzione globale dei processi.
Si parla di processo per indicare un qualsiasi comando che sia in esecuzione.
Ogni processo per accedere alla CPU ed essere eseguito, deve prima essere caricato in memoria RAM; nel momento in cui abbia avuto accesso alla RAM, vi rimarrą fino a quando: Quando il processo in esecuzione richiede alla CPU un' operazione di I/O, viene messo in coda di attesa e soltanto dopo l' arrivo della risposta potrą riaccedere all' utilizzo della RAM, dopo un periodo di tempo che dipende dall' indice di prioritą che gli è stato assegnato.
Nel caso in cui la memoria sia satura, vengono temporaneamente scaricati quei processi in coda che hanno priorità più bassa, ed in particolare i threads ( sottoprocessi ) inutilizzati da più tempo.
Quando il processo in esecuzione, pur non avendo attivato chiamate di I/O, esaurisce il proprio tempo di esposizione alla CPU, subisce lo stesso trattamento.
Verrą pertanto a crearsi una coda di processi in attesa di vedere completata la propria esecuzione.

Il kernel utilizza algoritmi di scheduling per l'assegnazione della CPU. Di solito molti processi si contendono l' uso del microprocessore e il criterio di assegnazione è funzione delle priorità: il processo con maggiore priorità ottiene il controllo della CPU.

La priorità di un processo è un numero intero compreso tra zero ed un valore massimo configurato nel sistema, che può essere pensata come una media di tutte le "variabili" che influenzano l' ordine di accesso alla CPU dei processi;
queste variabili sono: Il compito di gestire l' applicazione dei criteri di scheduling ( parametri in base ai quali viene stabilita l' entrata o l' uscita di un processo nella/dalla RAM) è svolto da un processo chiamato scheduler.
Come abbiamo detto in precedenza, il processo a pił alta prioritą ottiene la CPU e ne mantiene l' uso fino a che non si sospenda in attesa di una risorsa esterna, oppure venga forzatamente interrotto (preempted) perchè è scaduto il quanto di tempo assegnatoli ed un processo di pari prioritą si è reso pronto, o perchè si sia reso pronto un processo a prioritą pił alta, ancora prima che il suo quanto di tempo scadesse.
Il compito dello scheduler è quello di riesaminare il complesso dei processi eseguibili e di assegnare il controllo della CPU al processo pronto all' esecuzione che abbia la prioritą pił alta .
Nel caso in cui tutti i processi in attesa di esecuzione abbiano la stessa prioritą lo scheduler li fa accedere al controllo della CPU a rotazione (round-robin).

GLI STATI DI UN PROCESSO

A causa delle molteplici interruzioni a cui viene sottoposto durante l' esecuzione, un processo attivo può trovarsi in uno dei seguenti stati:


Bottoni