Difference between revisions of "ProvaTeorica 2012.02.09"

From Sistemi Operativi
Jump to navigation Jump to search
 
(2 intermediate revisions by one other user not shown)
Line 50: Line 50:
 
{
 
{
 
int processi=0;
 
int processi=0;
 +
        int inattesa=0 ;
 
condition oktoexit;
 
condition oktoexit;
  
Line 60: Line 61:
 
{
 
{
  
                 int inattesa=0 ;
+
                  
 
processi-- ;
 
processi-- ;
 
 
Line 67: Line 68:
 
    inattesa++ ;
 
    inattesa++ ;
 
                     oktoexit.wait();
 
                     oktoexit.wait();
                     inattesa=0;
+
                     inattesa--;
 
}
 
}
 
 
Line 78: Line 79:
  
  
 +
</syntaxhighlight>
 +
<syntaxhighlight lang="C">
 +
  monitor seq{
 +
condition ok2exit;
 +
int exit;
 +
seq(){
 +
count=exit=0
 +
}
 +
entry enter(){
 +
count++
 +
ok2exit.wait()
 +
if count >0:
 +
ok2exit.signal()
 +
 +
}
 +
entry exit(){
 +
exit++
 +
if exit==count:
 +
ok2exit.signal()
 +
}
 +
-AlbertoD
 
</syntaxhighlight>
 
</syntaxhighlight>

Latest revision as of 12:59, 2 September 2017

Esercizio 1

/*
Esercizio 1: Il monitor seq da implementare deve fornire due procedure entry:
procedure entry void enter(void);
procedure entry void exit(void);
I processi chiamano i servizi di seq come segue:
….
seq.enter();
// codice controllato da seq
seq.exit();
….
Tutti i processi che ne facciano rischiesta possono entrare nel codice controllato da seq contemporaneamente (questa 
NON e' una sezione critica!). Exit deve garantire che i processi escano dal codice controllato tutti insieme. Per 
esempio se tre processi a,b e c chiamano seq.enter ogni processo non potra' completare la exit se prima tutti gli altri 
due non hanno chiamato la exit. Se nel frattempo altri processi dovessero chiamare la seq.enter occorrera' attendere 
anche questi ultimi.
*/

monitor seq
{
	int processi=0;
	condition oktoexit;

	procedure entry enter()
	{
		processi++
	}

	procedure entry exit()
	{
		processi--
		oktoexit.signal();
		while(processi!=0)
		{
			oktoexit.wait();
		}
		
	}
}

-stefano92


monitor seq
{
	int processi=0;
        int inattesa=0 ;
	condition oktoexit;

	procedure entry enter()
	{
		processi++
	}

	procedure entry exit()
	{

                
		processi-- ;
		
		while(processi!=0)
		{
		    inattesa++ ;
                    oktoexit.wait();
                    inattesa--;
		}
		
                oktoexit.signal();
	}
}


Save
   monitor seq{
	condition ok2exit;
	int exit;
	seq(){
		count=exit=0
	}
	entry enter(){
		count++
		ok2exit.wait()
		if count >0:
			ok2exit.signal()
		
	}
	entry exit(){
		exit++
		if exit==count:
			ok2exit.signal()	
	}
-AlbertoD