ProvaTeoria 2010.05.12

From Sistemi Operativi
Jump to navigation Jump to search

TESTO COMPITO

Esercizio 1

/*
Esercizio 1: Due nazioni limitrofe che chiameremo 0 e 1 hanno stabilito un numero massimo MAXIMM di immigrati che 
soggiornano nell'altra nazione.
Quando un cittadino di una nazione vuole andare nell'altra, alla frontiera di rivolge agli ufficiali di immigrazione dell'altra 
nazione e viene posto in attesa se il numero massimo di immigrati e' stato gia' raggiunto in una delle due nazioni.
Pertanto il cittadino di 0 che vuole andare in 1 viene messo in stato di attesa sia se ci sono gia' MAXIMM cittadini di 0 in 1 
sia se ci sono MAXIMM cittadini di 1 in 0.
La “vita” dei cittadini e' quindi:
cittadinoi, j
,i∈{0,1} , j∈1,... , Ncittadinii
:
 while(1) {
 immigration01.emigrate(i); ….
 immigration01.returnhome(i); ….
 }
Il problema (non la soluzione) presenta problemi di deadlock o di starvation?
Scrivere il monitor immigration01 con due procedure entry emigrate(int citizenship) e returnhome(int citizenship).
(il parametro e' la propria cittadinanza, I cittadini di 0 mettono 0 come parametro e quindi vogliono andare in 1, e 
viceversa).
La soluzione chiaramente non deve inserire problemi di deadlock o di starvation che non siano propri del problema.
*/


monitor immigration01
{
	int ImmIn[i]; /*i=0,1*/
	condition oktopass; 
	procedure entry emigrate(int i)
	
	{
		if (ImmIn[!i]==MAXIMM || ImmIn[i]==MAXIMM)
			oktopass.wait();
		ImmIn[!i]++;
	}
	
	procedure entry returnhome(int i)
	{
		ImmIn[!i]--;
		if (ImmIn[i]<MAXIMM)
			oktopass.signal();
	}
}

-stefano92

NOTA: Dalla traccia mi è sembrato di capire che quando un cittadino della nazione i vuole tornare a casa non c'è bisogno di controllare che il numero di immigrati delle due nazioni sia minore di MAXIMM. Infatti si precisa che quel controllo va fatto solo per cittadini di una nazione che vogliano andare nell'altra. Però non sono sicuro di aver interpretato in maniera corretta. Basandomi su questa assunzione, inoltre, credo che non possano esserci né deadlock né starvation, ma al massimo un'attesa inutile da parte degli emigranti di una nazione che devono aspettare che la propria soglia di immigrati diminuisca prima di emigrare.