ghemon_2002
14-09-2011, 00:00
Qualcuno sa aiutarmi con questi due esercizi?
1
Si consideri il seguente problema di sincronizzazione tra processi formato da un processo produttore P e da due
processi consumatore C1 e C2, che condividono un’area di memoria (buffer) con 10 locazioni.
Il processo produttore P genera ciclicamente un numero intero arbitrario e lo aggiunge al buffer di memoria
condivisa. Il processo P si pone in attesa quando tenta di accedere al buffer pieno.
Il processo C1 (C2) consuma ciclicamente un elemento del buffer. Il processo C1 (C2) può accedere al buffer
solo se il buffer stesso non è vuoto, e può consumare un elemento del buffer solo se il numero attuale di
elementi nel buffer stesso è dispari (pari).
Si proponga una soluzione con semafori al problema di sincronizzazione proposto. Si richiede la descrizione dei
dati condivisi, lo pseudocodice delle procedure Produttore() e Consumatore1() e una discussione sulle eventuali
differenze tra Consumatore2() e Consumatore1(). Si assuma l’esistenza delle procedure Genera(),
Aggiungi_Al_Buffer(int x), Estrai_Dal_Buffer(), Consuma(int x), e Consuma_Buffer() con gli ovvi significati.
2
Si consideri il seguente problema di sincronizzazione tra processi denominato problema multi-produttore/consumatore
con memoria condivisa a buffer limitato:
Sia dato un sistema di processi concorrenti composto da n>10 processi produttori P1, P2, …, Pn, e da un
processo consumatore C, che condividono un’area di memoria con 10 locazioni.
Il generico processo produttore Pi genera un numero intero arbitrario e lo deposita nel buffer di memoria
condivisa. Se Pi tenta di accedere al buffer quando quest’ultimo è pieno, allora Pi stampa tutto il contenuto del
buffer e si pone in attesa.
Il processo C consuma ciclicamente un elemento del buffer al quale può accedere solo quando il buffer stesso
non è vuoto.
Si proponga una soluzione con semafori al problema del multi-produttore/consumatore. Si richiede una descrizione
accurata dei dati e lo pseudocodice delle procedure Produci(), usata dal generico produttore per generare e depositare
un numero nel buffer (non si fanno ipotesi sulla frequenza di chiamata di Produci da parte di un produttore) e
Consumatore(). Si assuma l’esistenza delle procedure Genera(), Consuma(int x), Aggiungi_Al_Buffer(int x),
Estrai_Dal_Buffer() e Stampa_Buffer() con gli ovvi significati.
Grazie mille!!!!!!
1
Si consideri il seguente problema di sincronizzazione tra processi formato da un processo produttore P e da due
processi consumatore C1 e C2, che condividono un’area di memoria (buffer) con 10 locazioni.
Il processo produttore P genera ciclicamente un numero intero arbitrario e lo aggiunge al buffer di memoria
condivisa. Il processo P si pone in attesa quando tenta di accedere al buffer pieno.
Il processo C1 (C2) consuma ciclicamente un elemento del buffer. Il processo C1 (C2) può accedere al buffer
solo se il buffer stesso non è vuoto, e può consumare un elemento del buffer solo se il numero attuale di
elementi nel buffer stesso è dispari (pari).
Si proponga una soluzione con semafori al problema di sincronizzazione proposto. Si richiede la descrizione dei
dati condivisi, lo pseudocodice delle procedure Produttore() e Consumatore1() e una discussione sulle eventuali
differenze tra Consumatore2() e Consumatore1(). Si assuma l’esistenza delle procedure Genera(),
Aggiungi_Al_Buffer(int x), Estrai_Dal_Buffer(), Consuma(int x), e Consuma_Buffer() con gli ovvi significati.
2
Si consideri il seguente problema di sincronizzazione tra processi denominato problema multi-produttore/consumatore
con memoria condivisa a buffer limitato:
Sia dato un sistema di processi concorrenti composto da n>10 processi produttori P1, P2, …, Pn, e da un
processo consumatore C, che condividono un’area di memoria con 10 locazioni.
Il generico processo produttore Pi genera un numero intero arbitrario e lo deposita nel buffer di memoria
condivisa. Se Pi tenta di accedere al buffer quando quest’ultimo è pieno, allora Pi stampa tutto il contenuto del
buffer e si pone in attesa.
Il processo C consuma ciclicamente un elemento del buffer al quale può accedere solo quando il buffer stesso
non è vuoto.
Si proponga una soluzione con semafori al problema del multi-produttore/consumatore. Si richiede una descrizione
accurata dei dati e lo pseudocodice delle procedure Produci(), usata dal generico produttore per generare e depositare
un numero nel buffer (non si fanno ipotesi sulla frequenza di chiamata di Produci da parte di un produttore) e
Consumatore(). Si assuma l’esistenza delle procedure Genera(), Consuma(int x), Aggiungi_Al_Buffer(int x),
Estrai_Dal_Buffer() e Stampa_Buffer() con gli ovvi significati.
Grazie mille!!!!!!