Indice 5 SCHEDULATORI DI PROCESSO...1 5.1 Schedulatore Round Robin...1 5.2 Schedulatore a priorità...2 5.2.1 Schedulatore a code multiple...3 5.3 Schedulatore Shortest Job First...3 i
5 SCHEDULATORI DI PROCESSO Nei sistemi operativi multi tasking e multi utente occorre ottimizzare l'uso della CPU per i molti processi che sono gestiti dal Sistema Operativo, come i processi del kernel e quelli utente. La parte del sistema operativo che presiede alla decisione di quale processo debba ottenere la CPU prende il nome di schedulatore e il criterio mediante il quale esso opera prende il nome di algoritmo di schedulazione. Gli algoritmi di schedulazione vengono implementati in base ad opportuni criteri quali: 1. Equità: assicurare che ogni processo possa utilizzare prima o poi la CPU. 2. Efficienza: mantenere utilizzata la CPU il 100 % del tempo. 3. Rapidità: minimizzare il tempo di risposta per gli utenti interattivi. 4. Attesa: minimizzare il tempo di attesa per i processi batch. 5. Prestazione: massimizzare il numero di lavori processati nel tempo. Gli schedulatori sono suddivisi in due categorie in base alla strategia adottata per la gestione dei processi che sono logicamente eseguibili (processi nello stato di pronto, possiedono tutte le risorse meno la CPU). 1. Schedulatori a prelazione (preemptive scheduler): basati sul principio che se un processo non dispone di risorse di I/O esso viene sospeso e quindi lascia la CPU a disposizione di altri processi. 2. Schedulatori senza prelazione (non preemptive scheduler) : basati sul principio di esecuzione di un processo fino al suo completamento. Prendono anche il nome di schedulatori di lavoro, tipicamente utilizzati nella gestione di processi batch (a lotti). 5.1 Schedulatore Round Robin Il più semplice metodo di schedulazione è chiamato convenzionalmente Round Robin (carosello), è basato sul criterio che tutti i processi siano paritari. Ad ogni processo viene assegnato un quanto di tempo Tq (quantum) durante il quale esso detiene in modo esclusivo la CPU, alla fine di tale intervallo la CPU viene prelazionata (assegnata) a un altro processo. Il processo può utilizzare solo una parte di tale intervallo nel caso in cui esso termina oppure quando viene bloccato su una richiesta di utilizzo di risorse di I/O. Tra l'istante in cui un processo rilascia la CPU e l'istante in cui un'altro la preleva intercorre un tempo, chiamato tempo di commutazione di contesto Tc, durante il quale avviene il salvataggio dello stato del processo corrente e il ripristino dello stato del processo entrante. Il rapporto tra il tempo di commutazione di contesto e il quanto è un indice di prestazione dello schedulatore. La struttura dati con la quale viene realizzato l'algoritmo di schedulazione è una coda (Fig. 1) che contiene gli identificatori di processo in cui il processo entrante viene estratto sempre dalla testa della coda e i processi che rilasciano la CPU per esaurimento del quanto o per risveglio dallo stato di bloccato vengono inseriti in coda. Fig. 5.1 Schedulatore Round Robin. (a) Lista dei processi nello stato di pronto. (b) Lista dei processi dopo che il processo 2 rilascia la CPU. 1
Il parametro che misura l'efficienza dello schedulatore è dato dal rapporto tra il tempo di commutazione di contesto Tc e il quanto Tq in percentuale : Mentre per quanto riguarda la rapidità di risposta essa viene misurata dal tempo medio di attesa per un processo nella coda (ipotizzando che il tempo di commutazione di contesto sia trascurabile rispetto al quanto). Il tempo medio di attesa Ta viene calcolato in base al numero di processi presenti che si suppone siano N. Ogni processo attende quelli che lo precedono per cui : ricordando che la somma dei primi N 1 numeri interi è data dalla seguente formula : si ottiene infine : quindi più piccolo è il valore del tempo medio di attesa Ta più rapido è lo schedulatore. 5.2 Schedulatore a priorità Diversamente dallo schedulatore Round Robin in cui tutti i processi sono trattati nello stesso modo, gli schedulatori a priorità assegnano ad ogni processo una priorità di esecuzione in modo che processi critici (es. processi del kernel) possano avanzare più rapidamente di altri (es. processi utente). La priorità può essere assegnata dallo schedulatore secondo due modalità : 1. Priorità statica: assegnata ai processi in base ai privilegi dell'utente al momento della creazione della sua login (logical input) oppure in base alla natura real time del processo. 2. Priorità dinamica: assegnata ai processi dal sistema operativo in base a criteri di ottimizzazione della rapidità di esecuzione. La priorità dinamica viene usata per prevenire il monopolio della CPU da parte dei processi ad alta priorità che impedirebbero l'avanzamento di quelli a bassa. La priorità di tutti i processi viene modificata dinamicamente dallo schedulatore dopo che ha utilizzato la CPU; se Tq è il tempo massimo di utilizzo e Te il tempo effettivamente utilizzato che può essere inferiore a Tq qualora il processo venga bloccato per la richiesta di risorse di I/O : si ha sempre che: 2
il rapporto f = Te /Tq detto frazione di utilizzo della CPU viene presa come parametro per il calcolo della successiva priorità secondo la formula: 5.2.1 per cui i processi che utilizzano interamente la CPU durante il quanto di tempo Tq avranno priorità P = 1 mentre quelli che ne utilizzano meno (bloccati su risorse di I/O) avranno una priorità maggiore di 1. 5.2.1 Schedulatore a code multiple L'implementazione dello schedulatore a priorità prevede l'uso di code multiple in cui accodare processi che hanno la stessa priorità, come riportato in figura 5.2, esso funziona secondo il seguente regole: A. Un processo, quando viene creato gli viene assegnata una priorità P = 1 ed inserito nella coda corrispondente (quella a più bassa priorità). B. Quando avviene la commutazione di contesto (per aver esaurito il quanto o per bloccaggio su una risorsa di I/O), al processo corrente gli viene ricalcolata la priorità secondo la formula 5.2.1 e reinserito nella coda identificata dal nuovo livello di priorità (immediatamente quando ha esaurito il quanto o successivamente quando esso viene risvegliato dallo stato di bloccato). C. Il processo entrante viene prelevato dalla coda a priorità più alta, nell'ipotesi che essa non sia vuota. Fig. 5.2 Schedulatore a priorità dinamica a code multiple. 5.3 Schedulatore Shortest Job First Lo schedulatore shortest shob to first (il più breve per primo) è utilizzato nel caso che si conosca in anticipo il tempo di esecuzione dei processi e fa parte degli schedulatori senza prelazione (non preemptive scheduler) ed è basato sul criterio di ottimizzazione del tempo medio di attesa Ta. Ogni processo da eseguire viene inserito in una coda e se la coda viene ordinata in base ai tempi di esecuzione, noti a priori, in ordine crescente i tempo medio di attesa ha il valore minimo. Nell'esempio di fig. 5.3 sono stati inseriti in una coda non ordinata 5 processi la cui durata è 4,2,7,21,6 minuti; il tempo medio viene ottenuto calcolando i tempo di attesa di ogni processo rispetto a quelli che lo precedono e calcolata la media (caso A), si può osservare che nel caso la coda venga ordinata in ordine crescente (caso B) il tempo medio è sempre inferiore. 3
Fig.5.3 Calcolo dei tempi medi di attesa. A) coda non ordinata. B) coda ordinata in ordine crescente. 4