Concetti fondamentali Scheduling della CU Introduzione allo scheduling Uno degli obbiettivi della multiprogrammazione è quello di massimizzare l utilizzo delle risorse e in particolare della CU er raggiungere tale obbiettivo ogni CU viene assegnata a più task (i.e., processo o thread) Lo scheduler (e il dispatcher) devono decidere a quale task assegnare la CU L obiettivo è ottimizzare le prestazioni ovvero minimizzare una opportuna funzione di costo Valori medi vs valore migliore, peggiore o varianza Concetti fondamentali La CU viene assegnata a un task Qualora Il processo si blocchi o termini, venga creato un nuovo processo, venga ricevuto un interrupt, etc. è necessario effettuare un context switching er ogni context switching Il task in running viene spostato nella coda di ready Un task nella coda di ready viene spostato allo stato di running Concetti fondamentali Ambienti diversi richiedono algoritmi di scheduling e obiettivi (funzioni di costo) diverse Classificazione degli algorimi di scheduling Senza (non preemptive) La CU non può essere sottratta a un task In alternativa, il task può rilasciare la CU volontariamente (e.g., I/O) Con (preemptive) La CU può essere sottratta al task durante la sua esecuzione In alternativa, si possono definire dei CU burst (tempi di esecuzione massimi) Scheduling in ordine di SJF (Shortest Job First) Scheduling per brevità S (riority Scheduling) Scheduling per priorità RR (Round Robin) Scheduling circolare MQS (Multilevel Queue Scheduling) Scheduling a code multi-livello Algoritmi Obiettivi Criterio Descrizione Ottimo Utilizzo della CU (CU utilization) roduttività (Throughput) di completamento (Turnaround time) d attesa (Waiting time) di risposta (Response time) La CU dovrebbe essere più attiva possibile (0-100%) Numero di processi completati nell unità di tempo che trascorre dalla sottomissione al completamento di un totale passato da un /T nella coda ready (somma dei tempi di attesa) intercorso tra la prima richiesta e la prima risposta prodotta Massimo Massimo ag. 1 1
La CU è assegnata ai task seguendo l ordine con cui la richiedono Nessun task viene interrotto durante la sua esecuzione, ovvero la CU può solo essere rilasciata volontariamente 1 0 24 2 0 0 Ordine di ( 1, 2, ) e durata 1 (0-0) = 0 2 (24-0) = 24 (27-0) = 27 (0+24+27)/=17 1 2 0 24 27 0 Carta di Gantt 2 0 0 1 0 24 Ordine di ( 2,, 1 ) e durata 2 1 1 6 2 0 (6+0+)/= Molto meglio del precedente regi Facile da comprendere Facile da implementare Utilizza una coda FIFO Effettua la gestione dei task mediante inserzioni in coda ed estrazioni in testa Effetto convoglio Task brevi in coda di task lunghi attendono molto tempo inutilmente 0 6 La differenza tra queso e il 0 precedente scheduling mostra un effetto convoglio... A ogni task viene associata la durata della sua prossima richiesta (next CU burst) I task vengono schedulati in ordine di durata della loro prossima richiesta Esistono due schemi Senza Con SRTF (Shortest Remaining First) Se viene sottomesso un processo con burst più breve di quello in esecuzione la CU viene prelazionata 1 0 7 2 2 4 4 1 4 5 4 1 SJF senza 1 (0-0) = 0 2 (8-2) = 6 (7-4) = 4 (12-5) = 7 (0+6++7) / 4 = 4 2 4 0 7 8 12 16 ag. 2 2
1 0 7 2 2 4 4 1 4 5 4 1 2 SJF con 1 (0-0)+(11-2) = 9 2 (2-2)+(5-4) = 1 (4-4) = 0 4 (7-5) = 2 (9+1+0+2) / 4 = 2 4 1 0 2 4 5 7 11 16 regi Si può dimostrare che SJF rende minimo il tempo di attesa medio È ottimo (utilizzando il tempo di attesa come criterio) Difficoltà di applicazione derivata dall impossibilità di conoscere a priori il comportamento futuro Il tempo del burst successivo è ignoto È possibile effettuare delle stime utilizzando diversi criteri, tra i quali la media esponenziale Media esponenziale n+1 = t n + (1 - ) n Valore previsto per il successivo burst Durata n-esimo burst Stima precedente = [0, 1] controlla il peso relativo storia recente vs passata = 0 n+1 = n = 1 n+1 = t n rocedendo per sostituzione n+1 = t n +(1- ) t n-1 +.. +(1- ) j t n-j +...+ (1- ) n+1 0 Dato che sia che 1- sono minori di 1, ogni termine successivo ha un peso minore S (riority Scheduling) A ogni processo viene associata la sua priorità La priorità può esssere rappresentata mediante valori interi riorità maggiore = intero minore La CU viene allocata al processo con la priorità maggiore S = SJF con la durata del CU burst sostituita dalla priorità Anche in questo caso esistono due schemi Senza Con S (riority Scheduling) S (riority Scheduling) riorità 1 0 10 2 0 1 1 0 4 2 4 0 5 1 5 0 2 5 S senza 1 (6-0) = 6 2 (0-0) = 0 (16-0) = 16 4 (18-0) = 18 5 (1-0) = 1 (6+0+16+18+1) / 5 = 8.2 Attesa indefinita, ovvero starvation rocessi con bassa priorità attendono per sempre Soluzione Invecchiamento (aging): la priorità viene incrementata con il passare del tempo 5 1 2 4 0 1 6 16 18 19 ag.
RR (Round Robin) rogettato appositamente per sistemi time sharing Corrisponde a FCFS con la possibilità di commutare tra i vari processi L utilizzo della CU viene suddivisa in "time quantum" (porzione temporale) Ogni task riceve la CU per un tempo massimo pari al quantum e poi viene inserito nuovamente nella ready queue La ready queue è gestita con modalità FIFO 1 0 5 2 0 17 0 68 4 0 24 Quantum: 20 unità (81+20+94+10) / 4 = 81,25 RR (Round Robin) 1 (0-0)+(77-20)+(121-97)=81 2 (20-0)=20 (7-0)+(97-57)+(14-117)=94 4 (57-0)+(117-77)+(154-121)=10 1 2 4 1 4 1 0 20 7 57 77 97 117 121 14 154 162 RR (Round Robin) Notevole dipendenza delle prestazioni dalla durata del quanto di tempo Quantum lungo: RR degenera in FCFS Quantum corto: vengono effettuati troppi context switching e i tempi di commutazione/gestione risultano molto elevati MQS (Multilevel Queue Scheduling) Scheduling adatto a situazioni in cui i task si possono classificare in gruppi diversi Task in foreground, background, etc. Task di sistema, interattivi, batch, studenti, etc. La ready queue viene suddivisa in code diverse Ogni coda può essere gestita con il proprio algoritmo di scheduling uò essere modificato per permettere il trasferimento dei task tra le varie code MSQ con retroazione Considerazioni aggiuntive Scheduling dei thread Il SO non è a conoscenza dei T a livello utente (gestiti da una libreria) e quindi non se ne occupa a livello di scheduling Se il sistema prevede T a livello kernel lo scheduling viene effettuato a livello di thread Considerazioni aggiuntive Scheduling per sistemi multiprocessori Tutte le esemplificazioni precedenti sono state fatte supponendo l esistenza di una sola CU Nel caso siano disponibili più unità elaborative il carico può essere distribuito Esistono diversi schemi Multi-elaborazione asimmetrica: un processore master distribuisce il carico tra i processori server Mullti-elaborazione simmetrica: ciascun processore provvede al proprio scheduling ag. 4 4
Considerazioni aggiuntive Scheduling per sistemi real-time Tentano di rispondere in tempo reale al verificarsi di eventi Gli eventi guidano il comportamento dello scheduling Si definisce latenza il tempo che intercorre tra il verificarsi dell evento e la sua gestione Esistono due tipi di sistemi real-time Real-time soft Danno priorità ai processi critici ma non garantiscono le tempistiche di risposta Real-time hard Si garantisce l esecuzione dei task entro un tempo massimo limite ag. 5 5