Salta al contenuto
Note per Studenti Esercizio - Scheduling con I-O, effetto convoglio ed EDF (eserciziario, esercizio 27)

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 P1=2P_1 = 2, P2=3P_2 = 3, P3=7P_3 = 7, P4=18P_4 = 18 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 A,B,C,DA, B, C, D 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ª
AA 0 10 6 4
BB 2 3 2 2
CC 3 2
DD 5 1 1

Gantt con FCFS, tempo di attesa di ciascun task; lo scheduling soffre dell'effetto convoglio?

(c) Processi periodici con scadenza: T1T_1 (arrivo 0, esecuzione 10, scadenza 33), T2T_2 (4, 3, 28), T3T_3 (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 q=2q = 2

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 tt 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 P1P_1 0 finisce il 1° burst, I/O fino a 12
2 .. 4 P2P_2 1
4 .. 6 P3P_3 5
6 .. 8 P4P_4 16
8 .. 9 P2P_2 0 I/O fino a 19
9 .. 11 P3P_3 3
11 .. 13 P4P_4 14 P1P_1 rientra a 12 e si mette in coda
13 .. 15 P3P_3 1
15 .. 17 P1P_1 0 2° burst di 2 ms: P1P_1 termina a 17
17 .. 19 P4P_4 12 P2P_2 rientra a 19
19 .. 20 P3P_3 0 finisce il 1° burst, I/O fino a 30
20 .. 22 P2P_2 1 2° burst di 3 ms
22 .. 24 P4P_4 10
24 .. 25 P2P_2 0 P2P_2 termina a 25
25 .. 31 P4P_4 4 l'unico pronto fino a 30: tre quanti consecutivi
31 .. 33 P3P_3 5 P3P_3 è rientrato a 30: 2° burst di 7
33 .. 35 P4P_4 2
35 .. 37 P3P_3 3
37 .. 39 P4P_4 0 finisce il 1° burst, I/O fino a 49
39 .. 42 P3P_3 0 gli ultimi 3 ms: P4P_4 è in I/O, nessuno interrompe P3P_3, che termina a 42
42 .. 49 (vuota) solo P4P_4 in I/O
49 .. 67 P4P_4 0 2° burst di 18 ms senza concorrenti

Tempi di attesa in coda (tempo pronto ma non in esecuzione, escluso l'I/O):

  • P1P_1: primo burst subito (0); rientra a 12 e parte a 15: 33.
  • P2P_2: (2−0)+(8−4)+(20−19)+(24−22)=2+4+1+2=9(2 - 0) + (8 - 4) + (20 - 19) + (24 - 22) = 2 + 4 + 1 + 2 = 9.
  • P3P_3: (4−0)+(9−6)+(13−11)+(19−15)+(31−30)+(35−33)+(39−37)=4+3+2+4+1+2+2=18(4 - 0) + (9 - 6) + (13 - 11) + (19 - 15) + (31 - 30) + (35 - 33) + (39 - 37) = 4 + 3 + 2 + 4 + 1 + 2 + 2 = 18.
  • P4P_4: (6−0)+(11−8)+(17−13)+(22−19)+(25−24)+(33−31)+(37−35)=6+3+4+3+1+2+2=21(6 - 0) + (11 - 8) + (17 - 13) + (22 - 19) + (25 - 24) + (33 - 31) + (37 - 35) = 6 + 3 + 4 + 3 + 1 + 2 + 2 = 21.

Media =(3+9+18+21)/4=51/4=12,75= (3 + 9 + 18 + 21)/4 = 51/4 = 12{,}75.

(a) SJF preemptive (SRTF)

t esegue note
0 .. 2 P1P_1 finisce il 1° burst; I/O fino a 12
2 .. 5 P2P_2 3 ms, finisce; I/O fino a 15
5 .. 12 P3P_3 7 ms, finisce; I/O fino a 22
12 .. 14 P1P_1 2° burst di 2 (è più breve di P4P_4): finisce
14 .. 15 P4P_4 resta in esecuzione finché non rientra P2P_2
15 .. 18 P2P_2 2° burst (3 < residuo di P4P_4): finisce
18 .. 22 P4P_4
22 .. 29 P3P_3 2° burst di 7 (7 < residuo P4P_4 di 13): finisce
29 .. 42 P4P_4 termina il 1° burst a 42
42 .. 52 CPU vuota (I/O di P4P_4)
52 .. 70 P4P_4 2° burst di 18

Attese: P1=0P_1 = 0, P2=2P_2 = 2, P3=5P_3 = 5, P4=24P_4 = 24; media =31/4=7,75= 31/4 = 7{,}75. 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 AA BB CC DD AA BB DD AA BB

Attesa totale == somma, per ogni esecuzione, di (inizio −- istante in cui è pronta):

  • AA: (0−0)+(16−10)+(25−22)=9(0 - 0) + (16 - 10) + (25 - 22) = 9;
  • BB: (10−2)+(22−13)+(29−24)=8+9+5=22(10 - 2) + (22 - 13) + (29 - 24) = 8 + 9 + 5 = 22;
  • CC: 13−3=1013 - 3 = 10;
  • DD: (15−5)+(24−16)=10+8=18(15 - 5) + (24 - 16) = 10 + 8 = 18.

Effetto convoglio: sì. Il primo burst di AA (10 unità) fa aspettare tutti i brevi (BB, CC, DD) e si ripete: i task brevi accumulano attese (B=22B = 22) maggiori di quelle del task lungo (A=9A = 9).

(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 T1T_1 (scad. 33) T2T_2 (scad. 28) T3T_3 (scad. 29) T1T_1 (resto 6)
  • a t=4t=4 arriva T2T_2 (scadenza 28 < 33): prelaziona T1T_1, che ha eseguito 4 su 10;
  • T2T_2 finisce a 7; a t=5t=5 era arrivato T3T_3 (29), ma 28 < 29, quindi T2T_2 non è interrotto;
  • a t=7t=7 tra T1T_1 (33) e T3T_3 (29) vince T3T_3, che finisce a 17;
  • T1T_1 riprende e completa i restanti 6 a t=23t = 23.

Completamenti: T2=7≤28T_2 = 7 \le 28, T3=17≤29T_3 = 17 \le 29, T1=23≤33T_1 = 23 \le 33: 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

Teoria collegata