Vai alla Home Page About me Courseware Federica Living Library Federica Federica Podstudio Virtual Campus 3D Le Miniguide all'orientamento Gli eBook di Federica La Corte in Rete
 
I corsi di Ingegneria
 
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