Extension d'un noyau de processus légers
Etape 4 - communication entre processus
1. Que veut-on fournir
On souhaite fournir des fonctions permettant aux processus légers
de communiquer entre eux. Deux types de fonctions de communication
doivent être mises en oeuvre :
-
des fonctions de communication de type buffer borné, non temporisées,
-
des fonctions de communications de type buffer borné temporisées.
Dans cette étape, on se limite aux communications non temporisées.
Ces fonctions utilisent la notion de boite-aux-lettres, qui est une structure
de désignation et de stockage des lettres. En d'autres termes, un
processus peut émettre un message à destination d'une boite
aux lettres donnée. Bien entendu, un processus ayant créé
une boite-aux-lettres à la possibilité de retirer les messages
stockés dans sa boite.
Une boite aux lettres contiendra un nombre maximum fixé de messages.
Tout message sera structuré comme suit :
-
taille du contenu
-
le contenu
-
l'identité de l'émetteur
2. Interface à réaliser
Les interfaces qui devront être fournies sont les suivantes.
Interface du module MailBox
/* Create a MailBox*/
MailBox mailBoxNew (
int nb_max_msg);
/* Send a message */
int mailBoxSend (
MailBox mailBoxDest,
Message * msg);
/* receive a message */
int mailBoxRecv (
MailBox mailBox,
Message * msg);
/* Initialize the MailBox module */
void initMailBox(..);
/* Free the MailBox module*/
void freeMailBox();
3. Principes de mise en oeuvre
Le transfert des messages entre un processus émetteur et un processus
récepteur se fera par valeur, c'est à dire que le contenu
du message devra être copié depuis le contexte du processus
émetteur dans la boite aux lettre du récepteur, et depuis
la boite aux lettres dans le contexte du processus récepteur. La
propriété que l'on souhaite assurer est qu'apres avoir appelé
la fonction mailBoxSend (mb, m), alors la structure de donnée
pointée par m est utilisable pour l'envoi de prochains messages.
En outre, toute structure de type MailBox doit être gérée
selon le modele Producteurs/Consommateurs étudié au 1er trimestre.
En particulier, le retrait des messages doit être réalisé
selon l'ordre FIFO.
5. Travail demandé
Il est demandé de :
-
Réaliser le module MailBox
-
Tester le module, en réalisant des jeux de tests mettant en jeu
des exécutions concurrentes de toutes les fonctions réalisées.
Ces jeux de tests pourront être demandés lors de la démonstration
finale.