Febbraio 14 R
Febbraio 14 R
tutti i fogli. Motivare sempre le risposte date. Non e’ necessario dare risposte molto
lunghe, ma e’ importante rispondere in modo motivato ed esauriente alle domande poste
(in altre parole, molto meglio una frase in piu’ che una in meno).
Esplicitate i calcoli che fate, quando possibile. Cioe’ non dare risposte secche (tipo
“falso”, o “14”) ma spiegate perche’ siete arrivati al risultato (potranno essere tolti punti
in caso contrario).
Esercizio 3 Descrivere le azioni che un sistema operativo deve fare per effettuare un
context switch tra 2 processi.
Esercizio 5 La soluzione del problema dei lettori e scrittori vista a lezione garantisce
l assenza di starvation?
Risposta(Sketch) No, infatti un qualsiasi processo scrittore potrebbe dover attendere
all infinito senza riuscire ad entrare in sezione critica. Al contrario i processi lettori
sono liberi da starvation (in altre parole, non è garantita l attesa limitata)
1
Esercizio 6 Elencate quali tecniche usa un sistema operativo, in collaborazione con
l’hardware del processore, per proteggersi da funzionamenti impropri (accidentali o
voluti) dei programmi utente.
Risposta(Sketch) (1) Uso di una doppia modalità di esecuzione delle istruzioni, per
cui le istruzioni "delicate" possono essere eseguit e solo per conto del sistema operativo.
2) uso di un timer hardware che puo’ essere inizializzato solo dal SO e allo scadere del
quale il controllo della macchina torna al SO (3) uso di tecniche per limitare le aree
della RAM a cui possono accedere i program mi utente: coppia di registri base/limit, o
base/offset, o paginazione della memoria.
2
Esercizio 9 Si consideri il problema dei lettori e scrittori visto a lezione, dove i codici
del generico scrittore e del generico lettore sono riportati qui di seguito. Inserite le
operazioni di decremento/incremento (dette anche wait e signal, oppure P e V) su
semaforo mancanti necessarie per il corretto funzionamento del sistema, indicando anche
il semaforo mancante. Ricordarsi dei valori di inizializzazione. Come per tutte le
risposte, motivate brevemente anche le aggiunte fatte.
scrittore {
lettore {
numlettori++;
if numlettori == 1 ;
... leggi il file ...
numlettori--;
if numlettori == 0 ;
Risposta(Sketch)
semafori e variabili condivise necessarie
semaphore mutex = 1;
semaphore write = 1;
int numlettori = 0;
scrittore {
wait(scrivi);
...Esegui la scrittura del file ...
signal(scrivi) }
lettore {
wait(mutex);
numlettori++;
if numlettori == 1 wait(scrivi);
signal(mutex);
... leggi il file ...
wait(mutex);
numlettori--;
if numlettori == 0 signal(scrivi);
signal(mutex);