Difference between revisions of "Prova teorica 2014.07.16"

From Sistemi Operativi
Jump to navigation Jump to search
(Created page with "Testo: [http://www.cs.unibo.it/~renzo/so/compiti/2014.07.16.tot.pdf] == Esercizio c.1 == <syntaxhighlight lang="C"> /* * Esercizio c.1: scrivere il monitor mMbb che realizz...")
 
Line 51: Line 51:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
[[User:S.G|S.G]] ([[User talk:S.G|talk]]) 17:21, 2 December 2016 (CET)
 
[[User:S.G|S.G]] ([[User talk:S.G|talk]]) 17:21, 2 December 2016 (CET)
 +
 +
Non &egrave; fifo. Perch&eacute;? [[User:Renzo|Renzo]] ([[User talk:Renzo|talk]]) 07:43, 3 December 2016 (CET)

Revision as of 07:43, 3 December 2016

Testo: [1]

Esercizio c.1

/*
 * Esercizio c.1: scrivere il monitor mMbb che realizzi un meccanismo di un minmax bounded buffer.
 * Dopo le prime MIN operazioni di scrittura, un minmax bounded buffer deve sempre avere almeno MIN elementi e mai piu' di MAX
 * elementi (e' quindi limitato sia nell'ampiezza massima, sia nell'ampiezza minima).
 * Le funzioni (procedure entry) read e write del minmax bounded buffer hanno gli stessi argomenti e valori di ritorno di quelle del
 * producer/consumer o del bounded buffer ordinario.
 */
#define MIN
#define MAX
#define SIZE // con SIZE >= MAX

monitor mMbb{
	
	generic_type bb[];
	int front, rear, count;
	condition R, W;
	
	void mMbb(void){
		bb = new generic_type[SIZE];
		front = rear = count = 0;
	}
	
	procedure_entry generic_type read(){
		while(count < MIN)	// Controllo che il buffer abbia MIN elementi per poter leggere
			R.wait();
		
		generic_type ret = bb[rear];
		count--;
		rear = (rear + 1) % SIZE;
		W.signal();
		return ret;
	}
	
	procedure_entry write(generic_type c){
		while(count >= MAX)	// Controllo che il buffer non abbia MAX elementi per poter scrivere
			W.wait();
		
		bb[front] = c;
		count++;
		front = (front + 1) % SIZE;
		R.signal();	
	}
	
}

S.G (talk) 17:21, 2 December 2016 (CET)

Non è fifo. Perché? Renzo (talk) 07:43, 3 December 2016 (CET)