ESERCIZIO 1 Si consideri un hard disk formattato la cui memoria è suddivisa in 16 blocchi (numerati da 0 a 15). Si supponga che sull hard disk sia memorizzato un unico file, contenuto, nell ordine, nei blocchi numero 1,, e 5. (il primo blocco del file è il blocco 1, e l ultimo è il blocco 5). (a) Si disegni la FAT associata all hard disk, supponendo che i blocchi liberi siano indicati con il numero e i blocchi di fine file con il numero 1. 5-1 0 1 3 4 5 6 8 9 10 11 1 13 14 15 1 ESERCIZIO 1 (b) Dove è memorizzato il numero del primo blocco del file? Insieme agli altri attributi del file, nella cartella che contiene il file. (c) Qual è la frammentazione minima, massima e media dovuta alla memorizzazione del file, supponendo blocchi da 51 byte? Minima = 0 byte; massima = 511 byte; media = 56 byte. (d) Si tratta di frammentazione interna o esterna? interna (e) Di quale tipo di allocazione della memoria secondaria, la FAT è la naturale implementazione efficiente? Allocazione concatenata
ESERCIZIO 1 (f) Quante operazioni di I/O su disco sono necessarie per cancellare il terzo blocco del file se la FAT è presente? (Motivate la vostra risposta) Zero (oppure 1, se si considera anche il salvataggio su disco della FAT aggiornata). (g) E se la FAT non è presente, e si usa l allocazione dello spazio su disco a cui fa riferimento la domanda (e)? (Motivate la vostra risposta) Quattro, se si suppone una allocazione concatenata semplice e se il numero del primo blocco del file è già in RAM: lettura dei blocchi 1,,, (per sapere quale blocco viene dopo il ) riscrittura del blocco aggiornato. 3 ESERCIZIO Si consideri un sistema in cui la tabella delle pagine di un processo può avere al massimo 18 entry. Un indirizzo fisico generato dal sistema è scritto su 1 bit, e la RAM è suddivisa in 8 frame. (a) Quanto è grande lo spazio di indirizzamento logico del sistema? 64KByte (18 x ^9 byte). (b) Quale/quali dei seguenti indirizzi esadecimali NON è certamente un indirizzo logico corretto per il sistema sopra descritto? (tutti gli indirizzi più grandi di ^16, che è la dimensione dello spazio di indirizzamento logico, ossia gli indirizzi che non possono essere scritti usando al più 16 bit). [ ] 0FAB [X] F05DE [ ] F [X] 11111 4
ESERCIZIO (c) La tabella delle pagine di un processo di questo sistema, potrebbe dover essere a sua volta paginata? (motivate la vostra risposta) No. Infatti, la tabella delle pagine di un processo ha al massimo 18 entry. Ogni entry deve contenere il numero di un frame, che è scritto su 3 bit. Se anche si usa un byte per ogni entry, in tutto la tabella occupa 18 byte. Poiché un frame è grande 51 byte, la tabella in questione può essere contenuta in un unico frame, e non deve essere paginata a sua volta. (d) Che cos è la tabella delle pagine di un processo? E un array in cui ogni entry corrisponde ad una delle pagine in cui è stata suddivisa l immagine del processo, e contiene il numero del frame in RAM nel quale è stata memorizzata la pagina corrispondente. 5 ESERCIZIO 3 Un processo produce la seguente stringa di riferimenti: 1 3 4 1 5 1 3 (a) Riportate la sequenza di pagine memorizzate nei frame ad ogni riferimento, e il numero di page fault generati, nel caso di algoritmo LRU con paginazione su richiesta pura, nel caso di 4 frame disponibili. 1 1 13 134 134 134 154 154 154 153 (b) Che cos è una pagina vittima? Nei sistemi che implementano la memoria virtuale, è una pagina in memoria primaria che è stata selezionata dal sistema operativo per essere rimossa in modo da far posto ad una pagina mancante e che ha generato un page fault 6
ESERCIZIO 3 (c) Che cos è il fenomeno del trashing? Nei sistemi che implementano la memoria virtuale, è un fenomeno per il quale i processi passano la maggior parte del loro tempo generando page fault e aspettando che la pagina mancante sia stata caricata in memoria primaria per poter ripartire. ESERCIZIO 4 Shared Var semaphore mutex = 1; semaphore done = 0; P A : P B : P C : repeat: repeat: repeat: wait(mutex) wait(done) wait(done) <A> wait(mutex) wait(done) signal(mutex) <B> wait(mutex) signal(done) signal(mutex) <C> signal(done) signal(mutex) [X] A,B,A,B,C,A,A,C,A [ ] A,B,A,A,B,C,C,A,A [X] A,A,C,A,B,A,B,B,A [ ] A,B,A,C,B,A,B,A,B 8
ESERCIZIO 4 (b) quali, tra le quattro sequenze indicate sono invece possibili se il semaforo mutex è inizializzato a 0, e il semaforo done è inizializzato a 1? (motivate la vostra risposta) Ovviamente nessuna, dato che il semaforo di mutua esclusione è inizializzato a 0, e tutti i processi si bloccano all esecuzione della prima wait(mutex). 9 ESERCIZIO 4 (c) Riportate un semplice esempio in pseudo-codice (simile a quello usato per la prima parte di questa domanda) di due processi concorrenti che usano uno o più semafori per sincronizzarsi e che, a seconda dell ordine relativo in cui vengono eseguite le istruzioni dei due processi, può portare in una situazione di deadlock. Indicate anche come devono essere inizializzati i semafori che usate. P1 wait(mutex1) wait(mutex) sez. critica signal(mutex) signal(mutex1) P wait(mutex) wait(mutex1) sez. critica signal(mutex1) signal(mutex) semaphore mutex1 = 1; semaphore mutex = 1; 10
ESERCIZIO 5 Quattro processi arrivano al tempo indicato e consumano la quantità di CPU indicata nella tabella sottostante) processo P1 P P3 P4 T. di arrivo 0 6 burst 6 1 Calcolare il turnaround medio e il waiting time medio per i processi nel caso dell algoritmo di scheduling SJF preemtpive, riportando anche il diagramma di Gantt corrispondente P1 () P3 (4) P1 () P4 (8) P1 (10) P (16) turnaround: P1=10; P=14; P3=; P4=1 turnaround medio = /4 waiting time: P1=3; P=8; P3=0; P4=0 waiting time medio = 11/4 11 ESERCIZIO 5 (b) L algoritmo SJF preemptive garantisce che un processo che arriva in coda di ready riuscirà prima o poi ad usare la CPU? (motivate la vostra risposta) No, poiché potrebbe sempre arrivare in coda di Ready in processo con un burst time più piccolo di un processo già in coda che attende di essere selezionato dallo scheduler (c) Riportare il diagramma di stato della vita di un processo. (d) E vero o falso che un processo può uscire volontariamente dallo stato di Ready? (motivate la vostra risposta) Falso. Un processo in stato di Ready non è in esecuzione, e quindi può cambiare stato (passando allo stato Running ) solo se selezionato dallo scheduler. 1