Estratto del documento

Problema dei produttori e dei consumatori

• Il problema dei produttori e dei consumatori appartiene alla categoria di problemi nei quali l’esecuzione di un processo dipende dall’esecuzione di un altro, per cui è necessaria una comunicazione asincrona tra i due processi.

Due categorie di processi

  • Produttori, che scrivono su di una risorsa condivisa
  • Consumatori, che leggono e azzerano la risorsa condivisa

Vincoli del problema

  1. Il produttore non può produrre un messaggio prima che qualche consumatore abbia letto il messaggio precedente.
  2. Il consumatore non può prelevare alcun messaggio fino a che un produttore non l’abbia depositato.

Nel caso più generale i messaggi sono depositati in un buffer di lunghezza N:

  1. Il produttore non può produrre un messaggio se il buffer è pieno.
  2. Il consumatore non può prelevare messaggi se il buffer è vuoto.

Una semplice soluzione

• Il buffer è una risorsa condivisa tra i processi (ad esempio un segmento di memoria condivisa), gestita come una coda.

  • L’accesso dei produttori è regolato dal semaforo N-ario spazio_disponibile.
  • L’accesso dei consumatori è regolato dal semaforo N-ario messaggio_disponibile.

semaforo messaggio_disponibile=0; semaforo spazio_disponibile = N; queue_message coda;

void invio (messaggio m) {

  • wait (spazio_disponibile);
  • accoda il messaggio m;
  • signal (messaggio_disponibile);

messaggio ricezione() {

  • messaggio m;
  • wait (messaggio_disponibile);
  • m = preleva primo messaggio in coda;
  • signal (spazio_disponibile);
  • return m;

Problemi di questa soluzione

• Ogni processo impegna il buffer in tutta la durata della produzione/consumazione ⇒ non è possibile alcun parallelismo tra i produttori (consumatori) ⇒ non è possibile distinguere tra richiesta, uso e rilascio della risorsa buffer.

Una seconda soluzione

semaforo messaggio_disponibile=0; semaforo spazio_disponibile = N; semaforo mutex_prod=1; semaforo mutex_cons=1; messaggio buffer[N]; int testa, coda;

void invio (messaggio m) {

  • wait (spazio_disponibile);
  • wait(mutex_prod);
  • buffer[coda]=m;
  • coda=(coda++)mod N;
  • signal(mutex_prod);
  • signal (messaggio_disponibile);

messaggio ricezione() {

  • messaggio m;
  • wait (messaggio_disponibile);
  • wait(mutex_cons);
  • m = buffer[testa];
  • testa= (testa++) mod N;
  • signal(mutex_cons);
  • signal (spazio_disponibile);
  • return m;
Anteprima
Vedrai una selezione di 5 pagine su 20
Sistemi operativi - Problema dei produttori e dei consumatori Pag. 1 Sistemi operativi - Problema dei produttori e dei consumatori Pag. 2
Anteprima di 5 pagg. su 20.
Scarica il documento per vederlo tutto.
Sistemi operativi - Problema dei produttori e dei consumatori Pag. 6
Anteprima di 5 pagg. su 20.
Scarica il documento per vederlo tutto.
Sistemi operativi - Problema dei produttori e dei consumatori Pag. 11
Anteprima di 5 pagg. su 20.
Scarica il documento per vederlo tutto.
Sistemi operativi - Problema dei produttori e dei consumatori Pag. 16
1 su 20
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Menzo di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Cotroneo Domenico.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community