|
Appunti informatica |
|
Visite: 1274 | Gradito: | [ Picolo appunti ] |
Leggi anche appunti:Contenuto del floppy diskContenuto del floppy disk Il floppy disk allegato costituisce una raccolta di Gli interrupt: utilizzoGli interrupt: utilizzo Gli interrupt sono routine, normalmente operanti a livello L'i/o e la gestione dei fileL'I/O e la gestione dei file Per Input/Output (I/O) si intende l'insieme delle |
Problemi di cooperazione nel modello a scambio di messaggi
VII) Scrivere una applicazione concorrente che implementi il problema Produttore/Consumatore utilizzando le primitive send e receive per la comunicazione mediante code di messaggi (Costruzione di un protocollo sincrono mediante le primitive di scambio di messaggi asincrone).
Descrizione: Il programma seguente risolve il problema dei Produttori/Consumatori implementando un protocollo sincrono di comunicazione che fa uso delle primitive (asincrone) messe a disposizione dal sistema. Occorre fare in modo che produttore e consumatore si sincronizzino opportunamente in modo da non perdere il messaggio da scambiare. A tal fine produttore e consumatore, prima dell'invio del messaggio effettivo, si scambiano dei messaggi di sincronizzazione secondo lo schema seguente
Produttore Consumatore
Invia messaggio di pronto ad inviare In attesa di messaggio di pronto ad inviare
In attesa di messaggio di pronto a ricevere Invio messaggio di pronto a ricevere
Invio del messaggio effettivo In attesa del messaggio effettivo
Ovvero, in termini di Send Asincrona a Receive Bloccante
Produttore Consumatore
Send asincrona(coda, "pronto ad inviare") Receive bloccante(coda, pronto ad inviare)
Receive bloccante(coda, pronto a ricevere) Send asincrona(coda, "pronto a ricevere")
Send asincrona(coda, "messaggio") Receive bloccante(coda, messaggio)
Nell'implementazione proposta viene utilizzata una sola coda differenziando nel contempo il tipo di messaggi.
Programma VII.C
#include <sys/types.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
#define DIM_MSG 256 //Cardinalitą del Messaggio
#define Ready_To_Send 0 //Tipi di Messaggio
#define Ready_To_Receive 1
#define Data_Message 2
typedef struct Messaggio;
void main()
//----- GENERAZIONE FIGLIO PRODUTTORE -----
pid=fork(); //Generazione del figlio Produttore
if (pid==-1) else if (!pid)
exit(0); //Il figlio Produttore termina correttamente
}
//----- GENERAZIONE FIGLIO CONSUMATORE -----
pid=fork(); //Generazione del figlio Consumatore
if (pid==-1) else if (!pid)
exit(0); //Il figlio Consumatore termina correttamente
}
//----- SINCRONIZZAZIONE DEL PADRE CON I FIGLI -----
for(i=0; i<2; i++)
//----- RILASCIO CODA DI MESSAGGI -----
msgctl(ID_Msg, IPC_RMID, 0);
Appunti su: |
|