Processi e Thread Scheduling Schedulazione 1 Scheduling Introduzione

  • Slides: 36
Download presentation
Processi e Thread Scheduling (Schedulazione) 1

Processi e Thread Scheduling (Schedulazione) 1

Scheduling Introduzione al problema dello Scheduling (1) • Lo scheduler si occupa di decidere

Scheduling Introduzione al problema dello Scheduling (1) • Lo scheduler si occupa di decidere quale fra i processi pronti può essere mandato in esecuzione • L’algoritmo di scheduling ha impatto su: – prestazioni percepite dagli utenti – efficienza nell’utilizzo delle risorse della macchina • Lo scheduling ha obiettivi diversi in diversi sistemi (batch, interattivi…) 2

Introduzione al problema dello Scheduling (2) Obiettivi principali degli Algoritmi di Scheduling: • Fairness

Introduzione al problema dello Scheduling (2) Obiettivi principali degli Algoritmi di Scheduling: • Fairness (Equità) - processi della stesso tipo devono avere trattamenti simili • Balance (Bilanciamento) - tutte le parti del sistema devono essere sfruttate (CPU, dispositivi …) • Sistemi batch – Throughput - massimizzare il numero di job completati in un intervallo di tempo – Tempo di Turnaround - minimizzare il tempo di permanenza di un job nel sistema • Sistemi interattivi – Tempo di risposta - minimizzare il tempo di riposta agli eventi – Proporzionalità - assicurare che il tempo di risposta sia proporzionale alla complessità dell’azione richiesta 3

Introduzione al problema dello Scheduling (3) • Due tipologie di processi : – processi

Introduzione al problema dello Scheduling (3) • Due tipologie di processi : – processi CPU-bound -- lunghi periodi di eleborazione fra due richieste successive di I/O – processi I/O-bound -- brevi periodi di elaborazione fra due richieste successive di I/O • Conviene dare priorità ai processi I/O-bound 4

Introduzione al problema dello Scheduling (4) P 1 Lungo burst di CPU Corto burst

Introduzione al problema dello Scheduling (4) P 1 Lungo burst di CPU Corto burst di CPU Attesa completamento i/o P 2 tempo • Processi compute bound (P 1) and I/O bound (P 2) 5

Introduzione al problema dello Scheduling (5) P 1 P 2 tempo • Priorità ai

Introduzione al problema dello Scheduling (5) P 1 P 2 tempo • Priorità ai compute bound 6

Introduzione al problema dello Scheduling (6) P 1 P 2 tempo • Priorità agli

Introduzione al problema dello Scheduling (6) P 1 P 2 tempo • Priorità agli I/O bound – il funzionamento del sistema è più bilanciato 7

Introduzione al problema dello Scheduling (7) • Scheduling senza prerilascio – lo scheduler interviene

Introduzione al problema dello Scheduling (7) • Scheduling senza prerilascio – lo scheduler interviene solo quando un processo viene creato, termina o si blocca su una SC • Scheduling con prerilascio – lo scheduler può intervenire ogni volta che è necessario per ottenere gli obiettivi perseguiti • quando diventa pronto un processo a più alta priorità rispetto a quello in esecuzione • quando il processo in esecuzione ha sfruttato la CPU per un tempo abbastanza lungo 8

