Esercizio - Round robin con priorità e task idle (eserciziario, esercizio 83)
In questa pagina 3
Testo (eserciziario del corso di Sistemi Operativi, Ing. Informatica UniPD, esercizio 83, tradotto). Dato lo scheduling round robin preemptive con priorità e quanto di 10 unità; esiste inoltre un task idle con burst 0 che gira quando non ci sono processi pronti. Un processo prelazionato viene messo in fondo alla coda del proprio livello di priorità. Il numero più alto è la priorità più alta.
| processo | priorità | burst | arrivo |
|---|---|---|---|
| 40 | 20 | 0 | |
| 30 | 25 | 25 | |
| 30 | 25 | 30 | |
| 35 | 15 | 60 | |
| 5 | 10 | 100 | |
| 10 | 10 | 105 |
Regole
- Si esegue il processo pronto di priorità più alta. Un nuovo arrivo con priorità strettamente maggiore prelaziona subito il processo in esecuzione (che va in fondo alla propria coda).
- Processi con la stessa priorità girano a round robin con quanto 10.
- Quando nessun processo è pronto gira l'idle.
Svolgimento
| intervallo | esegue | motivo |
|---|---|---|
| 0 .. 20 | (40) | unico processo; il quanto scade a 10 e a 20 ma nessun altro è pronto, quindi continua; finisce a 20 |
| 20 .. 25 | idle | nessun processo pronto |
| 25 .. 35 | (30) | arriva a 25; quanto fino a 35 |
| 35 .. 45 | (30) | è arrivato a 30 e attende in coda 30; scaduto il quanto di (residuo 15) tocca a lui (residuo 15) |
| 45 .. 55 | (30) | altro quanto (residuo 5) |
| 55 .. 60 | (30) | residuo 15: esegue 5 unità e a 60 arriva |
| 60 .. 75 | (35) | ha priorità 35 > 30 e prelaziona (residuo 10); esegue 15 unità (un quanto e mezzo, nessuno ha priorità uguale) e finisce a 75 |
| 75 .. 80 | (30) | (in coda prima di ) esegue le sue 5 unità residue e finisce a 80 |
| 80 .. 90 | (30) | residuo 10, finisce a 90 |
| 90 .. 100 | idle | |
| 100 .. 105 | (5) | arriva a 100 e parte |
| 105 .. 115 | (10) | arriva a 105 con priorità 10 > 5 e prelaziona (residuo 5); finisce a 115 |
| 115 .. 120 | (5) | termina a 120 |
Diagramma di Gantt:
| 0-20 | 20-25 | 25-35 | 35-45 | 45-55 | 55-60 | 60-75 | 75-80 | 80-90 | 90-100 | 100-105 | 105-115 | 115-120 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| idle | idle |
Verifica delle durate eseguite: ✓; ✓; ✓; ✓; ✓; ✓.
Turnaround e attesa
| arrivo | fine | turnaround | burst | attesa | |
|---|---|---|---|---|---|
| 0 | 20 | 20 | 20 | 0 | |
| 25 | 80 | 55 | 25 | 30 | |
| 30 | 90 | 60 | 25 | 35 | |
| 60 | 75 | 15 | 15 | 0 | |
| 100 | 120 | 20 | 10 | 10 | |
| 105 | 115 | 10 | 10 | 0 |
Risultati coincidenti con la soluzione del corso (turnaround 20, 55, 60, 15, 20, 10; attesa 0, 30, 35, 0, 10, 0).
Domande d'esame
Perché attende anche se è stato il primo a partire dopo l'idle? Traccia. Perché a arriva con priorità maggiore (10 > 5) e lo prelaziona: riprende solo a 115 e attende 10 unità.
Versione ripasso
- Dati: , priorità alta = numero alto; (40, burst 20, arrivo 0), (30, 25, 25), (30, 25, 30), (35, 15, 60), (5, 10, 100), (10, 10, 105). 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; stessa priorità in RR; idle se nulla è pronto.
- Gantt: 0-20, idle 20-25, 25-35, 35-45, 45-55, 55-60, 60-75, 75-80, 80-90, idle 90-100, 100-105, 105-115, 115-120.
- Turnaround: 20, 55, 60, 15, 20, 10. Attesa: 0, 30, 35, 0, 10, 0.
- Errori tipici: prelazione con priorità uguale; dimenticare i tempi idle; far ripartire il quanto della stessa coda a metà.