Che materia stai cercando?

Anteprima

ESTRATTO DOCUMENTO

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; } 4

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); 5

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 6

Una seconda

soluzione

• Due vettori:

– buffer [N], che contiene i valori

– stato [N], nel quale ogni cella

può contenere tre possibili

valori:

• PIENO, se la cella

corrispondente nel buffer

contiene un valore prodotto;

• VUOTO, se la cella

corrispondente non contiene un

valore consumabile;

• IN_USO, se la cella

corrispondente è oggetto di un

processo produttore o

consumatore attualmente attivo 7

Una seconda

soluzione

• Scomposizione del problema

in 6 funzioni:

– Richiesta, Produzione e

Rilascio per i produttori;

– Richiesta, Consumo e Rilascio

per i consumatori.

• Ipotesi semplificativa:

– ogni consumatore è disposto a

leggere un qualsiasi

messaggio, tra quelli presenti

nel buffer 8

Strutture dati

# define VUOTO 0

# define PIENO 1

# define IN_USO 2

semaforo messaggio_disponibile=0:

semaforo spazio_disponibile=N;

semaforo mutex_prod=1;

semaforo mutex_cons=1;

messaggio buffer[N];

int stato[N];

/* buffer e stato sono in memoria

condivisa */

typedef char messaggio 9

Produttore

int Richiesta_Produttore() {

int indice;

wait(spazio_disponibile);

wait(mutex_prod);

indice=0;

while (stato[indice]!=VUOTO)

indice++;

stato[indice]=IN_USO;

signal(mutex_prod);

return indice; }

void Produzione (int indice,

messaggio valore)

{ buffer[indice]=valore;}

void Rilascio_Produttore (int

indice) {

stato[indice]=PIENO;

signal (messaggio_disponibile);

} 10

Consumatore

int Richiesta_Consumatore() {

int indice;

wait(messaggio_disponibile);

wait(mutex_cons);

indice=0;

while (stato[indice]!=PIENO)

indice++;

stato[indice]=IN_USO;

signal(mutex_cons);

return indice; }

messaggio Consumo (int indice)

{ return buffer[indice];}

void Rilascio (int indice) {

stato[indice]=VUOTO;

signal (spazio_disponibile); } 11

Commenti

• Con questa soluzione può

esistere un parziale

parallelismo tra i produttori:

possono coesistere un

produttore che richiede una

risorsa e altri che producono

o rilasciano risorse

• Lo stesso vale in maniera

analoga per i consumatori 12


PAGINE

20

PESO

210.67 KB

AUTORE

Menzo

PUBBLICATO

+1 anno fa


DESCRIZIONE APPUNTO

Testo relativo all'esame di sistemi operativi del professor Domenico Cotroneo, corso di laurea in ingegneria informatica. Il documento presenta 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, con relativa soluzione


DETTAGLI
Corso di laurea: Corso di laurea in ingegneria informatica
SSD:
A.A.: 2013-2014

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à Napoli Federico II - Unina o del prof Cotroneo Domenico.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Sistemi operativi

Sistemi operativi - domande esame
Appunto
Sistemi operativi - Appunti
Appunto
Sistemi operativi - Esercitazioni varie Linux
Esercitazione
Sistemi operativi - Implementazione programma in C
Appunto