Difference between revisions of "ProvaTeoria 2012.01.12"

From Sistemi Operativi
Jump to navigation Jump to search
(Created page with "=[http://www.cs.unibo.it/~renzo/so/compiti/2012-01-12.tot.pdf TESTO COMPITO]= ==Esercizio 1== <syntaxhighlight lang="C"> monitor seq { condition* c=List() int* procstack=St...")
 
Line 5: Line 5:
 
monitor seq
 
monitor seq
 
{
 
{
condition* c=List()
+
condition* c=List() /*lista di condizioni, una per ogni processo arrivato*/
int* procstack=Stack();
+
int* procstack=Stack(); /*stack di processi per l'uscita LIFO*/
 
 
 
procedure entry enter()
 
procedure entry enter()
Line 15: Line 15:
 
procedure entry exit()
 
procedure entry exit()
 
{
 
{
if (procstack.Top()!=this->p_id){
+
if (procstack.Top()!=this->p_id){ /*cioè se il processo non è in cima allo stack*/
 
List.insert(this->p_id);
 
List.insert(this->p_id);
(List.search(this->p_id)).wait();
+
(List.search(this->p_id)).wait(); /*aggiungo il mio p_id alla lista di condizioni e mi metto in wait*/
 
}
 
}
 
List.remove(this->p_id);
 
List.remove(this->p_id);

Revision as of 10:51, 30 April 2014

TESTO COMPITO

Esercizio 1

monitor seq
{
	condition* c=List() /*lista di condizioni, una per ogni processo arrivato*/
	int* procstack=Stack(); /*stack di processi per l'uscita LIFO*/
	
	procedure entry enter()
	{
		procstack.push(this->p_id);
	}
	
	procedure entry exit()
	{
		if (procstack.Top()!=this->p_id){ /*cioè se il processo non è in cima allo stack*/
			List.insert(this->p_id);
			(List.search(this->p_id)).wait(); /*aggiungo il mio p_id alla lista di condizioni e mi metto in wait*/
			}
		List.remove(this->p_id);
		procstack.Pop();
		List.search(procstack.Top()).signal();
	}
}

NOTA: Con questa soluzione se l'ultimo processo chiama la exit e ci sono altri processi in coda, gli altri processi usciranno prima che l'ultimo esca dallo urgent stack per uscire a sua volta, quindi non credo che rispetti la traccia. Però non ho trovato un'altra soluzione XD -stefano92