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: 1427Gradito:apreciate 4-stela [ Picolo appunti ]
Leggi anche appunti:

I device driver e il c


I Device Driver e il C Sin qui la teoria: in effetti di C si è parlato poco,

Numeri a caso


Numeri a caso La libreria C include alcune funzioni per la generazione di

Disinstallare i tsr


Disinstallare i TSR Sappiamo che, per un programma TSR, la capacità di disinstallarsi (liberando
immagine di categoria

Scarica gratis Problemi di mutua esclusione nel modello a memoria comune

Problemi di mutua esclusione nel modello a memoria comune


V) Scrivere una applicazione concorrente che implementi il problema dei  Lettori/Scrittori nella variante che prevede che essi accedano ad un pool di buffer di memoria condivisa, con attesa indefinita dei processi scrittori.


Descrizione: Il programma seguente implementa il problema dei Lettori/Scrittori (più di uno) nel caso in cui si assuma che i processi lettori abbiano la massima priorità e che i processi scrittori possano invece subire starvation. I vincoli possono essere così riassunti:

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

Finchè è attivo un processo scrittore i processi lettori e gli altri processi scrittori devono attendere (a garanzia della consistenza del contenuto del buffer).

Finchè sono attivi uno o più processi lettori i processi scrittori devono attendere.

Finchè è attivo almeno un processo lettore tutti i processi lettori che sopraggiungono hanno diritto di prelazione rispetto ad eventuali processi scrittori già in attesa.


 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


 Lett_Scrit_StarvScr.H


#include <stdio.h>

#include"semafori.h"


typedef struct Buffer;


void Init_Buffer(Buffer*);       //Inizializza il vettore


void Init_Semafori(int);           //Inizializza i semafori


void Inizio_Lettura(Buffer*, int);                              //Acquisizione del buffer in lettura


char Lettura(Buffer*); //Lettura del buffer


void Fine_Lettura(Buffer*, int);                                //Rilascio del buffer dopo una lettura


void Inizio_Scrittura(int);        //Acquisizione del buffer per la scrittura


void Scrittura(char, Buffer*);  //Scrittura del buffer


void Fine_Scrittura(int); //Rilascio del buffer dopo una scrittura


 Lett_Scrit_StarvScr.C


#include "Lett_Scrit_StarvScr.h"    


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

#define SYNCH 1

#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_Buffer(Buffer* B)


void Init_Semafori(int ID_Sem)


void Inizio_Lettura(Buffer* B, int ID_Sem)


SIGNAL(MUTEX);



char Lettura(Buffer* B)



void Fine_Lettura(Buffer* B, int ID_Sem)


SIGNAL(MUTEX);



void Inizio_Scrittura(int ID_Sem)


void Scrittura(char value, Buffer* B)


void Fine_Scrittura(int ID_Sem)


 Programma V.C


#include <stdio.h>         

#include <sys/shm.h>     

#include <sys/wait.h>         

#include 'lett_scrit_starvscr.h'


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

#define NUM_LETT 5   //Numero di processi lettori

#define NUM_SCRIT 2                                  //Numero di processi scrittori


void main()


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


Init_Buffer(Ptr_Buf); //Inizializzazione del Buffer


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


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

int ID_Sem; //Identificatore del semaforo/i


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

//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(ID_Sem); //Inizializzazione dei semafori


//----- GENERAZIONE FIGLI SCRITTORI -----


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


Inizio_Scrittura(ID_Sem);

Scrittura(value, Ptr_Buf);

Fine_Scrittura(ID_Sem);


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

}


} //End For NUM_SCRIT


//----- GENERAZIONE FIGLI LETTORI -----


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


} //End For NUM_LETT


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


for(i=0; i<NUM_SCRIT+NUM_LETT; 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 ...