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 mutua esclusione nel modello a memoria comune

Problemi di mutua esclusione nel modello a memoria comune




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

La gestione degli errori


La gestione degli errori Le librerie della maggior parte dei compilatori implementano

La command line


La command line Si intende, per command line, la riga di testo digitata al prompt

Impiego di file


Impiego di file             XIII) Si realizzino due processi che interagiscono
immagine di categoria



Scarica gratis Problemi di mutua esclusione nel modello a memoria comune

Problemi di mutua esclusione nel modello a memoria comune


I) Scrivere una applicazione concorrente che generi due processi figlio che competano per l'uso di un buffer di memoria (un processo figlio si comporti da lettore e l'altro da scrittore).




Descrizione: Il programma seguente implementa il problema dei Lettori/Scrittori nel caso particolare in cui ci sia un solo processo lettore ed un solo processo scrittore, ai quali si estendono i seguenti vincoli:

la lettura del buffer di memoria comune (allocato dal processo padre) da parte del processo lettore non può avvenire se non dopo la scrittura da parte del processo scrittore, e chiaramente il processo lettore non ha facoltà di modificare il contenuto del buffer.

il processo scrittore opera ogni volta una "sovrascrittura" del contenuto del buffer.

A garanzia della consistenza del contenuto del buffer condiviso, processo lettore e processo scrittore devono accedervi in mutua esclusione.


 Semafori.H


#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


 Semafori.C


#include 'semafori.h'


struct sembuf Sem_Buf;                                //sembuf è un tipo predefinito contenente perlomeno i seguenti campi

//short sem_num; Numero del semaforo

//short sem_op; Valore da sommare algebricamente al semaforo

//short sem_flg; Flag dell'operazione


union semun Sem_Union; //semun è una unione predefinita contenente i seguenti elementi

//int val;

//struct semid_ds* buf;

//unshort_t* array;


//----- Nelle funzioni seguenti ID identifica il gruppo di semafori, N il singolo semaforo nel gruppo -----


void Init_Sem(int ID, int N, int Val)


void Wait_Sem(int ID, int N)


void Signal_Sem(int ID, int N)


int Awaiting_Sem(int ID, int N)


 Programma I.C


#include <stdio.h>         

#include <sys/shm.h>     

#include <sys/wait.h>         

#include 'semafori.h'


#define DIM 1   //Dimensione dell'area di memoria condivisa

#define NUM_OPS 4     //Numero di letture/scritture




#define MUTEX 0                    //Definizione di MACRO per l'accesso al semaforo

#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 main()


Ptr_Buf=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==(char*)-1)


//----- CREAZIONE SEMAFORO -----


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

int ID_Sem; //Identificatore del semaforo/i


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

//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)


INITIALIZE(MUTEX,1); //Setta MUTEX a 1


//----- GENERAZIONE FIGLIO SCRITTORE -----


pid=fork(); //Generazione del figlio Scrittore

if (pid==-1) else if (!pid)


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


}


//----- GENERAZIONE FIGLIO LETTORE -----


pid=fork();

if (pid==-1) else if (!pid)


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

}


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


for(i=0; i<2; i++)


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


shmctl(ID_Buf, IPC_RMID, 0);

semctl(ID_Sem, 0, IPC_RMID);





Scarica gratis Problemi di mutua esclusione 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 ...