Introduzione al problema dello Scheduling (8) • Scheduling in sistemi batch – SJF (shortest

Introduzione al problema dello Scheduling (8) • Scheduling in sistemi batch – SJF (shortest job first) • Scheduling in sistemi interattivi – Round Robin – Code Multiple 9

Scheduling nei sistemi Batch (1) • Un esempio di scheduling secondo la strategia che

Scheduling nei sistemi Batch (1) • Un esempio di scheduling secondo la strategia che privilegia il job più corto (SJF “Shortest Job First”) – l’insieme dei job da schedulare è noto all’inizio – si conosce il tempo di esecuzione T di ogni job – i job sono schedulati in ordine di T crescente – SJF minimizza il tempo di turnaround medio – non c’è prerilascio 10

Scheduling nei sistemi Batch (2) Perché SJF funziona? 4 job A, B, C, D

Scheduling nei sistemi Batch (2) Perché SJF funziona? 4 job A, B, C, D con tempi di esecuzione a, b, c, d – turnaround(A) -- a – turnaround(B) -- a + b – turnaround(C) -- a + b + c – turnaround(D) -- a + b + c + d turnaround totale 4 a + 3 b + 2 c + 1 d minimo quando a, b, c, d sono in ordine crescente 11

Scheduling nei sistemi Batch (3) Tre livelli di scheduling 12

Scheduling nei sistemi Batch (3) Tre livelli di scheduling 12

Scheduling nei sistemi Batch (4) • Admission scheduler – decide quali job (sottomessi, memorizzati

Scheduling nei sistemi Batch (4) • Admission scheduler – decide quali job (sottomessi, memorizzati su disco) ammettere nel sistema (viene creato il processo corrispondente) • Memory scheduler – i job ammessi devono essere caricati in memoria centrale prima di poter essere eseguiti – se non tutti i job entrano in MC, il memory scheduler sceglie quali job caricare in memoria e quali tenere su disco (swapped out) • CPU scheduler – lo scheduler che abbiamo trattato finora 13

Scheduling nei sistemi Interattivi Scheduling Round Robin (1) – (a) lista dei processi pronti

Scheduling nei sistemi Interattivi Scheduling Round Robin (1) – (a) lista dei processi pronti – (b) lista dei pronti dopo che B ha usato il suo quanto (quantum) di tempo 14

Scheduling Round Robin (2) • Come fissare il quanto di tempo – deve essere

Scheduling Round Robin (2) • Come fissare il quanto di tempo – deve essere abbastanza lungo da ammortizzare il costo di un context switch (ordine 1 ms) – deve essere abbastanza breve da permettere una risposta veloce agli utenti interattivi – in sistemi reali tipicamente 20 -120 ms • RR non favorisce i processi I/O bound 15

Scheduling con priorità (1) • Ogni processo ha una priorità • Ogni volta va

Scheduling con priorità (1) • Ogni processo ha una priorità • Ogni volta va in esecuzione il processo a priorità più elevata • Punti chiave : – come assegnare le priorità (statiche, dinamiche…) – come evitare attesa indefinita della CPU nei processi a priorità più bassa – come individuare i processi I/O bound • per elevare la loro priorità 16

Scheduling con priorità (2) • Molte strategie per il calcolo della priorità • Tipicamente

Scheduling con priorità (2) • Molte strategie per il calcolo della priorità • Tipicamente : – priorità dinamica (es. più elevata per i processi che passano da bloccato a pronto) – legata alla percentuale f del quanto di tempo che è stato consumato l’ultima volta che il processo è andato in esecuzione (es. proporzionale a 1/ f , favorisce i processi I/O bound) – decrescente nel tempo per i processi che rimangono pronti (es. per impedire l’attesa indefinita) 17

Scheduling con Code multiple (1) Esempio di algoritmo di scheduling a code multiple con

Scheduling con Code multiple (1) Esempio di algoritmo di scheduling a code multiple con 4 classi di priorità 18

Scheduling con Code multiple (2) • Scheduling Round Robin all’interno della classe con priorità

Scheduling con Code multiple (2) • Scheduling Round Robin all’interno della classe con priorità più elevata • I processi che usano tutto il quanto di tempo più di un certo numero di volte vengono passati alla classe inferiore • Alcuni sistemi danno quanti più lunghi ai processi nelle classi basse (compute-bound) per minimizzare l’overhead del cambio di contesto 19

Scheduling dei Thread (1) • Lo scheduling dei thread – utilizza algoritmi simili a

Scheduling dei Thread (1) • Lo scheduling dei thread – utilizza algoritmi simili a quelli visti finora – viene implementato in modo diverso nel thread a livello utente e a livello kernel 20

Scheduling dei Thread (2) • Lo scheduling dei thread user level – il SO

Scheduling dei Thread (2) • Lo scheduling dei thread user level – il SO non conosce l’esistenza dei thread, quindi schedula i processi – durante l’esecuzione di un processo lo schedulatore della libreria dei thread decide quale thread mandare in esecuzione – le interruzioni del clock non sono visibili allo schedulatore di livello utente – lo schedulatore può intervenire solo se invocato esplicitamente (es. thread_yield) – non c’è prerilascio (all’interno di un singolo processo) 21

Scheduling dei Thread (3) • Lo scheduling dei thread kernel level – il SO

Scheduling dei Thread (3) • Lo scheduling dei thread kernel level – il SO schedula i thread (non i processi) – quando un thread si blocca il SO può decidere di mandare in esecuzione un altro thread di quel processo o un thread di un processo diverso • può scegliere se pagare il cambio di contesto o no – le interruzioni del clock permettono allo schedulatore di tornare in esecuzione alla fine del quento di tempo • i quanti di tempo sono assegnati direttamente ai thread • si può effettuare prerilascio 22

Alcuni esempi di schedulatori Unix, Linux, Windows 2000 23

Alcuni esempi di schedulatori Unix, Linux, Windows 2000 23

Scheduling in UNIX Scheduling a due livelli : • scheduler a basso livello (low-level):

Scheduling in UNIX Scheduling a due livelli : • scheduler a basso livello (low-level): sceglie il prossimo processo da mandare in esecuzione fra quelli in RAM • scheduler ad alto livello (high-level): sposta i processi fra RAM e disco in modo da dare a tutti la possibilità di ottenere l’accesso alla CPU Nel seguito descriveremo lo scheduler a basso livello 24

Lo scheduler di UNIX (1) Lo scheduling a basso livello è basato su una

Lo scheduler di UNIX (1) Lo scheduling a basso livello è basato su una coda a più livelli di priorità 25

Lo scheduler di UNIX (2) • Si esegue il primo processo della prima coda

Lo scheduler di UNIX (2) • Si esegue il primo processo della prima coda non vuota per massimo 1 quanto (tipicamente 100 ms) • Scheduling round robin fra processi con la stessa priorità • Una volta al secondo tutte le priorità vengono ricalcolate: priorità = cpu _usage + nice + base cpu _usage : numero di clock tick per secondo che il processo ha avuto negli ultimi secondi nice : valore intero nell’intervallo [-20, +20] base : valore intero che dipende da cosa sta facendo il processo • ha il valore della priorità precedente se il processo sta eseguendo elaborazione normale in user mode • ha un valore negativo molto basso se sta effettuando I/O da disco o da terminale 26

Lo scheduler di UNIX (3) Meccanismo di aging (invecchiamento o decadimento) usato per il

Lo scheduler di UNIX (3) Meccanismo di aging (invecchiamento o decadimento) usato per il calcolo di cpu _usage : • Fissiamo un intervallo di decadimento t • I tick ricevuti mentre il processo P è in esecuzione vengono accumulati in una variabile temporanea tick • Ogni t cpu _usage = cpu _usage / 2 + tick; tick = 0; • Il peso dei tick utilizzati descresce col tempo • La penalizzazione dei processi che hanno utilizzato molta CPU diminuisce nel tempo 27

Lo scheduler di Linux (1) • Vengono schedulati i thread, non i processi •

Lo scheduler di Linux (1) • Vengono schedulati i thread, non i processi • Tre classi di thread : real-time FIFO, real-time Round Robin, Timesharing • Ogni thread ha – una priorità nell’intervallo [0, +40], generalmente all’inizio la priorità di default è 20 – un quanto (misurato in jiffy = 10 ms, sono i tick del clock) • Lo scheduler calcola la goodness (gdn, lett. bontà) di ogni thread pronto come if (class == real-time) gdn = 1000 + priority if (class == timeshar && quantum > 0) gdn = quantum + priority if (class == timeshar && quantum == 0) gdn = 0 28

Lo scheduler di Linux (2) Algoritmo di scheduling : • Ogni volta viene selezionato

Lo scheduler di Linux (2) Algoritmo di scheduling : • Ogni volta viene selezionato il thread con goodness maggiore • Ogni volta che arriva un tick il quanto del thread in esecuzione viene decrementato • Un thread viene de-schedulato se si verifica una delle seguenti condizioni – il quanto diventa 0 – il thread si blocca – diventa ready un thread con una goodness maggiore 29

Lo scheduler di Linux (3) Algoritmo di scheduling (contd. ): • Quando tutti i

Lo scheduler di Linux (3) Algoritmo di scheduling (contd. ): • Quando tutti i quanti dei thready sono andati a 0 , lo scheduler ricalcola il quanto di ogni thread (anche se blocked) come segue : quantum = quantum / 2 + priority 30

Scheduling in Windows 2000 (1) • Win 32 permette all’utente di specificare : –

Scheduling in Windows 2000 (1) • Win 32 permette all’utente di specificare : – priorità di un processo (6 livelli diversi) – priorità di un thread all’interno di un processo (7 livelli diversi) • Windows 2000 mappa le 42 combinazioni possibili su 32 livelli di priorità 31

Scheduling in Windows 2000 (2) Corrispondenza fra le priorità di Win 32 e quelle

Scheduling in Windows 2000 (2) Corrispondenza fra le priorità di Win 32 e quelle di Windows 2000 32

Scheduling in Windows 2000 (3) Windows 2000 fornisce 32 priorità diverse per i thread

Scheduling in Windows 2000 (3) Windows 2000 fornisce 32 priorità diverse per i thread 33

Scheduling in Windows 2000 (4) Algoritmo di scheduling : • Si esegue il primo

Scheduling in Windows 2000 (4) Algoritmo di scheduling : • Si esegue il primo thread della prima coda non vuota per massimo 1 quanto (20 ms--120 ms) • Scheduling round robin fra thread con la stessa priorità • Come variano le priorità nel tempo : – i thread tipicamente entrano a priorità 8 – la priorità viene elevata se: • viene completata una operazione di I/O (+1 disco, +2 linea seriale, +6 tastiera, +8 scheda audio …) • termina l’attesa su un semaforo, mutex, evento (+1 background, +2 foreground) • l’input nella finestra di dialogo associata al thread è pronto 34

Scheduling in Windows 2000 (5) Algoritmo di scheduling : • Come variano le priorità

Scheduling in Windows 2000 (5) Algoritmo di scheduling : • Come variano le priorità nel tempo (cont. ): – la priorità viene abbassata se: • un thread usa tutto il suo quanto (-1), fino a ritornare alla priorità base – se un thread non ha girato per un tempo maggiore di una soglia fissata, allora passa per 2 quanti a priorità 15 (serve a gestire potenziali inversioni di priorità) • Quando una finestra va in foreground il quanto dei thread corrispondenti viene allungato 35

Scheduling in Windows 2000 (6) Un esempio di inversione di priorità 36

Scheduling in Windows 2000 (6) Un esempio di inversione di priorità 36