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 scambio di messaggi

Problemi di cooperazione nel modello a scambio di messaggi




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

Contenuto del floppy disk


Contenuto del floppy disk Il floppy disk allegato costituisce una raccolta di

C come cesare


C come Cesare Il Cesare in questione è proprio Caio Giulio Cesare, il noto imperatore romano

Gli operatori


Gli operatori Come tutti i linguaggi di programmazione, il C dispone di un insieme
immagine di categoria

Scarica gratis Problemi di cooperazione nel modello a scambio di messaggi

Problemi di cooperazione nel modello a scambio di messaggi


VIII) Scrivere una applicazione concorrente che implementi uno schedulatore di processi che gestisce tre livelli di priorità usando le code di messaggi.


Descrizione: Il programma seguente mostra come è possibile implementare uno schedulatore di processi usando le code di messaggi. Un processo utente che voglia essere schedulato deve inviare allo schedulatore un messaggio di tipo Ready_To_Be_Scheduled, indicando in esso la propria priorità e il proprio PID, dopodiché si pone in attesa, da parte dello schedulatore, di un messaggio di tipo Ready_To_Schedule_You che gli comunichi che è stato scelto: a questo punto il processo eseguirà il suo carico di istruzioni e prima di terminare invierà allo scheduler un messaggio di tipo End_of_Execute, segnalando in tal modo di aver concluso il proprio lavoro. Più in generale, lo scheduler esegue ciclicamente il polling (receive non bloccante) di una coda dei messaggi (si è scelto per semplicità di usare una sola coda) alla ricerca di una richiesta di schedulazione, analizzando le richieste disponibili sulla base della priorità dichiarata dai singoli processi e scegliendo il prossimo processo da schedulare: letto il PID del messaggio prescelto, gli viene inviato un messaggio di attivazione. Fatto ciò, non gli resta che porsi in attesa della segnalazione di terminazione del processo schedulato, dopo la quale potrà riprendere a svolgere da capo la propria attività. Si noti che, nell'implementazione proposta, il processo padre è lo scheduler dei processi figli.


 Programma VIII.C


#include <sys/types.h> 

#include <stdio.h>         

#include <sys/ipc.h>

#include <sys/msg.h>

#include <sys/wait.h>


#define DIM_MSG (sizeof(unsigned int))                //Cardinalità del Messaggio

#define Urgent 0                       //Tipi del Messaggio

#define Normal 1

#define Idle 2

#define End_of_Execute 3

#define Ready_To_Schedule_You (long)100000


typedef struct Messaggio;


#define N_PROC 5                   //Numero di processi da schedulare


void main()


//----- GENERAZIONE DEI FIGLI DA SCHEDULARE -----


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


} //End For N_PROC


//----- SCHEDULAZIONE DEI FIGLI -----


for (i=0; i<N_PROC; i++) //Almeno un processo ha richiesto

//la schedulazione


printf('Mando in esecuzione il processo con PID %d e priorità %dn', msg.PID, priority);

msg.tipo = msg.PID + Ready_To_Schedule_You;

msgsnd(ID_Msg, (const void*)&msg, DIM_MSG, 0); //Avvia l'esecuzione del processo

//appena schedulato


msgrcv(ID_Msg, (const void*)&msg, DIM_MSG, End_of_Execute, 0); //Rimane in attesa che tale

//processo schedulato gli comunichi

//la sua terminazione

}


//----- SINCRONIZZAZIONE DEL PADRE CON I FIGLI (ormai Zombie) -----


for(i=0; i<N_PROC; i++) pid=wait(&status); //I figli sono già terminati tutti e

//sono attualmente Zombie


//----- RILASCIO CODA DI MESSAGGI -----


msgctl(ID_Msg, IPC_RMID, 0);




Scarica gratis Problemi di cooperazione nel modello a scambio di messaggi
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 ...