PROJET METHODES DE PROGRAMMATION SYSTEMES

Transcription

PROJET METHODES DE PROGRAMMATION SYSTEMES
PROJET METHODES DE PROGRAMMATION SYSTEMES 2009-2010
Ce projet est individuel.
Il est obligatoire et rentre en compte dans la note finale de l’unité d’enseignement.
Organisation du contrôle de l’unité d’enseignement.
projet obligatoire noté sur 5.
Examen noté sur 15.
Note finale pour l’unité d’enseignement = note de projet + note d’examen
OU
Note finale = 0 si pas de projet rendu quelle que soit le note d’examen
Enoncé du projet
On considère l’application client-serveur décrite ci-dessous.
1/ Le client
Un processus client est interfacé avec un procédé sur lequel il prélève par
l’intermédiaire de deux capteurs distincts, deux grandeurs significatives de l’état du
procédé, Température et Pression.
Pour ce faire, le processus père client créé deux processus fils, chaque fils étant chargé
de lire une des grandeurs toutes les 60 s sur l’un des capteurs et de transmettre la valeur
lue au père par l’intermédiaire d’un tube anonyme (il y a donc deux fils, un qui lit une
mesure de température, un autre qui lit une mesure de pression)..
Le père réceptionne les deux valeurs Température et Pression et les transmet à un
processus serveur. Puis il attend de la part du serveur un accusé de réception qui doit lui
parvenir dans les 40 s suivant l’envoi. A la réception de l’accusé de réception, le
processus client père se met en attente des nouvelles valeurs Température et Pression
transmises par ses fils. Si au bout des 40 s aucun accusé de réception n’a été reçu, le
processus client père renvoie les dernières valeurs transmises par ses fils. Puis le
processus client père se met en attente des nouvelles valeurs Température et Pression
transmises par ses fils.
Par ailleurs, lorsque le processus client père reçoit le signal SIGINT, il effectue les
actions suivantes :
- il avertit par un message spécifique de terminaison, le processus serveur que
l’application va se terminer ;
- il tue ses deux fils, détruit les tubes et se termine.
2/ Le serveur
Le serveur réceptionne les mesures envoyées par le processus client père et les enregistre
dans une table en mémoire centrale, après avoir vérifié que les valeurs transmises n’ont
pas déjà été traitées en cas de réémission du processus client père. S’il s’agit du premier
envoi des grandeurs par le processus client père, il envoie à celui-ci un accusé de
réception.
La table permettant de stocker les mesures en mémoire centrale a une capacité limitée à
60 entrées. Lorsque le serveur emplit la dernière entrée de la table, il créé un processus
fils qui ouvre un fichier Mesures et sauvegarde le contenu de la table. Le serveur
enregistre les nouvelles mesures qui lui parviennent à partir de la première entrée de la
table.
Si le message reçu est un message de terminaison, le processus serveur créé un processus
fils qui enregistre dans le fichier Mesures, les données stockées en mémoire centrale.
Puis les deux processus se terminent.
2/ Les structures de données et les fonctions
Les messages (à compléter éventuellement…)
Message Grandeurs émis par le processus père client :
numéro d’envoi : 1 ou 2 ; -- pour savoir s’il s’agit d’une réémission des données
réel température ;
réel pression ;
Message Accusé de réception émis par le processus serveur : entier OK ;
Message Terminaison émis par le processus père client : entier Fin ;
Les autres structures
Table_Mesures : tableau [2,60] de réel ; -- table dans laquelle le serveur enregistre les
mesures reçues
Fichier_Mesure ; -- fichier de sauvegarde de la table lors de l’arrêt de l’application
Les fonctions
Réel Lire_température() : renvoie une grandeur réelle Température ;
Réel Lire_pression() : renvoie une grandeur réelle Pression ;
Fonction ouverture de fichier : fd = open (nom_fichier, attributs) avec pour valeur
d’attributs :
• O_WRONLY : ouverture en écriture seule ;
• O_RDWR : ouverture en écriture et lecture
• O_CREAT : création du fichier s’il n’existe pas ;
• O_APPEND : ouverture en mode ajout ; les écritures s’effectuent en fin de
fichier ;
Ouvre et créé éventuellement un fichier avec les attributs spécifiés et renvoie un
descripteur fd.
Fonction écriture dans le fichier : write (fd, données, nb_octets), écrit nb_octets de
données, dans le fichier pointé par le descripteur fd.
Fonction fermeture de fichier : close(fd)
Travail demandé
1/ Vous analyserez les modalités de partage de la table Mesures entre le processus
serveur père et le processus serveur fils, lorsque le processus serveur fils vide la table
dans le fichier Mesures. Quelles contraintes doit à votre avis respecter ce partage ?
2/ Vous donnerez le pseudo code
- du serveur fils et du serveur père
- des clients fils et du client père
en supposant que le serveur et le client se trouvent sur une même machine, que ce sont
des processus lourds qui communiquent via une fiel de messages.
En ce qui concerne la réception de données sur une MSQ, vous admettrez que la
réception d’un signal par le processus en attente de messages, débloque ce processus.
Votre pseudo code utilise les structures prédéfinies dans l’énoncé, éventuellement
complétées, et les fonctions également définies dans l’énoncé. Il fait clairement
apparaître les primitives système utilisées pour la création de processus, la gestion des
signaux et les outils de communication.
3/ Vous donnerez le pseudo code du client en supposant qu’il est à présent structuré à
l’aide de processus légers.