Sistemi Operativi A.A. 2010/2011 Esercitazione 15 Dicembre 2009 (Agg.to Dic. 2010) Nome Cognome Matricola e-mail Esercizio 1 - Scheduling dei processi Data la seguente sequenza di processi Processo Istante Arrivo Durata Priorità P 1 0 7 2 P 2 1 5 3 P 3 3 3 1 P 4 7 5 2 se ne determini l'ordine di esecuzione secondo ognuno dei seguenti algoritmi: FCFS - First come, First served SJF - Shortest Job First (senza/con prelazione) RR - Round Robin, con q=2 e q=4 Scheduling per priorità Per ciascuno degli algoritmi si calcoli il tempo di attesa medio. Si elenchino infine sinteticamente vantaggi e svantaggi di ciascuno degli algoritmi. Soluzione Per calcolare il tempo di attesa di ogni processo dobbiamo applicare la seguente formula: T A = I fine -I arrivo -Durata Ricordiamo che il tempo di attesa T A misura per quanto tempo un processo pronto rimane "in attesa" nella coda dei processi ready. E' importante chiarire come deve essere determinato il valore della quantità I fine. I fine è il quanto di tempo immediatamente successivo all'ultimo in cui il processo è stato in esecuzione. Ad esempio, nel caso di un processo di durata 3 che inizia la sua esecuzione all'istante 1, I fine varrà 4. Infatti il processo viene eseguito: Durante il quanto di tempo che inizia all'istante 1 Durante il quanto di tempo che inizia all'istante 2 Durante il quanto di tempo che inizia all'istante 3 A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 1/13
Dunque, all'inizio del quanto di tempo 4 il processo ha terminato la sua esecuzione e la CPU può essere assegnata ad un altro processo. FCFS 1. All'istante t=0 arriva il processo P 1. La CPU è libera e il processo va subito in esecuzione. 2. All'istante t=1 arriva il processo P 2. La CPU è impegnata dal processo P 1 e il processo P 2 viene inserito nella coda dei processi pronti. 3. All'istante t=3 arriva il processo P 3 che viene inserito in coda. La coda contiene il processo P 2 e il processo P 3. 4. All'istante t=7 il processo P 1 è terminato e la CPU può essere assgnata ad un nuovo processo. Il primo processo che era stato inserito nella coda era il processo P 2 che andrà in esecuzione. 5. All'istante t=7 arriva il processo P 4 che viene inserito nella coda dopo il processo P 3. 6. All'istante t=12 il processo P 2 è finito e viene avviato il processo P 3. 7. All'istante t=15 il processo P 3 è finito e viene avviato il processo P 4. Riassumendo, i processi vengono schedulati secondo il seguente ordine: Processo 1 1 1 1 1 1 1 2 2 2 2 2 3 3 3 4 4 4 4 4 t 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 Si osserva dunque che il tempo di attesa è: 7-0 - 7 = 0 per il processo P 1. 12-1 - 5 = 6 per il processo P 2. 15-3 - 3 = 9 per il processo P 3. 20-7 - 5 = 8 per il processo P 4. Processo Arrivo Fine Durata Attesa P 1 0 7 7 0 P 2 1 12 5 6 P 3 3 15 3 9 P 4 7 20 5 8 Tempo Attesa Medio = 5.75 SJF - Senza Prelazione A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 2/13
1. All'istante t=0 arriva il processo P 1. La CPU è libera e il processo va subito in esecuzione. 2. All'istante t=1 arriva il processo P 2. Al processo P 1 sono necessarie ancora 6 unità di tempo di elaborazione, al processo P 2 soltanto 5. Tuttavia, dal momento che l'algoritmo è implementato senza prelazione, il processo P 1 mantiene il possesso della CPU fino alla sua conclusione. 3. All'istante t=3 arriva il processo P 3 che viene inserito in coda. La coda contiene sia il processo P 2 che il processo P 3. 4. All'istante t=7 il processo P 1 è terminato. Nella coda sono già presenti sia il processo P 2 che il processo P 3. Viene inoltre aggiunto il processo P 4 che arriva all'istante 7. Viene selezionato per l'esecuzione il processo P 3 dal momento che è quello che richiede il minor tempo di esecuzione. 5. All'istante t=10 il processo P 3 è terminato e deve essere avviato un nuovo processo. I due processi presenti nella coda (P 2 e P 4 ) richiedono lo stesso tempo di CPU. Tuttavia viene selezionato il processo P 2 che per primo è stato inserito nella coda. 6. All'istante t=15 il processo P 4 è terminato e viene avviato il processo P 4. 7. All'istante t=20 il processo P 4 è terminato. Processo 1 1 1 1 1 1 1 3 3 3 2 2 2 2 2 4 4 4 4 4 t 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 L'assenza della prelazione implica che quando un processo prende possesso della CPU continua la sua elaborazione fino alla fine. Quindi il tempo di attesa è dato semplicemente dalla differenza tra l'istante di avvio e l'istante di arrivo. Processo Arrivo Fine Durata Attesa P 1 0 7 7 0 P 2 1 15 5 9 P 3 3 10 3 4 P 4 7 20 5 8 Tempo Attesa Medio = 5.25 SJF - Con Prelazione 1. All'istante t=0 arriva il processo P 1. La CPU è libera e il processo va subito in esecuzione. 2. All'istante t=1 arriva il processo P 2. Al processo P 1 sono necessarie ancora 6 unità di tempo di elaborazione, al processo P 2 soltanto 5. Dal momento che l'algoritmo è implementato con prelazione, il processo P 1 viene interrotto e messo nella coda e il processo P 2 va in esecuzione. A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 3/13
3. All'istante t=3 arriva il processo P 3. In esecuzione c'è il processo P 2 al quale mancano 3 unità di tempo per essere completato. Dal momento che il processo P 3 richiede anch'esso 3 unità di tempo, si continua a eseguire il processo P 2. Il processo P 3 viene inserito nella coda. 4. Istante t=6. Il processo P 2 è finito e viene selezionato dalla coda il processo P 3 che va in esecuzione. 5. Istante t=7. Arriva il processo P 4 che viene inserito nella coda. 6. All' istante t=9 il processo P 3 è terminato e si deve selezionare un nuovo processo. Nella coda sono presenti il processo P 1 (che richiede ancora 6 unità di CPU) e il processo P 4 che ne richiede solo 5. Viene avviato quest'ultimo. 7. All'istante t=14 il processo P 4 è terminato. A questo punto, viene riavviato il processo P 1 che, essendo l'ultimo processo rimasto, potrà essere eseguito fino alla fine. Processo 1 2 2 2 2 2 3 3 3 4 4 4 4 4 1 1 1 1 1 1 t 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 Processo Arrivo Fine Durata Attesa P 1 0 20 7 13 P 2 1 6 5 0 P 3 3 9 3 3 P 4 7 14 5 2 Tempo Attesa Medio = 4.5 Round Robin q = 2 1. All'istante t=0 arriva il processo P 1. La CPU è libera e il processo va subito in esecuzione. 2. All'istante t=1 arriva il processo P 2. La CPU è impegnata dal processo P 1 e il processo P 2 viene inserito nella coda dei processi pronti. CODA = {P 2 } 3. All'istante t=2 il processo P 1 ha esaurito i due quanti di tempo a sua disposizione. La sua esecuzione viene interrotta e viene spostato nella coda dei processi pronti. Viene avviato il processo P 2. Il processo P 1 deve ancora eseguire 5 unità di tempo. CODA = {P 1 } 4. All'istante t=3 arriva il processo 3. La CPU è impegnata dal processo P 2 e il processo P 3 viene inserito nella coda dei processi pronti. CODA = {P 1,P 3 } 5. All'istante t=4 il processo P 2 ha esaurito i due quanti di tempo a sua disposizione. Viene interrotto e spostato nella coda dei processi pronti. Il processo P 2 deve ancora eseguire 3 unità di tempo. Viene avviato il processo P 1. CODA = {P 3,P 2 } A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 4/13
6. All'istante t=6 il processo 1 viene interrotto e spostato nella coda dei processi pronti. Il processo P 1 deve ancora eseguire 3 unità di tempo. Viene avviato il processo P 3. CODA = {P 2,P 1 }. 7. All'istante t=7 arriva il processo P 4 che viene inserito nella coda. CODA = {P 2,P 1,P 4 }. 8. All'istante t=8 viene interrotto il processo P 3 e viene selezionato il primo processo dalla coda (il processo P 2 ). Il processo P 3, che richiede ancora un quanto di tempo, viene reinserito nella coda. CODA = {P 1,P 4, P 3 }. 9. All'istante t=10 il processo P 2 viene interrotto e viene spostato nella coda poichè richiede ancora un quanto di tempo di esecuzione. Viene avviato il processo P 1 che è il primo tra quelli in coda. CODA = {P 4, P 3, P 2 }. 10. All'istante t=12 il processo P 1 viene interrotto e messo in coda. Viene avviato il processo P 4. CODA = {P 3, P 2, P 1 }. 11. All'istante t=14 il processo P 4 viene interrotto e viene avviato il processo P 3. Il processo P 4 torna in coda. CODA = {P 2, P 1, P4}. 12. All'istante t=15 il processo P 3 ha terminato l'esecuzione. Parte il processo P 2. CODA = {P 1, P 4 }. 13. All'istante t=16 il processo P 2 è terminato. Parte il processo P 1. CODA = {P 4 }. 14. All'istante t=17 il processo P 1 è terminato. Dal momento che non ci sono altri processi in coda, il processo P 4 può continuare ad essere eseguito per tutte e 3 le unità di tempo che gli sono necessarie. Processo 1 1 2 2 1 1 3 3 2 2 1 1 4 4 3 2 1 4 4 4 t 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 Processo Arrivo Fine Durata Attesa P 1 0 17 7 10 P 2 1 16 5 10 P 3 3 15 3 9 P 4 7 20 5 8 Tempo Attesa Medio = 9.25 Round Robin q = 4 1. All'istante t=0 arriva il processo P 1. La CPU è libera e il processo va subito in esecuzione. 2. All'istante t=1 arriva il processo P 2. La CPU è impegnata dal processo P 1 e il processo P 2 viene inserito nella coda dei processi pronti. CODA = {P 2 } A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 5/13
3. All'istante t=3 arriva il processo P 3. La CPU è impegnata dal processo P 1 e il processo P 3 viene inserito nella coda dei processi pronti. CODA = {P 2,P 3 } 4. All'istante t=4 il processo P 1 ha esaurito i suoi quanti di tempo. Viene sospeso, spostato nella coda, e viene avviato il processo P 2. CODA = {P 3,P 1 } 5. All'istante t=7 arriva il processo P 4 che viene inserito nella coda. CODA = {P 3, P 1,P 4 } 6. All'istante t=8 il processo P 2 ha esaurito i suoi quanti di tempo. Viene sospeso, spostato nella coda e viene avviato il processo P 3. CODA = {P 1,P 4,P 2 } 7. All'istante t=11 il processo P 3 è terminato. Viene avviato il processo P 1. CODA = {P 4,P 2 } 8. All'istante t=14 il processo P 1 è terminato. Viene avviato il processo 4. CODA = {P 2 } 9. All'istante t=18 il processo P 4 ha terminato i suoi quanti di tempo. Viene inserito in coda e viene avviato il processo P 2. CODA = {P 4 } 10. All'istante t=19 il processo P 2 è terminato e viene avviata l'esecuzione dell'ultimo quanto del processo P 4. Processo 1 1 1 1 2 2 2 2 3 3 3 1 1 1 4 4 4 4 2 4 t 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 Processo Arrivo Fine Durata Attesa P 1 0 14 7 7 P 2 1 19 5 13 P 3 3 10 3 4 P 4 7 20 5 8 Tempo Attesa Medio = 8 Scheduling per priorità (con prelazione) 1. All'istante t=0 arriva il processo 1. La CPU è libera e il processo va subito in esecuzione. 2. All'istante t=1 arriva il processo 2. Il processo ha priorità più bassa rispetto a quello in esecuzione per cui viene messo in coda. CODA = {P2} 3. All'istante t=3 arriva il processo 3. Il processo ha priorità più alta sia del processo 1 (che è in esecuzione). L'esecuzione di 1 viene interrotta, il processo viene spostato nella coda e la CPU inizia ad eseguire il processo 3. Il processo 1 ha priorità maggiore del processo 2, per cui andrà a prendere posizione nella coda prima di P2. CODA = {P1, P2} 4. All'istante t=6 il processo 3 è terminato e riprende l'esecuzione del processo 1. CODA = {P2} A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 6/13
5. All'istante t=7 arriva il processo 4 che ha la stessa priorità del processo 1 che è in esecuzione. 1 continua ad essere eseguito. Tuttavia, poichè il processo 4 ha priorità maggiore del processo 2, precederà quest'ultimo nella coda. CODA = {P4, P2} 6. All'istante t=10 il processo 1 è terminato e viene avviato il processo 4. CODA = {P2} 7. All'istante t=15 il processo 4 è terminato e viene avviato il processo 2. CODA = {} Processo 1 1 1 3 3 3 1 1 1 1 4 4 4 4 4 2 2 2 2 2 t 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 Processo Arrivo Fine Durata Attesa P 1 0 10 7 3 P 2 1 20 5 14 P 3 3 6 3 0 P 4 7 15 5 3 Tempo Attesa Medio = 5 Esercizio 2 - Accesso al disco Si consideri la sequenza di richieste di accesso al disco riportata qui di seguito: 141 130 217 111 20 250 270 190 230 99 Dato un disco la cui superficie è suddivisa in 300 tracce e supposto che la testina si trovi inizialmente posizionata sulla traccia 150, si illustri come la richiesta di sequenze viene soddisfatta da ciascuna delle seguenti politiche: FCFS - First Come, First Served SSTF - Shortest Seek Time First SCAN (con/senza Look) C-SCAN (con / senza Look) Per ciascuna di esse, si calcoli il numero medio di spostamenti che viene effettuato dalla testina. Per le politiche di SCAN, si assuma che la testina inizi a muoversi verso numeri di traccia crescenti. Per le politiche C-SCAN la testina legge mentre si muove verso i numeri di traccia crescenti. Lo spostamento all'indietro della testina A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 7/13
durante la fase di non lettura, non deve essere conteggiato nel calcolo dello spostamento medio. FCFS # 1 2 3 4 5 6 7 8 9 10 Richiesta 141 130 217 111 20 250 270 160 230 99 Media Spost. 9 11 87 106 91 230 20 110 70 131 86.5 SSTF # 1 2 3 4 5 6 7 8 9 10 Richiesta 141 130 111 99 160 217 230 250 270 20 Media Spost. 9 11 19 12 61 57 13 20 20 250 47.2 SCAN senza Look # 1 2 3 4 5 6 7 8 9 10 Richiesta 160 217 230 250 270 141 130 111 99 20 Media Spost. 10 57 13 20 20 189 11 19 12 79 41 SCAN con Look # 1 2 3 4 5 6 7 8 9 10 Richiesta 160 217 230 250 270 141 130 111 99 20 Media Spost. 10 57 13 20 20 159 11 19 12 79 38 C-SCAN senza Look # 1 2 3 4 5 6 7 8 9 10 Richiesta 160 217 230 250 270 20 99 111 130 141 Media Spost. 10 57 13 20 20 50 79 12 19 11 29.1 C-SCAN con Look # 1 2 3 4 5 6 7 8 9 10 Richiesta 160 217 230 250 270 20 99 111 130 141 Media Spost. 10 57 13 20 20 0 79 12 19 11 24.1 A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 8/13
Esercizio 3 - Memoria Virtuale Si consideri la seguente richiesta di pagine 3 1 2 3 4 1 2 3 4 5 3 1 2 1 4 Mostrare come vengono allocate le pagine virtuali da parte dei seguenti algoritmi di sostituzione: Ottimo FIFO LRU Seconda Chance Si ipotizzi che la dimensione della memoria sia di 3 pagine fisiche. Si valuti quanto la prestazione degli algoritmi in termini di numero di page fault. Si valuti inoltre quando la prestazione dei due algoritmi FIFO e LRU si discosta da quella ottima (in termini percentuali). OTTIMO 3 3 3 3 4 4 4 4 4 5 5 5 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 4 F F F F F F F F R 3 1 2 3 4 1 2 3 4 5 3 1 2 1 4 # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Page Fault: 8 Prime 3 richieste: La memoria è inizialmente vuota, quindi le pagine 3, 1 e 2 vengono caricate. Richiesta #4: La pagina 3 è già presente in memoria. Richiesta #5: La pagina 4 non è presente in memoria. Si deve eliminare la pagina che verrà chiesta più tardi. Dopo la 4, vengono chieste le pagine 1, 2, 3. Quindi quest'ultima è quella che viene eliminata. Richiesta #6: La pagina 1 è già presente in memoria. Richiesta #7: La pagina 2 è già presente in memoria. Richiesta #8: La pagina 3 non è presente in memoria. Di quelle presenti, quella che verrà richiesta più tardi è la 2 che viene sostituita. A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 9/13
Richiesta #9: La pagina 4 è presente in memoria. Richiesta #10: La pagina 5 non è presente in memoria. Di quelle presenti, quella che verrà richiesta più tardi è la 4 che viene sostituita. Richieste #11 e #12 : Le pagine 3 e 1 sono già presenti in memoria. Richiesta #13: La pagina 2 non è presente in memoria. Guardando alle successive richieste, osserviamo che delle tre pagine presenti soltanto la 1 verrà richiesta in seguito. Perciò possiamo scegliere indifferentemente di eliminare o la 5 o la 3. Scegliamo la prima. Richiesta #14: La pagina 1 è già presente in memoria. Richiesta #15: La pagina 4 non è presente in memoria. Decidiamo di eliminare la pagina 3. FIFO 3 3 3 3 4 4 4 4 4 4 4 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 5 5 5 5 5 4 F F F F F F F F F R 3 1 2 3 4 1 2 3 4 5 3 1 2 1 4 # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Page Fault: 9 + 12.5% rispetto all'ottimo LRU 3 3 3 3 3 3 2 2 2 5 5 5 2 2 2 1 1 1 4 4 4 3 3 3 3 3 3 3 4 2 2 2 1 1 1 4 4 4 1 1 1 1 F F F F F F F F F F F F R 3 1 2 3 4 1 2 3 4 5 3 1 2 1 4 # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Page Fault: 12 + 50% rispetto all'ottimo Seconda Chance (CLOCK) 3 3 3 3 4 4 4 4 4 4 4 1 1 1 1 A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 10/13
1 1 1 1 1 1 3 3 3 3 3 2 2 2 2 2 2 2 2 2 2 5 5 5 5 5 4 F F F F F F F F F R 3 1 2 3 4 1 2 3 4 5 3 1 2 1 4 # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Page Fault: 9 + 12.5% rispetto all'ottimo Prime tre richieste: le prime tre pagine vengono caricate in memoria con il corrispondente bit di riferimento settato a 1. Si tenga presente che nel caso in cui tutti i bit siano settati a 1 l'algoritmo Seconda Chance "degenera" in un algoritmo FIFO, dove la prima pagina ad essere eliminata è quella che per prima è stata caricata in memoria. Quindi la Next Victim in questo caso sarà la pagina 3. Lo stato della memoria dopo le prime 3 richieste sarà il seguente: Pagina 3 1 2 Reference Bit 1 1 1 Richiesta #4: Viene richiesta la pagina 3, che è già in memoria. Il reference bit della pagina 3 è già a 1 e quindi la situazione della memoria non cambia. Pagina 3 1 2 Reference Bit 1 1 1 Richiesta #5: Viene richiesta la pagina 4, che non è in memoria. La dovrebbe essere la pagina 3, il cui reference bit è però = 1. L'algoritmo mette a 0 il reference bit della pagina 3 e seleziona come la pagina 1. Anche questa ha il reference bit a 1: nuovamente, l'algoritmo mette il reference bit a 0 e passa alla pagina successiva. Anche la pagina 2 ha il reference bit a 1: viene settato a 0 e si passa alla pagina successiva. Dal momento che le pagine sono disposte in una coda circolare si torna alla pagina 3. A questo punto questa ha il reference bit a 0 e può essere sostituita. Si osservi come di fatto l'algoritmo si sia comportato come un algoritmo FIFO (tutte le pagine avevano R.B. a 1) Una volta che la pagina 4 è stata caricata, abbiamo la seguente situazione: Pagina 4 1 2 Reference Bit 1 0 0 A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 11/13
Richiesta #6: Viene richiesta la pagina 1, che è in memoria. Il reference bit della pagina viene impostato a 1. Pagina 4 1 2 Reference Bit 1 1 0 Richiesta #7: Viene richiesta la pagina 2, che è in memoria. Il reference bit della pagina viene impostato a 1. Pagina 4 1 2 Reference Bit 1 1 1 Richiesta #8: Viene richiesta la pagina 3, che non è in memoria. Dal momento che tutte le pagine hanno il reference bit a 1, il puntatore a Next Victim compie un giro completo della coda azzerando i reference bit per poi tornare alla pagina 1 che è quella che viene sostituita (di fatto era la più vecchia delle pagine presenti in memoria). Una volta che la richiesta della pagina 3 è stata soddisfatta, la situazione delle code è la seguente: Pagina 4 3 2 Reference Bit 0 1 0 Richiesta #9: Viene richiesta la pagina 4. La pagina è in memoria e il suo reference bit viene settato a 1. Pagina 4 3 2 Reference Bit 1 1 0 Richiesta #10: Viene richiesta la pagina 5 che non è in memoria. La pagina 2 è la Next Victim e dato che il suo reference bit è 0 viene sostituita. Pagina 4 3 5 Reference Bit 1 1 1 Richiesta #11: Viene richiesta la pagina 3, che è in memoria. La pagina ha già il reference bit a 1 per cui la situazione rimane immutata. A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 12/13
Pagina 4 3 5 Reference Bit 1 1 1 Richiesta #12: Viene richiesta la pagina 1 che non è in memoria. Tutte le pagine hanno il reference bit a 1 e quindi l'algoritmo percorre tutta la coda azzerando i reference bit. Torna infine alla pagina 4 e la sostituisce. Pagina 1 3 5 Reference Bit 1 0 0 Richiesta #13: Viene richiesta la pagina 2. La è la pagina 3, il cui reference bit è 0. La pagina viene sostituita e la diventa la pagina successiva. Pagina 1 2 5 Reference Bit 1 1 0 Richiesta #14: Viene richiesta la pagina 1, che è già in memoria con R.B. = 1. La situazione non cambia. Pagina 1 2 5 Reference Bit 1 1 0 Richiesta #15: Viene richiesta la pagina 4 che non è in memoria. La è la pagina 5 che viene eliminata dato che il suo R.B. è uguale a 0. Pagina 1 2 4 Reference Bit 1 1 1 A.A. 2010 2011 Sistemi Operativi Esercitazione 14/12/2010 13/13