Author: Valued Acer Customer

Compito di Sistemi Operativi
17 Novembre 2010

Esercizio 1 (8 punti)
Si consideri un sistema nel quale sono definiti il semaforo sem e i processi P_1 (con priorità 1), P_2 (con priorità 1) e P_3 (con priorità 2). Lo scheduling avviene con una politica a priorità, che prevede il prerilascio e assegna il processore al processo pronto di priorità più elevata (a pari priorità applica la politica FIFO). La politica applicata al semaforo è la FIFO. Al tempo t il processo P_1 è in esecuzione e il processo P_2 è pronto; inoltre il semaforo sem ha valore 0 e la sua coda contiene P_3. Dopo il tempo t si verifica la seguente sequenza di eventi: 
1)	P_1 esegue wait(sem);
2)	il processo in esecuzione esegue signal(sem); 
3)	il processo in esecuzione esegue wait (sem); 
4)	il processo in esecuzione esegue signal(sem).
Si specifichi quale processo è in esecuzione dopo ogni evento e come si modificano il valore e la coda del semaforo sem e la ready queue. 

Esercizio 2 (6 punti)
Dati tre processi, A, B, C, che osservano il paradigma di “possesso e attesa” e tre risorse singole Q, R, S, utilizzabili in mutua esclusione e senza possibilità di prerilascio, supponiamo che il gestore assegni le risorse al processo richiedente alla sola condizione che la risorsa sia disponibile. Inizialmente tutte le risorse sono disponibili. Si considerino le seguenti sequenze di richieste e rilasci: 
 
Sequenza S_1 | Sequenza S_2
A richiede Q | A richiede R
C richiede S | B richiede Q
C richiede Q | C richiede S
B richiede R | C richiede R
B richiede S | A richiede Q
A rilascia Q | B rilascia Q
A richiede S | B richiede S
C richiede R | A rilascia R
 
Le due sequenze illustrate provocano stallo? Motivare le risposte rappresentando tramite grafo di assegnazione lo stato (assegnazioni e richieste pendenti) al termine di ciascuna sequenza. 

Esercizio 3 (6 punti)
Si consideri la seguente situazione:

P_1 					P_2
 		…					…
		…					…
  		wait(s1); 				wait(s1); 		valore iniziale s1=1
 		<S1>;  				<S2>;
wait(s1); 				signal(s1);

in cui per errore è stato scritto wait(s1) al posto di signal(s1) nel processo P_1. Come si comportano i due processi, indipendentemente dalla loro velocità relativa?

Esercizio 4 (4 punti)
In un sistema UNIX, la memoria virtuale di ogni processo comprende i segmenti codice, dati e pila. Il caricamento nella memoria fisica avviene con la tecnica delle partizioni variabili. Il processo Proc_K, che  occupa le partizioni di origine 21300, 40500 e 62000 con lunghezze 10000, 7000 e 2000 rispettivamente per il codice, i dati e la pila, esegue la chiamata di sistema fork()  che genera il processo  Proc_J.  I dati e la pila del processo Proc_J sono caricati rispettivamente a partire dagli indirizzi 70000 e 77000. Si descrivano i contenuti dei registri base e limite dei segmenti codice, dati e pila durante l’esecuzione dei processi Proc_K e Proc_J.

Esercizio 5 (12 punti)