Corso di Sistemi Operativi Scheduling dei processi a.a. 2012/2013 Francesco Fontanella
Classificazione dei processi Durante l'esecuzione di un processo: si alternano periodi di attività svolte dalla CPU (CPU burst)......e periodi di attività di I/O (I/O burst) I processi: caratterizzati da CPU burst molto lunghi si dicono CPU bound caratterizzati da I/O burst molto lunghi si dicono I/O bound CPU burst I/O burst CPU burst I/O burst load store add multiply read... attesa di I/O load store add multiply read... attesa di I/O a.a. 2012/2013 2
Classificazione alternativa dei processi Processi interattivi Interagiscono continuamente con l'utente, spendendo la maggior parte del tempo in attesa di eventi di I/O (mouse e tastiera). Quando viene ricevuto un input devono essere ripresi rapidamente (il ritardo accettabile deve essere tra 50 e 150 ms, e deve avere bassa varianza) Esempi: Shell Editor, sia testuali che grafici a.a. 2012/2013 3
Processi Batch Non interagiscono con l'utente, spesso sono eseguiti in background Non necessitano di bassi tempi di risposta. Esempi: Compilatori, Database search engines, Calcoli scientifici Processi real-time Vincoli temporali stringenti: deve essere garantito loro un tempo minimo di risposta (con minima varianza) Esempi: applicazioni video e audio, robot controllers, misure da sensori (campionamento) a.a. 2012/2013 4
Durata delle raffiche di CPU a.a. 2012/2013 5
Quando effettuare lo scheduler L'intervento dello scheduler è richiesto ad ogni context switch. Eventi che possono causare il context switch di un processo: 1. Creazione di un nuovo processo (fork): chi eseguire per primo? Padre o figlio? 2. Terminazione del processo in esecuzione (exit) 3. passaggio dallo stato running allo stato waiting (Es: operazione di I/O) 4. passaggio dallo stato running allo stato ready 5. Passaggio dallo stato waiting allo stato ready (I/O interrupt) a.a. 2012/2013 6
Tipi di scheduler Uno scheduler si dice senza diritto di prelazione (non-preemptive) o cooperativo se il processo viene eseguito finchè: Si blocca in attesa di I/O Termina Effettua una chiamata di sistema Lo scheduling della CPU è gestito direttamente dai processi (Windows 3.1, Mac OS 1,2, 7) Uno scheduler si dice preemptive se: i context switch possono avvenire in ogni condizione in questo caso è il SO a gestire il controllo della CPU tutti gli scheduler moderni a.a. 2012/2013 7
Scheduling: cooperativo vs preemptive Vantaggi dello scheduling cooperativo non richiede ulteriori meccanismi hardware come, ad esempio, timer programmabili Vantaggi dello scheduling preemptive permette di utilizzare al meglio le risorse a.a. 2012/2013 8
Categorie di algoritmi di scheduling Batch Elaborazione paghe, calcolo tariffe, calcolo scientifico Interattivo Editor, browser, ecc Real time Sistemi industriali, apparecchiature mediche, ecc. a.a. 2012/2013 9
Criteri di scelta di uno scheduler Utilizzo della CPU percentuale di tempo in cui la CPU è occupata ad eseguire processi Produttività (Throughput) numero di processi completati per unità di tempo (dipende dalla lunghezza dei processi) Tempo di completamento (turnaround) tempo che intercorre dalla sottomissione di un processo alla sua terminazione a.a. 2012/2013 10
Criteri di scelta di uno scheduler Tempo di attesa il tempo trascorso da un processo nella coda ready Tempo di risposta tempo che intercorre fra la sottomissione di un processo e il tempo di prima risposta particolarmente significativo nei programmi interattivi a.a. 2012/2013 11
Scheduling Algoritmi: First Come, First Served Shortest-Job First Shortest-Next-CPU-Burst First Shortest-Remaining-Time-First Round-Robin a.a. 2012/2013 12
Rappresentazione degli schedule Diagramma di Gantt per rappresentare uno schedule si usano i diagrammi di Gantt: P 1 P 2 P 3 t 1 t 2 t 3 in questo esempio, la risorsa (es. CPU) viene utilizzata dal processo P 1 dal tempo 0 a t 1, viene quindi assegnata a P 2 fino al tempo t 2 e quindi a P 3 fino al tempo t 3 a.a. 2012/2013 13
First Come, First Served (FCFS) Algoritmo il processo che arriva per primo, viene servito per primo È senza prelazione Implementazione semplice, tramite una coda (politica FIFO) Problemi elevati tempi medi di attesa e di turnaround processi CPU bound ritardano i processi I/O bound a.a. 2012/2013 14
First Come, First Served (FCFS) Esempio: ordine di arrivo: P 1, P 2, P 3 lunghezza dei CPU-burst in ms: 32, 2, 2 Tempo medio di turnaround (32+34+36)/3 = 34 ms Tempo medio di attesa: (0+32+34)/3 = 22 ms P 1 P 2 P 3 0 32 34 36 a.a. 2012/2013 15
First Come, First Served (FCFS) Supponiamo di avere un processo CPU bound un certo numero di processi I/O bound i processi I/O bound si "mettono in coda" dietro al processo CPU bound, e in alcuni casi la ready queue si puo svuotare: effetto convoglio (Convoy effect) IO IO IO IRQ IRQ IRQ IO IO P 1 P 2 P 3 ready queue vuota P 1 P 2 a.a. 2012/2013 16
Shortest Job First (SJF) Algoritmo (Shortest Next CPU Burst First) la CPU viene assegnata al processo ready che ha la minima durata del CPU burst successivo politica senza preemption Esempio Tempo medio di turnaround: (0+2+4+36)/3 = 7 ms Tempo medio di attesa: (0+2+4)/3 = 2 ms P 2 P 3 P 1 0 2 4 36 a.a. 2012/2013 17
Shortest Job First (SJF) L'algoritmo SJF è ottimale rispetto al tempo di attesa. Non è implementabile in pratica! è realizzabile in maniera approssimata Negli scheduler long-term possiamo chiedere a chi sottomette un job di predire la durata del job Negli scheduler short-term Non si conosce la lunghezza del prossimo CPU burst... ma sono note le lunghezze di tutti quelli precedenti. a.a. 2012/2013 18
Shortest Job First (SJF) Calcolo approssimato Si basa su media esponenziale dei CPU burst precedenti sia t n il tempo dell'n-esimo CPU burst e т n la corrispondente previsione; т n+1 può essere calcolato come segue: т n+1 = αt n + (1-α)т n Media esponenziale svolgendo la formula di ricorrenza, si ottiene т n+1 = Σ j=0..n (1-α) j t n-j + (1-α) n+1 т o da cui il nome media esponenziale a.a. 2012/2013 19
Shortest Job First (SJF) Spiegazione t n rappresenta la storia recente т n rappresenta la storia passata α rappresenta il peso relativo di storia passata e recente cosa succede con α = 0, 1 oppure 0.5? Nota importante: SJF può essere soggetto a starvation! a.a. 2012/2013 20
Shortest Job First (SJF) Shortest Job First "approssimato" esiste in due versioni: non preemptive il processo corrente esegue fino al completamento del suo CPU burst preemptive il processo corrente può essere messo nella coda ready, se arriva un processo con un CPU burst più breve di quanto rimane da eseguire al processo corrente "Shortest-Remaining-Time First" a.a. 2012/2013 21
Scheduling a priorità Descrizione ogni processo è associato ad una specifica priorità lo scheduler sceglie il processo pronto con priorità più alta Le priorità possono essere: definite dal sistema operativo utilizzando una o più quantità misurabili per calcolare la priorità di un processo SJF è un esempio di scheduling basato su priorità definite esternamente le priorità vengono impostate dagli utenti a.a. 2012/2013 22
Scheduling a priorità Priorità statica la priorità non cambia durante la vita di un processo problema: processi a bassa priorità possono essere posti in starvation da processi ad alta priorità Leggenda metropolitana: IBM 7094 al MIT (1973) Priorità dinamica la priorità può variare durante la vita di un processo è possibile utilizzare metodologie di priorità dinamica per evitare starvation a.a. 2012/2013 23
Scheduling a priorità Priorità basata su aging si incrementa gradualmente la priorità dei processi in attesa. nessun processo rimarrà in attesa per un tempo indefinito perché prima o poi raggiungerà la priorità massima a.a. 2012/2013 24
Scheduling Round-Robin Ogni processo è in esecuzione per un quanto di tempo (time slice) Al termine del quanto il processo è sottoposto a prelazione e aggiunto alla coda dei processi pronti Può anche succedere che il processo richieda un'operazione di I/O prima che il quanto sia terminato. Se ci sono n processi pronti è il quanto dura q, il tempo massimo di attesa è (n-1)q a.a. 2012/2013 25
Scheduling Round robin: prestazioni 5La durata del quanto di tempo è un parametro critico del sistema. Se il quanto di tempo è breve: Overhead elevato a causa dei cambi di contesto troppo frequenti se il quanto è lungo: Tende a diventare FIFO Al crescere di N ci sono lunghi periodi di inattività per ogni processo Soluzione... empirica! a.a. 2012/2013 26
Durata del quanto e cambio di contesto a.a. 2012/2013 27
Durata del quanto e cambio di contesto a.a. 2012/2013 28
Scheduling Round-Robin Process Burst Time P 1 24 P 2 3 P 3 3 Diagramma di Gantt P 1 P 2 P 3 P 1 P 1 P 1 P 1 P 1 0 4 7 10 14 18 22 26 30 Mediamente il tempo di completamento è superiore al SJF, ma il tempo di risposta è migliore a.a. 2012/2013 29
Scheduling a classi di priorità I processi possono essere distinti in base alle loro necessità di scheduling. Esempio foreground e background La coda dei processi pronti viene suddivisa in più code, ogni coda ha il suo algoritmo: Foreground: RR Background: FCFS uno scheduler a classi di priorità seleziona il processo da eseguire fra quelli pronti della classe a priorità massima che contiene processi a.a. 2012/2013 30
Scheduling a classi di priorità È necessario uno sceduling tra le code. Ci sono diverse possibilita di scheduling: Priorità fissa: si svuotano prima le code a priorità più alta. Problema: rischio di starvation Suddivisione del tempo (time slice): si assegna ad ogni coda una percentuale di CPU che dipende dalla priorità Es: 80% alla coda foreground e 20% alla coda background a.a. 2012/2013 31
Scheduling a classi di priorità Priorità maggiore Processi di sistema Processi di interattivi Processi di editing Processi background Priorità minore NOTA Adatto quando i processi possono essere facilmente classificati in gruppi diversi a.a. 2012/2013 32
Scheduling a code multiple con retroazione a.a. 2012/2013 33
Scheduling a code multiple con retroazione È possibile spostare i processi tra le varie code È caratterizzato da diversi parametri: Numero di code; Algoritmo per ogni coda; Come muovere i processsi tra le code In quale coda inserire i processi in ingresso? a.a. 2012/2013 34
Thread Scheduling Nei sistemi molti-a-uno e molti-a-molti è la libreria a livello utente a pianificare l'esecuzione dei thread appartenenti ad un certo processo (process-contention scope, PCS). La gestione dei thread a livello kernel deve tenere conto invece di tutti i thread in esecuzione (system-contention scope, SCS) a.a. 2012/2013 35
Scheduling Multiprocessore Esistono due approcci: Multielaborazione asimmetrica, le attività di scheduling, di I/O e di sistema sono svolte su un processore dedicato. Multielaborazione simmetrica (symmetric multiprocessor, SMP), ogni processore provvede al proprio scheduling (con una coda comune oppure una coda per ogni processore) a.a. 2012/2013 36
Predilezione per il processore Nella progettazione dello scheduling di sistemi multiprocessore bisogna considerare il ruolo della memoria cache Si tende a eseguire un processo sempre sullo stesso processore (predilezione del processore, processor affinity) Si tende a eseguire un processo sempre sullo stesso processore (predilezione del processore, processor affinity). La predilezione può essere: Debole: la predilezione non è garantita (Solaris). Forte: predilezione garantita (Linux, Solaris) a.a. 2012/2013 37
Scheduling su NUMA a.a. 2012/2013 38
Bilanciamento del carico Necessario nei sistemi che hanno una coda per ogni processore (praticamente tutti i sistemi moderni) Due approcci: Migrazione guidata (push migration): processo dedicato periodicamente controlla e gestisce il bilanciamento. Migrazione spontanea: un processore inattivo esegue un processo nella coda dei processi pronti dell'altro processore Linux: Ogni 200 ms un processo controlla il bilanciamento Ogni volta che si svuota una coda. a.a. 2012/2013 39
Scheduling multicore Sono ormai comuni le architetture con CPU multicore Sistemi multiprocessore in cui sullo stesso chip sono presenti più CPU che possono o meno condividere la memoria cache, e vedono la stessa memoria principale. Permettono un notevole aumento delle prestazioni, posto che il SO sia in grado di sfruttare a pieno ciascun core. I moderni SO usano tutti SMP: c'è uno scheduler per ogni processore a.a. 2012/2013 40
Situazioni di Stallo Possibili cause di stallo: Miss cache branch misprediction data dependency a.a. 2012/2013 41
HyperThreading (INTEL) Vengono duplicate solo le parti del processore relative ai registri (Architectural state), ma non le risorse di calcolo. È un hyperthreading fine grained a.a. 2012/2013 42
Algoritmi di Scheduling Di seguito analizzeremo 3 diversi algoritmi di scheduling: Solaris Windows Linux a.a. 2012/2013 43
Algoritmi di Scheduling: Solaris Coda multipla con retroazione Ogni classe può adottare un diverso algoritmo di scheduling Più processi con la stessa con la stessa priorità: Round-Robin (RR) In Solaris un processo viene eseguito finchè: Si blocca Esaurisce il quanto di tempo assegnato Soggetto a prelazione da un processo a priorità più elevata a.a. 2012/2013 44
Algoritmi di Scheduling: Solaris In Solaris un processo viene eseguito finchè: Si blocca Esaurisce il quanto di tempo assegnato Soggetto a prelazione da un processo a priorità più elevata a.a. 2012/2013 45
Algoritmi di Scheduling: Solaris Time share (TS): è la classe di default e ha priorità dinamiche. Interactive (IA): priorità dinamiche, versione migliorata della precedente, usata per windows manager. Fixed-priority (FX): thread con priorità fissata. fair-share scheduler (FSS): la suddivisione è basata su quote prestabilite invece che su priorità. System (SYS): kernel threads. Riamangono in esecuzione finchè non terminano o si bloccano. Real Time (RT): priorità fissata con quanto di tempo fissato. a.a. 2012/2013 46
Tabella delle priorità a.a. 2012/2013 47
Dispatcher table Per classi TS e IA le priorità sono calcolate da questa tabella: a.a. 2012/2013 48
Dispatcher table Quanto esaurito: nuova priorità assegnata al processo se ha esaurito tutto il quanto di tempo assegnatogli. Nota: la nuova priorità è più bassa (riceverà un quanto di tempo più grande) Quanto non esaurito: nuova priorità di un processo che si è fermato prima di consumare tutto il suo quanto di tempo. Nota: la nuova priorità è più alta, (riceverà un quanto di tempo più breve) a.a. 2012/2013 49
Algoritmi di Scheduling: Windows Basato su priorità con retroazione e prelazione. Un processo utente esegue fin quando : a) termina; b) va in wait, c) ha esaurito il quanto di tempo d) è soggetto a prelazione. Schema a 32 livelli di priorità: i processi real-time hanno una priorità da 16 a 31, tutti gli altri da 1 a 15 (0 è un valore riservato). Quando un processo nasce gli viene assegnata la priorità 1. a.a. 2012/2013 50
Algoritmi di Scheduling: Windows Si assegna la CPU al processo con priorità più alta. Più processi con la stessa priorità: si usa RR. Se il processo running va in wait prima di esaurire il suo quanto, la sua priorità viene alzata (max: 15) L entità dell incremento dipende dal tipo di evento che il processo attende: se è un dato dalla tastiera (processo interattivo) l'incremento è maggiore Se è un dato dal disco, l incremento è minore. a.a. 2012/2013 51
Strategia per i processi interattivi Se il processo che ha la CPU esaurisce il proprio quanto, la sua priorità viene abbassata (mai < 1). Sono favoriti i processi che interattivi (mouse e tastiera) che richiedono tempi di risposta molto bassi. Windows XP distingue tra i processi in background e quello in foreground (finestra attiva). Quando un processo passa in foreground il suo quanto viene moltiplicato per 3, a.a. 2012/2013 52
Linux scheduling: breve storia I primi scheduler Linux erano minimali: Linux 1.2, semplice e veloce: Coda circolare con round robin Molto efficiente nell'aggiungere o rimuovere processi Linux 2.2, introduce le classi di priorità: real-time scheduling Supporto per Symmetric Multiprocessing (SMP) a.a. 2012/2013 53
Linux scheduling Tre classi di scheduling Real-time FIFO (SCHED_FIFO) priorità più alta; preemptable solo da thread a priorità più alta Real-time Round-Robin (SCHED_RR) priorità media; preemptable da thread a priorità più alta e dallo scadere del quanto di tempo Timesharing (SCHED_OTHER) priorità più bassa; processi normali a.a. 2012/2013 54
Linux scheduling Priorità dinamica vs priorità statica i processi real-time hanno priorità statica i processi timesharing hanno priorità dinamica Full-preemption: lo scheduler entra in azione quando il time quantum riservato ad un processo scade oppure un nuovo processo entra nella coda dei processi pronti e la sua priorità è più alta della priorità dell'attuale processo in esecuzione a.a. 2012/2013 55
Linux scheduling 2.4 Il tempo della CPU è suddiviso in epoche (epochs): In ogni epoca All'inizio: viene calcolato un quanto di tempo diverso per ogni processo quantità massima di CPU utilizzabile dal processo nell'epoca Durante: un processo può ricevere la CPU diverse volte durante un'epoca, fino a quando il suo quanto non è concluso Conclusione: quando tutti i processi runnable hanno utilizzato completamente il loro quanto inizia una nuova epoca a.a. 2012/2013 56
Linux scheduling 2.4: problemi non è perfettamente scalabile O(n) con la crescita del numero dei processi, è necessario ricalcolare le priorità dinamiche di tutti i processi per questo motivo, questo viene fatto per "epoche", non ad ogni context switch un gran numero di processi runnable può rallentare il tempo di risposta il quanto predefinito è troppo lungo per carichi elevati il "boosting" dei processi I/O bound non è ottimale alcuni processi I/O bound non sono interattivi (Es. database) supporto debole per i processi real-time a.a. 2012/2013 57
Linux Scheduling 2.6 Complessità O(1) Quanto di tempo maggiore ai processi a maggiore priorità Una coda separata per ogni processore ( o core) Bilanciamento periodico delle code Processor affinity: Il PCB contiene una bitmask delle CPU utilizzabili a.a. 2012/2013 58
Linux Scheduling 2.6 I processi vengono raggruppati in due code separate: coda attiva: i processi che sono stati soggetti prelazione prima di terminare il quanto loro assegnato; coda scaduta: i processi che hanno esaurito il proprio quanto di tempo. a.a. 2012/2013 59
Linux Scheduling 2.6 Una bitmap indica quali code hanno almeno un processo Come trovare il processo 140 code 5 integer Al più 5 confronti per trovare il primo non nullo Ci sono istruzioni hardware che restituiscono il primo bit non nullo Complessità COSTANTE: dipende solo dal numero di priorità! a.a. 2012/2013 60
Linux Scheduling 2.6 Si sceglie il processo a priorità più alta nella coda attiva e gli assegna la CPU per un tempo pari a: un intero quanto di tempo (dipende dalla priorità) se il processo aveva consumato il precedente quanto assegnatogli la porzione di quanto di tempo non ancora utilizzata dal processo quando era andato in wait la volta precedente Quando un processo ha esaurito il proprio quanto di tempo, viene spostato nella coda scaduta. a.a. 2012/2013 61
Linux Scheduling 2.6 Inizialmente, la coda scaduta è vuota: nessun processo è ancora riuscito ad utilizzare completamente il quanto tempo assegnatogli. Se la coda attiva è vuota: tutti i processi hanno ricevuto ed esaurito completamente un quanto di tempo (è una forma di Round Robin) A questo punto le due code si cambiano di ruolo: quella scaduta diviene la coda attiva, e viceversa, Lo scheduler ricomincia assegnando un quanto di tempo al processo a priorità più alta nella coda attiva. a.a. 2012/2013 62
Scheduling dei processi normali NOTA SP è la priorità statica a.a. 2012/2013 63
Valori tipici di priorità a.a. 2012/2013 64
Processi normali: Priorità dinamica La priorità dinamica è calcolata considerando due fattori: Priorità statica Average sleep time (AST): tempo medio trascorso in attesa Il valore AST: Aumenta fino ad un massimo se processo è in attesa Viene decrementato ad ogni tick quando è in esecuzione Ad ogni processo viene assegnato un bonus (tra 0 e 10) che misura appunto l'average sleep time 5 è un valore neutrale 10 aumenta la priorità di 5 0 diminuisce la priorità di 5 DP = max(100, min(sp- bonus+5, 139)) a.a. 2012/2013 65
Gestione del tempo Allo scadere del quanto di un processo Se non è interattivo viene messo nella lista dei processi scaduti Se è interattivo viene messo alla fine della sua attuale coda di priorità (se la coda non contiene altri processi allora riavrà la CPU subito) NOTA: più resto in esecuzione più si abbassa AST a.a. 2012/2013 66
Code di priorità: strutture dati struct runqueue { struct prioarray *active; struct prioarray *expired; struct prioarray arrays[2]; }; struct prioarray { int nr_active; /* # Runnable */ unsigned long bitmap[5]; struct list_head queue[140]; }; a.a. 2012/2013 67
Array swapping struct prioarray *array = rq >active; if (array >nr_active == 0) { rq >active = rq >expired; rq >expired = array; } a.a. 2012/2013 68
Alcune considerazioni Perchè si usano due arrays: Evita l'uso di tecniche di aging (complessità O(N)) L'aging deve essere calcolato ad ogni epoca Efficienza: Priorità, bonus e quanto vengono calcolati solo il processo è in esecuzione Nessuna necessità di loop su tutti i processi in esecuzione a.a. 2012/2013 69
Scheduling di Linux: priorità dinamica La priorità corrente (detta nice) di un processo è ricalcolata sommandogli o sottraendogli il valore 5, a seconda del suo grado di interattività. I processi interattivi hanno normalmente lunghi tempi di attesa per le operazioni di I/O (il suo nice verrà decrementato di 5) Viceversa, ai processi che hanno speso poco tempo in attesa di I/O il nice viene aumentato Vengono favoriti i processi interattivi, che nella nuova coda attiva avranno una priorità migliore (nice più basso) dei processi non interattivi. a.a. 2012/2013 70
Scheduler 2.6: problemi Lo switching rate dipende dalla priorità dei processi: Se ho due processi con priorità 120 lo switch avviene ogni 100 ms Due processi con priorità 139: lo switch avviene ogni 5 ms Il quanto di tempo assegnato ad ogni processo dipende dal valore assoluto di priorità: Due processi con priorità 120 e 119 avranno 95 e 100 ms rispettivamente Due processi con priorità 139 e 138 avranno 10 e 15 ms rispettivamente! I processi ritornati attivi possono andare nella coda di quelli attivi: È posibile creare processi che ritardano indefinitamente gli altri! a.a. 2012/2013 71
Completely Fair Scheduler A partire da fine 2007 (versione 2.6.23 ) il kernel di Linux, adotta un nuovo algoritmo di scheduling, il Completely Fair Scheduler (CFS). Il CFS cerca di distribuire equamente il tempo di CPU tra tutti i processi ready to run, Policy adottata: se ci sono N processi ready to run, allora ad ogni processo dovrebbe spettare esattamente 1/N del tempo di CPU Lo scheduler memorizza la quantità di tempo assegnata ad ogni processo Tiene conto anche dei tempi di attesa di I/O a.a. 2012/2013 72
Completely Fair Scheduler: implementazione I processi in esecuzione vengono mantenuti in un albero di ricerca binario di tipo rosso-nero (red-black tree): Tutte le operazioni (ricerca, cancellazione, inserimento) in quest'albero hanno complessità O(N); Ciascun nodo dell'albero (processo) è caratterizzato dal tempo di CPU assegnatogli a.a. 2012/2013 73
Completely Fair Scheduler: implementazione a.a. 2012/2013 74
CFS e priorità CFS non usa le priorità in maniera diretta Le priorità vengono usate per modificare il tempo di CPU effettivamente usato da un processo Le priorità sono rappresentate da un fattore di decadimento (decay factor) per il tempo di esecuzione: Questo fattore sarà tanto più basso quanto maggiore è la priorità del processo a.a. 2012/2013 75
Linux scheduling system calls nice() Change the static priority of a conventional process getpriority() Get the maximum static priority of a group of conventional processes setpriority() Set the static priority of a group of conventional processes sched_getscheduler() Get the scheduling policy of a process a.a. 2012/2013 76
sched_setscheduler() Set the scheduling policy and the real-time priority of a process sched_getparam() Get the real-time priority of a process sched_setparam() Set the real-time priority of a process sched_yield() Relinquish the processor voluntarily without blocking sched_get_ priority_min() Get the minimum real-time priority value for a policy a.a. 2012/2013 77
sched_get_ priority_max() Get the maximum real-time priority value for a policy sched_rr_get_interal() Get the time quantum value for the Round Robin policy sched_setaffinity() Set the CPU affinity mask of a process sched_getaffinity() Get the CPU affinity mask of a process NOTA Per ulteriori informazioni potete utulizzare il comando man: $ man function_name a.a. 2012/2013 78
Scheduling: Esempio I cinque processi A,B,C,D,E si presentano in quest'ordine. Le loro richieste di CPU sono: A: 10, B: 2, C: 8, D: 1, E: 3 Calcolare il tempo di risposta di ciascun processo, e il tempo medio di risposta con i seguenti algoritmi di scheduling: a) FIFO b) Shortest Job First c) Round Robin con quantum q=2 d) Round Robin con quantum q=5 e) Priorità, essendo le priorità (A: 3, B: 5, C: 1, D: 2, E: 4) a.a. 2012/2013 79
FIFO Richieste di CPU: A: 10, B: 2, C: 8, D: 1, E: 3 Tempi di risposta T A = 0 T B = T A + 10 = 10 T C = T B + 2 = 12 T D = T C + 8 = 20 T E = T D + 1 = 21 Tempo minimo = T A = 0 Tempo medio di risposta T m = (T A +T B +T C +T D +T E )/5 T m = (0+10+12 +20+21)/5 T m = 63/5 = 12.6 Tempo massimo = T A = 21 Diagramma di Gantt a.a. 2012/2013 80
Shortest Job First Richieste di CPU: A: 10, B: 2, C: 8, D: 1, E: 3 Ordine di esecuzione: D, B, E, C, A Tempi di risposta T D = 0 T B = T D + 1 = 1 T E = T B + 2 = 3 T C = T E + 3 = 6 T A = T C + 8 = 14 Tempo medio di risposta T m = (T A +T B +T C +T D +T E )/5 T m = (0+10+12 +20+21)/5 T m = 63/5 = 12.6 Diagramma di Gantt a.a. 2012/2013 81
Round Robin (q=2) Richieste di CPU: A: 10, B: 2, C: 8, D: 1, E: 3 Tempi di risposta T A = 0 T B = T A + 2 = 2 T C = T B + 2 = 4 T D = T C + 2 = 6 T E = T D + 1 = 7 Tempo medio di risposta T m = (T A +T B +T C +T D +T E ) / 5 T m = (0 + 2 + 4 + 6 + 7) / 5 T m = 19/5 = 3.8 Diagramma di Gantt a.a. 2012/2013 82
Round Robin (q=4) Richieste di CPU: A: 10, B: 2, C: 8, D: 1, E: 3 Tempi di risposta T A = 0 T B = T A + 4 = 4 T C = T B + 2 = 6 T D = T C + 4 = 10 T E = T D + 1 = 11 Tempo medio di risposta T m = (T A +T B +T C +T D +T E ) / 5 T m = (0 + 4 + 6 + 10 +11) / 5 T m = 31 / 5 = 6.2 Diagramma di Gantt a.a. 2012/2013 83
Priorità Richieste di CPU: A: 10, B: 2, C: 8, D: 1, E: 3 Priorità: B: 5, E: 4, A: 3, D: 3, C: 1 Tempi di risposta T B = 0 T E = T B + 2 = 2 T A = T E + 3 = 5 T D = T A + 10 = 15 T C = T D + 1 = 16 Tempo medio di risposta T m = (T B +T E +T A +T D +T C ) / 5 T m = (0 + 2 + 5 + 15 +16) / 5 T m = 38 / 5 = 7.6 a.a. 2012/2013 84
Scheduling: Osservazioni Quello dello scheduling è un interessante caso di problema multiobbiettivo La maggior parte dei moderni SO sono multipiattaforma: Sistemi desktop Servers Sistemi embedded (possono essere real time) Supercomputers Questi sistemi presentano diversi carichi di lavoro Gli obiettivi sono diversi: Equità tra i processi Interattività Massimo throughput a.a. 2012/2013 85