Appunti per Scuola e Università
humanisticheUmanistiche
Appunti e tesine di tutte le materie per gli studenti delle scuole medie riguardanti le materie umanistiche: dall'italiano alla storia riguardanti le materie umanistiche: dall'italiano alla storia 
sceintificheScientifiche
Appunti, analisi, compresione per le scuole medie suddivisi per materie scientifiche, per ognuna troverai appunti, dispense, esercitazioni, tesi e riassunti in download.
tecnicheTecniche
Gli appunti, le tesine e riassunti di tecnica amministrativa, ingegneria tecnico, costruzione. Tutti gli appunti di AppuntiMania.com gratis!
Appunti
informatica
CComputerDatabaseInternetJava
Linux unixReti


AppuntiMania.com » Informatica » Appunti di c » Problemi di cooperazione nel modello a memoria comune

Problemi di cooperazione nel modello a memoria comune




Visite: 1263Gradito:apreciate stela [ Picolo appunti ]
Leggi anche appunti:

Catturare il contenuto del video


Catturare il contenuto del video In questo esempio presentiamo un programma TSR

Due file sono il medesimo file?


Due file sono il medesimo file? La domanda è formulata in modo fuorviante. Il

L'i/o e la gestione dei file


L'I/O e la gestione dei file Per Input/Output (I/O) si intende l'insieme delle
immagine di categoria

Scarica gratis Problemi di cooperazione nel modello a memoria comune

Problemi di cooperazione nel modello a memoria comune


IV) Scrivere una applicazione concorrente che implementi il problema Produttore/Consumatore nella variante che prevede più produttori e consumatori e l'impiego di un pool di buffer di memoria.


Descrizione: Il programma seguente implementa il problema dei Produttori/Consumatori (più di uno) nel caso in cui essi si contendano un pool di buffer organizzato come semplice vettore, posto che ad essi si applichino i seguenti vincoli:

il consumo di un singolo buffer di memoria comune (l'insieme del pool è allocato dal processo padre) da parte di un processo consumatore non può avvenire se non dopo che almeno un processo produttore vi abbia depositato un contenuto, e all'atto del consumo tale contenuto viene cancellato.

un processo produttore non può depositare in un buffer di memoria comune un nuovo contenuto se non è disponibile alcun buffer libero.

A garanzia della consistenza del contenuto del buffer condiviso, processi consumatori e processi produttori, globalmente, devono accedere al singolo buffer in mutua esclusione, tuttavia l'accesso al pool di buffer nella sua totalità avviene comunque in concorrenza.


 Semafori.H (L'implementazione è quella indicata per il programma I)


#include <sys/types.h> 

#include <sys/ipc.h>

#include <sys/sem.h>


void Init_Sem(int, int);          //Inizializza Semaforo


void Wait_Sem(int, int);        //Wait su Semaforo


void Signal_Sem(int, int);     //Signal su Semaforo


int Awaiting_Sem(int, int);    //Restituisce il numero di processi in attesa su Semaforo


 Prod_Cons_Vector.H


#include <stdio.h>

#include "semafori.h"


#define DIM_VECTOR 4         //Cardinalità del vettore

#define VUOTO 0        //Stati del singolo buffer del vettore

#define IN_USO 1

#define PIENO 2


typedef struct Vector;


void Init_Vector(Vector*);      //Inizializza il vettore


void Init_Semafori_Vector(int);                                //Inizializza i semafori


int Richiesta_Produzione_Vector(Vector*, int);       //Richiesta di un buffer libero per la produzione


void Produzione_Vector(int, char, Vector*); //Produzione di un carattere nel vettore


void Rilascio_Produzione_Vector(int, Vector*, int);           //Rilascio di un buffer pieno


int Richiesta_Consumo_Vector(Vector*, int);                      //Richiesta di un buffer pieno per il consumo


char Consumo_Vector(int, Vector*);  //Consumo di un carattere dal vettore


void Rilascio_Consumo_Vector(int, Vector*, int);  //Rilascio di un buffer vuoto


 Prod_Cons_Vector.C


#include "prod_cons_vector.h"


#define SPAZIO_DISPONIBILE 0      //Definizione di MACRO per l'accesso ai semafori

#define MESSAGGIO_DISPONIBILE 1

#define MUTEX_PROD 2

#define MUTEX_CONS 3

#define INITIALIZE(S,V) Init_Sem(ID_Sem,S,V)

#define WAIT(S) Wait_Sem(ID_Sem,S)

#define SIGNAL(S) Signal_Sem(ID_Sem,S)


void Init_Vector(Vector* V)


void Init_Semafori_Vector(int ID_Sem)


int Richiesta_Produzione_Vector(Vector* V, int ID_Sem)

V->stato[i]=IN_USO;


SIGNAL(MUTEX_PROD);


printf('Buffer %d in uson', i);

return i;



void Produzione_Vector(int i, char value, Vector* V)


void Rilascio_Produzione_Vector(int i, Vector* V, int ID_Sem)


int Richiesta_Consumo_Vector(Vector* V, int ID_Sem)

V->stato[i]=IN_USO;


SIGNAL(MUTEX_CONS);


printf('Buffer %d in uson', i);

return i;



char Consumo_Vector(int i, Vector* V)


void Rilascio_Consumo_Vector(int i, Vector* V, int ID_Sem)


 Programma IV.C


#include <stdio.h>         

#include <sys/shm.h>     

#include <sys/wait.h>         

#include 'prod_cons_vector.h'


#define DIM sizeof(Vector) //Dimensione dell'area di memoria condivisa

#define NUM_PROD 3    //Numero di processi produttori

#define NUM_PRODUZ 5     //Numero di produzioni per ogni processo produttore

#define NUM_CONS 5     //Numero di processi consumatori

#define NUM_CONSUM 3     //Numero di consumi per ogni processo consumatore


void main()


Ptr_Buf=(Vector*)shmat(ID_Buf, 0, 0); //Il segmento allocato viene annesso al segmento dati

//del processo al primo indirizzo disponibile così come

//specificato dal sistema

if (Ptr_Buf==(Vector*)-1)


Init_Vector(Ptr_Buf); //Inizializzazione del Vettore


//----- CREAZIONE SEMAFORI -----


key_t Key_Sem=IPC_PRIVATE; //Chiave del semaforo/i

int ID_Sem; //Identificatore del semaforo/i


ID_Sem=semget(Key_Sem, 4, IPC_CREAT|0664); //Viene allocato un gruppo di semafori di cardinalità 4,

//viene associato al gruppo un ID e viene creata una

//struttura dati ausiliaria che consenta di gestirlo

//RW per User, RW per Gruppo, R only per Others

if (ID_Sem==-1)


Init_Semafori_Vector(ID_Sem); //Inizializzazione dei semafori


//----- GENERAZIONE FIGLI PRODUTTORI -----


for(i=0; i<NUM_PROD; i++) else if (!pid)


exit(0); //Il figlio Produttore termina correttamente

}


} //End For NUM_PROD


//----- GENERAZIONE FIGLI CONSUMATORI -----


for(i=0; i<NUM_CONS; i++) else if (!pid)


exit(0); //Il figlio Consumatore termina correttamente

}


} //End For NUM_CONS


//----- SINCRONIZZAZIONE DEL PADRE CON I FIGLI -----


for(i=0; i<NUM_PROD+NUM_CONS; i++)


//----- RILASCIO MEMORIA CONDIVISA E SEMAFORO -----


shmctl(ID_Buf, IPC_RMID, 0);

semctl(ID_Sem, 0, IPC_RMID);




Scarica gratis Problemi di cooperazione nel modello a memoria comune
Appunti su:



Scarica 100% gratis e , tesine, riassunti



Registrati ora

Password dimenticata?
  • Appunti superiori
  • In questa sezione troverai sunti esame, dispense, appunti universitari, esercitazioni e tesi, suddivisi per le principali facoltà.
  • Università
  • Appunti, dispense, esercitazioni, riassunti direttamente dalla tua aula Universitaria
  • all'Informatica
  • Introduzione all'Informatica, Information and Comunication Tecnology, componenti del computer, software, hardware ...