Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D La Corte in Rete
 
Il Corso Le lezioni del Corso La Cattedra
 
Materiali di approfondimento Risorse Web Il Podcast di questa lezione

Antonino Mazzeo » 16.Esercitazione: Problema dei produttori e consumatori


Sommario

  • Definizione
  • Produttore / Consumatore con un unico buffer
  • Produttore / Consumatore con un pool di buffer
  • Produttore / Consumatore con una coda

Definizione

  • Due categorie di processi
    • Produttori, che scrivono un messaggio su di una risorsa condivisa
    • Consumatori, che prelevano il messaggio dalla risorsa condivisa
  • Vincoli
    • Il produttore non può produrre un messaggio prima che qualche consumatore abbia letto il messaggio precedente
    • Il consumatore non può prelevare alcun messaggio fino a che un produttore non l’abbia depositato

Prod-Cons con un unico buffer

  • I vincoli imposti da un problema di tipo Prod-Cons con buffer unico, con un solo produttore ed un solo consumatore, sono:
    • Il produttore non può produrre un messaggio se il consumatore non ha consumato il messaggio precedente
    • Il consumatore non può prelevare un messaggio se prima il produttore non l’ha depositato
  • Per la sincronizzazione dei processi produttore e consumatore si utilizzano due semafori
    • SPAZIO_DISP: semaforo bloccato da un produttore prima di una produzione sbloccato da un consumatore in seguito ad un consumo
    • MSG_DISP: semaforo sbloccato da un produttore in seguito ad una produzione e bloccato da un consumatore prima del consumo

Prod-Cons con un unico buffer

Prod-Cons con un unico buffer (codice)

Prod-Cons con un unico buffer (codice)


Prod-Cons con un pool di buffer

  • I vincoli imposti sono i seguenti:
    • Un produttore non può produrre un messaggio se il buffer è pieno
    • Un consumatore non può prelevare un messaggio se il buffer è vuoto
  • La gestione del pool di buffer avviene mediante due vettori:
    • buffer[DIM] – array di elementi di tipo contenente i valori prodotti
    • stato[DIM] – array di elementi di tipo intero. Il valore i-simo, stato[i], può assumere i seguenti tre valori: VUOTO, PIENO, IN_USO
  • Per la sincronizzazione dei processi sono utilizzati due mutex, MUTEXP e MUTEXC, al fine di gestire l’accesso al buffer in mutua esclusione e due semafori, PROD e CONS, per la sincronizzazione delle operazioni di produzione e consumo

Prod-Cons con una coda

  • La coda è implementata mediante i seguenti campi:
    • buffer[DIM] – array di elementi di tipo msg contenente i valori prodotti
    • testa – tipo intero. Si riferisce alla posizione del primo elemento libero in testa. L’elemento di testa è buffer[testa-1]
    • coda – tipo intero. L’elemento puntato si riferisce alla posizione dell’elemento di coda della coda. In altre parole l’elemento di coda è buffer[coda]
  • Per la sincronizzazione dei processi sono utilizzati due semafori, SPAZIO_DISP e NUM_MESS, che indicano rispettivamente la presenza di spazio disponibile in coda per la produzione di un messaggio e il numero di messaggi presenti in coda

Prossima lezione

Esercitazione: Problema dei lettori e degli scrittori

I materiali di supporto della lezione

Produttori e consumatori

  • Contenuti protetti da Creative Commons
  • Feed RSS
  • Condividi su FriendFeed
  • Condividi su Facebook
  • Segnala su Twitter
  • Condividi su LinkedIn
Progetto "Campus Virtuale" dell'Università degli Studi di Napoli Federico II, realizzato con il cofinanziamento dell'Unione europea. Asse V - Società dell'informazione - Obiettivo Operativo 5.1 e-Government ed e-Inclusion

Fatal error: Call to undefined function federicaDebug() in /usr/local/apache/htdocs/html/footer.php on line 93