Esercizio - Scheduling con I-O, effetto convoglio ed EDF (eserciziario, esercizio 27)
In questa pagina 6
Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD, esercizio 27, tre parti).
(a) Quattro processi con burst di CPU , , , ms, tutti all'istante 0. Ognuno esegue il proprio burst, poi un'operazione di I/O di 10 ms, poi un altro burst della stessa lunghezza del precedente, e infine termina. Gli I/O possono procedere in parallelo. Si disegnino i diagrammi di Gantt con RR con quanto di 2 ms e con SJF preemptive (SRTF) e si valuti il tempo medio di attesa.
(b) Task indipendenti su un solo processore: appena un task ha finito la propria esecuzione è pronto per la successiva (che non dura necessariamente come la prima).
| task | arrivo | 1ª esecuzione | 2ª | 3ª |
|---|---|---|---|---|
| 0 | 10 | 6 | 4 | |
| 2 | 3 | 2 | 2 | |
| 3 | 2 | |||
| 5 | 1 | 1 |
Gantt con FCFS, tempo di attesa di ciascun task; lo scheduling soffre dell'effetto convoglio?
(c) Processi periodici con scadenza: (arrivo 0, esecuzione 10, scadenza 33), (4, 3, 28), (5, 10, 29). Gantt con EDF e verificare se tutte le scadenze sono rispettate (lo scheduling è fattibile).
Teoria: Scheduling della CPU - FCFS, SJF, priorità e round robinLo scheduler della CPU sceglie tra i processi pronti quello a cui dare il core (il dispatcher esegue il cambio, con latenza di dispatch); lo scheduling è non preemptive (il processo tiene la CPU finché termina o si blocca) o preemptive (la CPU gli può essere tolta, con rischio di race condition); i criteri sono utilizzo della CPU e throughput (da massimizzare), tempo di attesa, di turnaround (completamento meno arrivo) e di risposta (da minimizzare); FCFS è semplice ma soffre dell'effetto convoglio (esempio 24, 3, 3: attesa media 17 contro 3); SJF è ottimo per l'attesa media ma richiede la lunghezza del prossimo burst, stimata con la media esponenziale tau(n+1) = alfa t(n) + (1-alfa) tau(n); SRTF è la versione preemptive (esempio con attesa media 6,5 contro 7,75); round robin dà a ciascuno un quanto q e nessuno attende più di (n-1)q; la priorità causa starvation, risolta con l'aging; code multilivello e a feedback (MLFQ) combinano le politiche.Scheduling della CPU - FCFS, SJF, priorità e round robin →, Scheduling multiprocessore e real-timeNei sistemi real-time conta la scadenza: si misurano latenza di interrupt e latenza di dispatch; i sistemi soft real-time danno priorità ai compiti critici senza garanzie, quelli hard devono rispettare le scadenze; per compiti periodici (burst t, scadenza d, periodo p, con 0 <= t <= d <= p) l'utilizzo è la somma di t/p: Rate Monotonic (priorità fissa, minore il periodo maggiore la priorità) garantisce le scadenze se l'utilizzo non supera N(2^(1/N)-1) (83% per due compiti), Earliest Deadline First (priorità dinamica, scadenza più vicina) le garantisce se l'utilizzo è sotto il 100%; la ripartizione proporzionale assegna T quote con controllo di ammissione; con più processori si hanno code comuni o private (SMP), core con più thread hardware, bilanciamento del carico (push e pull migration), affinità al processore (soft e hard), scheduling NUMA-aware; Linux usa CFS/EEVDF con domini di scheduling, Windows 32 livelli di priorità.Scheduling multiprocessore e real-time →.
(a) Round robin con
Per ogni processo: primo burst, I/O di 10 ms (la CPU è libera), secondo burst della stessa lunghezza. Un processo che torna dall'I/O all'istante entra in coda; se nello stesso istante scade un quanto, il processo che rientra va prima di quello prelazionato (la soluzione del corso lascia libera la scelta e dà il risultato che segue).
| t | esegue | residuo del burst | note |
|---|---|---|---|
| 0 .. 2 | 0 | finisce il 1° burst, I/O fino a 12 | |
| 2 .. 4 | 1 | ||
| 4 .. 6 | 5 | ||
| 6 .. 8 | 16 | ||
| 8 .. 9 | 0 | I/O fino a 19 | |
| 9 .. 11 | 3 | ||
| 11 .. 13 | 14 | rientra a 12 e si mette in coda | |
| 13 .. 15 | 1 | ||
| 15 .. 17 | 0 | 2° burst di 2 ms: termina a 17 | |
| 17 .. 19 | 12 | rientra a 19 | |
| 19 .. 20 | 0 | finisce il 1° burst, I/O fino a 30 | |
| 20 .. 22 | 1 | 2° burst di 3 ms | |
| 22 .. 24 | 10 | ||
| 24 .. 25 | 0 | termina a 25 | |
| 25 .. 31 | 4 | l'unico pronto fino a 30: tre quanti consecutivi | |
| 31 .. 33 | 5 | è rientrato a 30: 2° burst di 7 | |
| 33 .. 35 | 2 | ||
| 35 .. 37 | 3 | ||
| 37 .. 39 | 0 | finisce il 1° burst, I/O fino a 49 | |
| 39 .. 42 | 0 | gli ultimi 3 ms: è in I/O, nessuno interrompe , che termina a 42 | |
| 42 .. 49 | (vuota) | solo in I/O | |
| 49 .. 67 | 0 | 2° burst di 18 ms senza concorrenti |
Tempi di attesa in coda (tempo pronto ma non in esecuzione, escluso l'I/O):
- : primo burst subito (0); rientra a 12 e parte a 15: .
- : .
- : .
- : .
Media .
(a) SJF preemptive (SRTF)
| t | esegue | note |
|---|---|---|
| 0 .. 2 | finisce il 1° burst; I/O fino a 12 | |
| 2 .. 5 | 3 ms, finisce; I/O fino a 15 | |
| 5 .. 12 | 7 ms, finisce; I/O fino a 22 | |
| 12 .. 14 | 2° burst di 2 (è più breve di ): finisce | |
| 14 .. 15 | resta in esecuzione finché non rientra | |
| 15 .. 18 | 2° burst (3 < residuo di ): finisce | |
| 18 .. 22 | ||
| 22 .. 29 | 2° burst di 7 (7 < residuo di 13): finisce | |
| 29 .. 42 | termina il 1° burst a 42 | |
| 42 .. 52 | CPU vuota (I/O di ) | |
| 52 .. 70 | 2° burst di 18 |
Attese: , , , ; media . SRTF dà un'attesa media molto più bassa di RR perché favorisce i burst brevi, mentre RR tratta tutti allo stesso modo.
(b) FCFS
Le richieste entrano in coda nell'ordine in cui sono pronte (arrivo o fine del burst precedente).
| t | 0 .. 10 | 10 .. 13 | 13 .. 15 | 15 .. 16 | 16 .. 22 | 22 .. 24 | 24 .. 25 | 25 .. 29 | 29 .. 31 |
|---|---|---|---|---|---|---|---|---|---|
| CPU |
Attesa totale somma, per ogni esecuzione, di (inizio istante in cui è pronta):
- : ;
- : ;
- : ;
- : .
Effetto convoglio: sì. Il primo burst di (10 unità) fa aspettare tutti i brevi (, , ) e si ripete: i task brevi accumulano attese () maggiori di quelle del task lungo ().
(c) EDF
A ogni istante si esegue il processo pronto con scadenza assoluta più vicina. Le scadenze assolute sono quelle date (33, 28, 29).
| t | 0 .. 4 | 4 .. 7 | 7 .. 17 | 17 .. 23 |
|---|---|---|---|---|
| CPU | (scad. 33) | (scad. 28) | (scad. 29) | (resto 6) |
- a arriva (scadenza 28 < 33): prelaziona , che ha eseguito 4 su 10;
- finisce a 7; a era arrivato (29), ma 28 < 29, quindi non è interrotto;
- a tra (33) e (29) vince , che finisce a 17;
- riprende e completa i restanti 6 a .
Completamenti: , , : tutte le scadenze sono rispettate, lo scheduling è fattibile (la CPU resta libera dopo il 23).
Nota sugli errori del corso
Nella soluzione del corso la riga intestata "TA" per RR e SJF preemptive riporta 12,75 e 7,75, che sono tempi di attesa medi (somme 3 + 9 + 18 + 21 e 0 + 2 + 5 + 24), non turnaround.
Domande d'esame
Perché con processi che alternano CPU e I/O SRTF batte RR sull'attesa media? Traccia. SRTF dà sempre la CPU a chi ha il burst residuo più breve e finisce i brevi per primi; RR ruota a quanti uguali e prolunga tutti. Qui 7,75 contro 12,75.
Versione ripasso
- (a) Burst 2, 3, 7, 18; I/O 10 ms; secondo burst uguale. Teoria: Scheduling della CPU - FCFS, SJF, priorità e round robinLo scheduler della CPU sceglie tra i processi pronti quello a cui dare il core (il dispatcher esegue il cambio, con latenza di dispatch); lo scheduling è non preemptive (il processo tiene la CPU finché termina o si blocca) o preemptive (la CPU gli può essere tolta, con rischio di race condition); i criteri sono utilizzo della CPU e throughput (da massimizzare), tempo di attesa, di turnaround (completamento meno arrivo) e di risposta (da minimizzare); FCFS è semplice ma soffre dell'effetto convoglio (esempio 24, 3, 3: attesa media 17 contro 3); SJF è ottimo per l'attesa media ma richiede la lunghezza del prossimo burst, stimata con la media esponenziale tau(n+1) = alfa t(n) + (1-alfa) tau(n); SRTF è la versione preemptive (esempio con attesa media 6,5 contro 7,75); round robin dà a ciascuno un quanto q e nessuno attende più di (n-1)q; la priorità causa starvation, risolta con l'aging; code multilivello e a feedback (MLFQ) combinano le politiche.Scheduling della CPU - FCFS, SJF, priorità e round robin →.
- RR : , CPU vuota 42-49, 49-67; attese 3, 9, 18, 21 -> 12,75.
- SRTF: -, -, -, -, -, -, -, -, -, vuota 42-52, -; attese 0, 2, 5, 24 -> 7,75.
- (b) FCFS: ---------; attese , , , ; convoglio: sì (il burst di 10 di blocca i brevi).
- (c) EDF: -, -, -, -; fine 23, 7, 17 33, 28, 29: fattibile. Rimandi: Scheduling multiprocessore e real-timeNei sistemi real-time conta la scadenza: si misurano latenza di interrupt e latenza di dispatch; i sistemi soft real-time danno priorità ai compiti critici senza garanzie, quelli hard devono rispettare le scadenze; per compiti periodici (burst t, scadenza d, periodo p, con 0 <= t <= d <= p) l'utilizzo è la somma di t/p: Rate Monotonic (priorità fissa, minore il periodo maggiore la priorità) garantisce le scadenze se l'utilizzo non supera N(2^(1/N)-1) (83% per due compiti), Earliest Deadline First (priorità dinamica, scadenza più vicina) le garantisce se l'utilizzo è sotto il 100%; la ripartizione proporzionale assegna T quote con controllo di ammissione; con più processori si hanno code comuni o private (SMP), core con più thread hardware, bilanciamento del carico (push e pull migration), affinità al processore (soft e hard), scheduling NUMA-aware; Linux usa CFS/EEVDF con domini di scheduling, Windows 32 livelli di priorità.Scheduling multiprocessore e real-time →.
- Regola per (a): un processo che torna dall'I/O all'istante entra in coda prima del processo prelazionato a (la soluzione del corso); attesa = tempo pronto ma non in esecuzione, escluso l'I/O; le due colonne delle attese: RR , , , ; SRTF .
- Tempi chiave RR: finisce a 17, a 25, a 42, a 67 dopo la pausa 42-49 della CPU (I/O di ); SRTF: finisce a 70.
- (b), attese: ; ; ; : i task brevi aspettano più del lungo convoglio.
- (c), EDF: scadenze assolute 33, 28, 29; (28) prelaziona a 4; (29) arriva a 5 ma non prelaziona (28 < 29); parte a 7 e vince su (29 < 33).
- Errori tipici: contare l'I/O come attesa; prelazione di da parte di (28 < 29, no); chiamare "turnaround" i tempi di attesa.