Prova Teorica 2007.07.12

From Sistemi Operativi
Jump to navigation Jump to search

TESTO COMPITO

CONCORRENZA

Esercizio 1

monitor oca
{
	condition player[N];
	int playerPosition[N] = { 0, ..., 0 };
	bool winner = false;
	bool blocked[N] = { false, ..., false };
	int turn = 0;
	blockedPlayer = {} // Python-like dictionary

	muovi(i, n)
	{
		if (winner)
			return 2;

		if (i != turn)
			player[i].wait();

		if (winner)
			return 2;

		playerPosition[i] += n;
		if (playerPosition[i] >= 99)
		{
			winner = true;
			for (int j = 0; j < i; j++)
					player[j].signal();
			for (int j = i + 1; j < N; j++)
					player[j].signal();				
			return 1;
		}

		if (isMultiple13(playerPosition[i]))
		{
			if (blockedPlayer[playerPosition[i]])
				blocked[blockedPlayer[playerPosition[i]]] = false;
			blocked[i] = true;
			blockedPlayer[playerPosition[i]] = i;
		}

		turn = (i + 1) % N;
		while (blocked[turn])
			turn = (turn + 1) % N;

		player[turn].signal();
		return 0;
	}
}

/*
	In una situazione ideale, il giocatore (n), terminata la giocata, segnala il giocatore (n + 1) e termina.
	Solo dopo che il giocatore (n) ha terminato, il giocatore (n + 1) inizia la sua giocata.
	Questa situazione ideale e' descrivibile mediante la politica Signal And Continue.
	Con Signal Urgent, di converso, il giocatore (n) non termina l'esecuzione della procedure entry
	fino a quando non la termina il giocatore (n + 1). Il giocatore (n + 1) non la termina fino a quando
	non termina il giocatore (n + 2) et cetera.
	Questo meccanismo dello Urgent Stack risulta inutilmente dispendioso in questa fattispecie.
*/

Esercizio 2

adoublesend(msg, dst1, dst2)
{
	asend(msg, dst1);
	arecv(dst1);
	asend(msg, dst2);
}

adoublerecv(sender)
{
	output = arecv(sender);
	asend(OK, sender);
	return output;
}

GENERALE

Esercizio 2


Max Allocated Need Available Safeness Conditions

A B A B A B A B
P2 5 10 3 5 2 5 3 4+x x>=1
P1 6 5 0 3+x 6 y 6 9+x x=2-y
P3 7 7 1 5 6+y 2 6 12+2x y=0
P4 7+x+z 8+w x+z z 7 8+z 7 17+2x w=2z, 8+z<=17+2x
Range CI: from 6 15



<=> y=0, x=2, w=2z, z<=13


to 19 28






step 1 1