Fault (by death or blocking) detection library , usable on any process.
src | ||
readme.css | ||
readme.html | ||
tip-macosx.txt |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="fr-fr"> <head> <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type"> <link rel="stylesheet" type="text/css" href="readme.css"> <title>Alobé</title> <meta content="Glenn ROLLAND" name="author"> </head> <body style="direction: ltr;"> <div style="text-align: justify;" class="page"> <h1>Programmation répartie - TP4</h1> <h2><a name="1._Description"></a>1. <a name="Description"></a>Description</h2> <p>Le but de ce TP est de concevoir une bibliothèque de détection de pannes (mort ou blocage), utilisable sur n'importe quel processus.</p> <p> Il possède les caractéristiques suivantes :</p> <ul> <li>Il est distribué sous la licence <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a></li> <li>Il est écrit en C, </li> <li>Il peut être invoqué depuis la fonction main(int, char**) d'un programme et lié statiquement.</li> <li>Il peut être invoqué depuis la fonction main(int, char**) d'un programme et être lié dynamiquement.</li> <li>Il peut être invoqué sans modifier le programme original, au chargement de la bibliothèque dynamique.</li> </ul> <h3>1.1. Auteurs</h3> <p>Cet exercice a été entièrement réalisé par Glenn ROLLAND <<a href="mailto:glenux@fr.st">glenux@fr.st</a>> à l'occasion de travaux pratiques du cours de <span style="font-style: italic;">Programmation Répartie</span> du Master 2 Ingénierie Informatique - Systèmes, Réseaux et Internet.</p> <h2><a99 name="2._Pré-requis">2. Pré-requis</a99></h2> <p>Cet exercice nécessite un système GNU/Linux, ainsi que l'utilisation de GNU GCC (version ≥ 2.95) et de GNU Make.</p> <h2>3. Se procurer le sources</h2> <p>Vous pouvez télécharger la dernière archive des sources, ou bien directement leur version la plus récente sur le dépôt Subversion du projet.</p> <h3>3.1. L'archive compressée</h3> <p>Elle est disponible à l'adresse :<br> <a href="http://glenux2.free.fr/pub/projets/ProgRepartie/TP4/Archives/">http://glenux2.free.fr/pub/projets/ProgRepartie/TP4/Archives/</a><br> </p> <h3>3.2. Le dépôt Subversion</h3> <p>Afin d'obtenir les sources les plus à jour, vous pouvez utiliser le logiciel de contrôle de sources Subversion </p> <p class="code">$ svn checkout \<br> http://websvn.glenux.ath.cx/svn/Cours/M2/Programmation_Repartie/TP4/ \<br> prog-repartie-tp4</p> <p>Il n'y a pas de mot de passe, il suffit donc de presser la touche "Entrée" pour l'utilisateur "anonymous", si ce dernier vous est demandé.</p> <h2><a name="4._Utiliser_Alobé"></a>4. Utiliser le logiciel</h2> <h3><a name="4.1._Compilation"></a>4.1. Compilation</h3> <p>Si vous avez choisi l'archive, commencez par la décompressez.</p> <p class="code">$ tar -xzvf prog-repartie-tp4.tar.gz</p> <p>Rendez vous ensuite dans le dossier qui vient d'être créé lors de la décompression.</p> <p class="code">$ cd prog-repartie-tp4</p> <p>Puis lancez la compilation du logiciel avec les paramètres souhaités..</p> <h3><a name="4.2._Utilisation"></a>4.2. Exercices</h3> <p>Il s'agit d'écrire un détecteur de pannes, utilisant deux threads: une pour le programme principal, et une pour le détecteur. La thread du détecteur se connecte via une socket INET à un serveur chez qui elle "s'enregistre" pour être ensuite surveillée.</p> <p>Pour utiliser les logiciels, il faut avoir défini les variables d'environnement <span style="font-weight: bold;">DETECTOR_HOSTNAME</span> et <span style="font-weight: bold;">DETECTOR_PORT</span> sur chacune des machines faisant partie du système de détection de pannes.</p> <p>Avant de lancer les programmes à surveiller, il faut d'abord lancer le programme serveur qui vérifiera la vivacité des processus enregistrés.</p> <h4>4.2.1. Exercice 1</h4> <p>Il s'agit du programme serveur. </p> <p>Pour le compiler, taper:</p> <p class="code">$ make server</p> <p class="">Pour l'executer (sur un shell bash):</p> <p class="code">$ export DETECTOR_PORT=2345<br> $ ./detector-server</p> <p>On obtient alors:</p> <p class="code">Lookup for localhost...<br> Host found<br> Bind on port 2345 of 127.0.0.1<br> Ready to accept connexions.<br> [\] Select...done</p> <p>Lorsque qu'un processus se connecte, puis s'enregistre, les lignes suivantes apparaissent:</p> <p class="code">Got new connection at 4<br> [-] Select...done<br> Registering client : 13331@djeke<br> [\] Select...done</p> <p>Puis, tant que le programme est en fonctionnement:</p> <p class="code">Requesting liveness for '13331@djeke'<br> [/] Select...done<br> Requesting liveness for '13331@djeke'<br> [-] Select...done<br> ...<br> Requesting liveness for '13331@djeke'<br> [\] Select...done</p> <p>Enfin, lorsque le programme plante (ou quitte), on voit:</p> <p class="code">[|] Select...done<br> Requesting liveness for '13442@djeke'<br> Select...done<br> Client '13442@djeke' has disconnected !</p> <h4>4.2.1. Exercice 2</h4> <p>Il s'agit du détecteur de pannes invoqué depuis le main du programme à surveiller et lié statiquement.</p> <p>Pour compiler les exemples, taper:</p> <p class="code">$ make worm_inc</p> <p>Puis, pour lancer les exemples: </p> <p class="code">$ export DETECTOR_HOSTNAME=localhost<br> $ export DETECTOR_PORT=2345<br> $ ./worms_mod</p> <p>ce qui affiche:</p> <p class="code">... (puis on voit des vers qui se baladent sur le terminal)</p> <p>ou bien :</p> <p class="code">$ export DETECTOR_HOSTNAME=localhost<br> $ export DETECTOR_PORT=2345<br> $ ./test_mod</p> <p>ce qui affiche:</p> <p class="code">HOST (localhost) PORT (2345)<br> Thread launched<br> Lookup for localhost...<br> Host found<br> Thread connected<br> Loooooping <br> Loooooping <br> Loooooping <br> Loooooping <br> [ ... ]</p> <h4>4.2.2. Exercice 2 </h4> <p>Il s'agit du détecteur de pannes invoqué depuis le main du programme à surveiller et lié dynamiquement.</p> <p>Pour compiler les exemples, taper:</p> <p class="code">$ make worm_shared</p> <p>Puis, pour lancer les exemples: </p> <p class="code">$ export DETECTOR_HOSTNAME=localhost<br> $ export DETECTOR_PORT=2345<br> $ LD_LIBRARY_PATH="." ./worms_mod</p> <p>ou bien :</p> <p class="code">$ export DETECTOR_HOSTNAME=localhost<br> $ export DETECTOR_PORT=2345<br> $ LD_LIBRARY_PATH="." ./test_mod</p> <h4>4.2.3. Exercice 3</h4> <p>Il s'agit du détecteur de pannes, dans une bibliothèque liée dynamiquement, mais sans aucune modification au code source du programme original.</p> <p>Pour compiler les exemples, taper:</p> <p class="code">$ make worm_inc</p> <p>Puis, pour lancer les exemples: </p> <p class="code">$ export DETECTOR_HOSTNAME=localhost<br> $ export DETECTOR_PORT=2345<br> $ LD_LIBRARY_PATH="." LD_PRELOAD=libdetect.so ./worms</p> <p>ou bien :</p> <p class="code">$ export DETECTOR_HOSTNAME=localhost<br> $ export DETECTOR_PORT=2345<br> $ LD_LIBRARY_PATH="." LD_PRELOAD=libdetect.so ./test</p> </div> </body> </html>