Difference between revisions of "ProvaPratica 2010.07.12"

From Sistemi Operativi
Jump to navigation Jump to search
(Created page with "<h1>http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf</h1> <syntaxhighlight lang="C"> monitor priocoop{ condition run[9]; int waiting[9]=0,0,0,0,0,0,0,0,0; int ma...")
 
Line 54: Line 54:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
Alessandro
 
Alessandro
 +
 +
 +
<syntaxhighlight lang="C">
 +
//Processo con prioritá 0 = Processo con piú alta prioritá
 +
//Processo con prioritá 9 = Processo con meno prioritá
 +
monitor priocoop {
 +
condition oktogo[10];
 +
int wait[10] = 0,0,0,0,0,0,0,0,0;
 +
int waits = 0;
 +
int running = 0;
 +
 +
priocoop.init(prio) {
 +
if(running != 0 || waits !=0 ) {
 +
wait[prio]++;
 +
waits++;
 +
oktogo[prio].wait;
 +
waits--;
 +
wait[prio]--;
 +
}
 +
 +
running++;
 +
}
 +
 +
priocoop.yield(prio) {
 +
running--;
 +
if(waits != 0) {
 +
for(int i = 0;i<10;i++) {
 +
if(wait[i] != 0) {
 +
oktogo[i].signal();
 +
wait[prio]++;
 +
waits++;
 +
oktogo[prio].wait;
 +
waits--;
 +
wait[prio]--;
 +
break();
 +
}
 +
}
 +
}
 +
running++;
 +
}
 +
 +
priocoop.fini() {
 +
running--;
 +
if(waits != 0) {
 +
for(int i = 0;i<10;i++) {
 +
if(wait[i] != 0) {
 +
oktogo[i].signal();
 +
break();
 +
}
 +
}
 +
}
 +
}
 +
}
 +
</syntaxhighlight>
 +
-Midolo

Revision as of 10:59, 1 April 2014

http://www.cs.unibo.it/~renzo/so/compiti/2010-07-12.tot.pdf


monitor priocoop{
condition run[9];
int waiting[9]=0,0,0,0,0,0,0,0,0;
int maxprio=0;
int occupato=0;

procedure entry init(prio){	
	if(occupato==1)
	{
		if(maxprio < prio)
		{
		maxprio=prio;
		}
	waiting[prio]++;			
	run[prio].wait();
	waiting[prio]--;
	}
occupato=1;
}

procedure entry yield(prio){
run[maxprio].signal();
        if(maxprio < prio)
	{
	maxprio=prio;
	}
waiting[prio]++;
run[prio].wait();
waiting[prio]--;
}

procedure entry fini(prio){
int i;
occupato=0;
waiting[prio]--;
	if(waiting[maxprio] == 0)
	{
	maxprio=0;
		for(i=prio;i>=0;i--)
		{
			if(waiting[i]!=0)
			{
			maxprio=0;
			}
		}		
	run[maxprio].signal();
	}
}

Alessandro


//Processo con prioritá 0 = Processo con piú alta prioritá
//Processo con prioritá 9 = Processo con meno prioritá
monitor priocoop {
	condition oktogo[10];
	int wait[10] = 0,0,0,0,0,0,0,0,0;
	int waits = 0;
	int running = 0;

	priocoop.init(prio) {
		if(running != 0 || waits !=0 ) {
			wait[prio]++;
			waits++;
			oktogo[prio].wait;
			waits--;
			wait[prio]--;
		}

		running++;
	}

	priocoop.yield(prio) {
		running--;
		if(waits != 0) {
			for(int i = 0;i<10;i++) {
				if(wait[i] != 0) {
					oktogo[i].signal();
					wait[prio]++;
					waits++;
					oktogo[prio].wait;
					waits--;
					wait[prio]--;
					break();
				}
			}
		}
		running++;
	}

	priocoop.fini() {
		running--;
		if(waits != 0) {
			for(int i = 0;i<10;i++) {
				if(wait[i] != 0) {
					oktogo[i].signal();
					break();
				}
			}
		}
	}
}

-Midolo