SISTEMI OPERATIVI E LABORATORIO (Indirizzo Sistemi e Reti)
4 dicembre 2008
Cognome:____________________________________Nome:____________________________
Matricola:___________________________________________
Ricordate che non potete usare calcolatrici o appunti. Siate sintetici nelle vostre risposte, anche quando è richiesto di motivarle, sono sufficienti poche righe per rispondere correttamente. A fianco di ogni esercizio è riportato il numero di punti che prendete se lo svolgete in modo completamente corretto.
ESERCIZIO 1 (7 punti)
a) Riportate lo pseudocodice che descrive l’implementazione delle operazioni di Wait e Signal.
Dite che cosa fanno le system call usate nel codice.
Si vedano i lucidi della sezione 6.5.2
b) Riportate in pseudocodice un semplice esempio di due processi che si sincronizzano fra loro, e che, a seconda dell’ordine con cui usano la cpu, possono o meno entrare in una situazione di deadlock. Riportate anche il valore di inizializzazione del o dei semafori usatiò
Si veda ad esempio l’esempio riportato nei lucidi della sezione 6.5.3
c) Quali informazioni ci può dare il valore corrente di una variabile semaforica?
Se la variabile è negativa, il suo valore assoluto ci dice quanti processi sono sospesi su quel semaforo.
Se la variabile è positiva, ci dice quanti processi possono “superare” il semaforo senza essere sospesi sul semaforo stesso.
ESERCIZIO 2 (7 punti)
All’atto dell’installazione di un SO su una macchina, è possibile scegliere se usare pagine grandi 212 byte oppure grandi 222 byte. La dimensione dello spazio di indirizzamento logico rimane comunque la stessa. La macchina su cui viene installato il SO usa 32 bit per scrivere un indirizzo fisico, e lo spazio di indirizzamento fisico è 4 volte più piccolo dello spazio di indirizzamento logico (nel seguito, motivate tutte le risposte che date, esplicitando tutti i calcoli ed eventuali assunzioni fatte).
a) Nel caso di pagine da 222 byte, quanto può essere grossa, al massimo, la page table di un processo?
Si osservi innanzi tutto che lo spazio di indirizzamento logico è pari a 234 byte.
Una page table può avere al massimo 234 / 222 entry, mentre il numero massimo di frame del sistema è pari a 232 / 222 = 210. Quindi, abbiamo bisogno di 10 bit per scrivere il numero di un frame. Se per semplicità assumiamo che si usino due byte per ciascuna entry di una page table, la sua dimensione massima sarà di di 2* 234 / 222 = 213 byte = 8 Kbyte
b) Se le pagine sono grandi 222, il sistema potrebbe dover usare una paginazione a più livelli? E se invece sono grandi 212 byte?
pagine da 222 byte: dalla domanda precedente sappiamo che la PT di un processo può essere grande al massimo 8 kbyte, e può quindi sicuramente essere contenuta in un’unica pagina. Non è necessaria la paginazione su più livelli.
pagine da 212 byte: una page table può avere fino a 222 entry. Lo spazio di indirizzamento fisico è suddiviso in 232 / 212 = 220 frame, e 3 byte sono sufficienti per scrivere il numero di un qualsiasi frame. Al massimo una page table occupa quindi 3 * 222 byte = pari a circa 12 Mbyte. Poiché un frame è molto più piccolo, la paginazione su più livelli potrebbe essere necessaria.
c) se il sistema adotta una paginazione su più livelli, i programmi gireranno in media più o meno velocemente che nel caso in cui venisse adottata una paginazione ad un solo livello?
Meno velocemente, perché in caso di TLB miss occorre accedere più volte alla RAM per tradurre un indirizzo logico in uno fisico. Se però la maggior parte dei processi può essere contenuta in un unico frame, allora è anche possibile che il numero di TLB miss diminuisca drasticamente, aumentando così le prestazioni.