Esercizio - Code a priorità con aging e feedback (eserciziario, esercizio 23)
In questa pagina 4
Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD, esercizio 23). Cinque job:
| job | durata del burst | arrivo | priorità |
|---|---|---|---|
| 8 | 0 | 2 | |
| 6 | 1 | 3 | |
| 3 | 2 | 2 | |
| 4 | 3 | 2 | |
| 3 | 4 | 2 |
Si descriva la sequenza di esecuzione (diagramma di Gantt) e si calcoli l'istante di completamento di ogni job con code multiple a priorità e feedback, dove ogni coda è gestita con FCFS. Il feedback: la priorità diminuisce di 1 (fino al livello base 1) se passano più di 6 unità di tempo consecutive in esecuzione, e aumenta di 1 per ogni 6 unità di tempo passate in attesa in una qualsiasi coda. Il numero più alto è la priorità più alta. Nota del corso: FCFS serve a gestire le code, non a far prelazionare un processo il cui valore di priorità aumenta durante l'esecuzione di un altro. 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 →.
Regole operative
- C'è una coda per ogni livello di priorità; si esegue il job della coda non vuota di priorità più alta; dentro la coda, FCFS nell'ordine di ingresso nella coda.
- Un job in esecuzione viene prelazionato solo da un job di priorità strettamente maggiore (all'arrivo o dopo un invecchiamento).
- Ogni job pronto accumula attesa; ogni 6 unità consecutive di attesa la sua priorità sale di 1 e il job entra in fondo alla coda del nuovo livello. Quando un job lascia la CPU (prelazione o declassamento), il suo contatore di attesa riparte da 0 e il job va in fondo alla coda del suo livello.
- Un job che raggiunge 6 unità consecutive in esecuzione scende di 1 (minimo 1). Questa è la lettura con cui si trovano i risultati del corso (v. la nota in fondo).
Svolgimento passo per passo
Si scrive per ogni istante significativo chi esegue e le priorità correnti.
| intervallo | job (priorità) | durata | cosa succede |
|---|---|---|---|
| 0 .. 1 | (2) | 1 | arriva a 0 ed è l'unico |
| 1 .. 7 | (3) | 6 | arriva a 1 con priorità 3 > 2 e prelaziona (residuo 7, contatore di attesa da 0 al ). Intanto arrivano (2), (3), (4) in coda 2, dopo . finisce a 7 |
| 7 .. 13 | (3) | 6 | a ha atteso 6 unità (1 .. 7): sale a priorità 3 ed è il solo in coda 3. Esegue 6 unità (residuo 1). Nel frattempo raggiunge 6 unità di attesa a e sale a 3; a ; a (coda 3 nell'ordine ) |
| 13 .. 15 | (3) | 2 | a ha eseguito 6 unità consecutive: scende a 2. Gli altri in coda 3 sono : parte . A e hanno atteso altre 6 unità dall'ingresso in coda 3 ( da 9, da 10 a 16): sale a 4 a e prelaziona (residuo 1) |
| 15 .. 19 | (4) | 4 | finisce a 19. A anche è salito a 4 |
| 19 .. 22 | (4) | 3 | è in coda 4 (priorità più alta); a è tornato a 3 dopo 6 unità di attesa (13 .. 19). finisce a 22 |
| 22 .. 23 | (4) | 1 | a ha completato altre 6 unità di attesa (dal 15) ed è salito a 4: ora è la priorità più alta. Finisce a 23 |
| 23 .. 24 | (3) | 1 | ultimo job, residuo 1: finisce a 24 |
Diagramma di Gantt:
| 0-1 | 1-7 | 7-13 | 13-15 | 15-19 | 19-22 | 22-23 | 23-24 |
|---|---|---|---|---|---|---|---|
Verifica delle durate: , , , , . Totale .
Istanti di completamento: , , , , ; turnaround ( fine arrivo): , , , , . Coincidono con la soluzione del corso.
Note sull'incertezza della traccia
- La traccia dice "più di 6 unità" per il declassamento. Con quella lettura stretta esegue 7 unità consecutive (7 .. 14), che sono proprio il suo residuo, e termina a 14 senza essere declassato: risulterebbero , , , , . La soluzione del corso () corrisponde invece al declassamento già al raggiungimento delle 6 unità: è la lettura seguita sopra.
- Il corso annota che in una versione del Gantt il cambio di priorità di dopo 5 istanti è errato: il job deve sempre aspettare 6 unità. Qui sale a 3 a (arrivato a 2).
- Entrambe le versioni sono state controllate con una simulazione in Python.
Domande d'esame
Perché il feedback con aging evita la starvation? Traccia. Ogni 6 unità di attesa la priorità cresce di 1: un job a bassa priorità arriva prima o poi a un livello più alto di quelli che lo precedono, e viene eseguito. Il calo dopo troppa esecuzione impedisce che i job lunghi monopolizzino la CPU.
Versione ripasso
- Dati: (8, arrivo 0, prio 2), (6, 1, 3), (3, 2, 2), (4, 3, 2), (3, 4, 2); priorità alta = numero alto; feedback: dopo più di 6 unità in esecuzione, ogni 6 unità di attesa; code FCFS. 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 →.
- Regole: prelazione solo con priorità strettamente maggiore; attesa contata da 0 quando si esce dalla CPU o si cambia livello; l'invecchiamento mette in fondo alla nuova coda.
- Gantt: -, -, -, -, -, -, -, -.
- Completamenti: , , , , ; turnaround 24, 6, 21, 16, 18.
- Punti chiave: (prio 3) prelaziona a ; sale a 3 a (6 unità di attesa); sale a 4 a e prelaziona ; attende sempre 6 unità prima di salire.
- Errori tipici: salire dopo 5 unità invece di 6; prelazione con priorità uguale; non riazzerare il contatore di attesa.