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.