Esercizio 1
Sia data la procedura swap cosi' definita:
proc swap(var x,var y)
var aux;
begin-atomic
aux := y;
y := x;
x := aux;
end-atomic
che scambia il contenuto di x e y in modo "atomico" cioe' senza possibili interferenze
dello scheduler.
E' possibile utilizzare questa funzione al posto, ad. es. della test&set, per assicurare la
proprieta' di mutua esclusione da una sezione critica?
Esercizio 2
Cosa il programma concorrente definito dal parallelo dei processi P e Q definiti di seguito?
semaphor s1:=0;
semaphor s2:=0;
P: process {
up(s1);
down(s2);
print P
down(s2);
print R
up(s1);
}
Q: process {
up(s2);
down(s1);
print A;
up(s2);
down(s1);
print I;
}
Esercizio 3
Si consideri la seguente soluzione al problema produttore-consumatore con buffer ad una posizione realizzata
con i seguenti semafori (realizzati con sleep/wakeup):
- Buffer_vuoto (inizializzato ad 1),
- Buffer_pieno (inizializzato a 0)
- Mutex (inizializzato ad 1)
Produttore:
While (True) {
Item = produce_item();
Down(&Buffer_Vuoto);
Down(&Mutex);
insert_item(item);
Up(&Mutex);
Up(&Buffer_Pieno);
}
Consumatore:
While (True) {
Down(&Buffer_Pieno);
Down(&Mutex);
item=remove_item();
Up(&Mutex);
Up(&Buffer_Vuoto);
consume_item(item);
}
Dire se tale soluzione è corretta se utilizzata da due thread user-level di uno stesso
processo e motivare la risposta
Esercizio 5
Provare che l'algoritmo del Fornaio (bakery) garantisce le proprieta' di mutua esclusione e progresso.
Piu' precisamente: provare che se il processo Pi e' nella critica e Pk (k=/=i) ha scelto il suo numero,
allora (number[i],i) < (number[k],k), e quindi studiare il caso in cui Pi e' nella regione critica e
Pk cerca di entrarvi.
Esercizio 6
Riformulare un "monitor" utilizzando i semafori nell'ipotesi che un processo che esegue un operazione di
signal si sospenda rilasciando il controllo del monitor (monitor alla Hoare).
Hint: introdurre un semaforo per
la mutua esclusione all'interno del monitor (i.e. per eseguire in mutua
esclusione le sue procedure) e semafori per le condizioni.