This commit is contained in:
parent
3942e13bba
commit
770972d203
10 changed files with 358 additions and 37 deletions
35
README
35
README
|
@ -1,35 +0,0 @@
|
||||||
|
|
||||||
Prérequis: L'utilisation de ce projet nécessite un système GNU/Linux, et la
|
|
||||||
présence du compilateur GNU GCC
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
make <commande>
|
|
||||||
|
|
||||||
* Détecteur de pannes, invoqué depuis main
|
|
||||||
|
|
||||||
Taper:
|
|
||||||
|
|
||||||
make worm_inc
|
|
||||||
|
|
||||||
et suivre les instructions.
|
|
||||||
|
|
||||||
|
|
||||||
* Détecteur de pannes, invoqué depuis main et compilé
|
|
||||||
dans une bibliothèque chargée dynamiquement
|
|
||||||
|
|
||||||
Taper:
|
|
||||||
|
|
||||||
make worm_shared
|
|
||||||
|
|
||||||
et suivre les instructions.
|
|
||||||
|
|
||||||
* Détecteur de pannes, dans une bibliothèque chargée
|
|
||||||
dynamiquement, mais sans toucher au code source du programme original.
|
|
||||||
|
|
||||||
Taper:
|
|
||||||
|
|
||||||
make worm_preload
|
|
||||||
|
|
||||||
et suivre les instructions.
|
|
||||||
|
|
33
readme.css
Normal file
33
readme.css
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
/* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */
|
||||||
|
|
||||||
|
p.code { border: 2px dashed rgb(153, 153, 153);
|
||||||
|
padding: 5px;
|
||||||
|
background: rgb(204, 204, 204) none repeat scroll 0% 50%;
|
||||||
|
-moz-background-clip: initial;
|
||||||
|
-moz-background-origin: initial;
|
||||||
|
-moz-background-inline-policy: initial;
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.page { border: 2px dashed rgb(153, 153, 153);
|
||||||
|
padding: 10px;
|
||||||
|
top: 10px;
|
||||||
|
left: 10px;
|
||||||
|
right: 10px;
|
||||||
|
bottom: 10px;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
background-color: rgb(255, 255, 255);
|
||||||
|
opacity: 1;
|
||||||
|
width: 60%;
|
||||||
|
font-family: Arial,Helvetica,sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body { background-color: rgb(51, 51, 51);
|
||||||
|
}
|
||||||
|
|
||||||
|
span.code { border: 1px dashed rgb(153, 153, 153);
|
||||||
|
background-color: rgb(204, 204, 204);
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
|
322
readme.html
Normal file
322
readme.html
Normal file
|
@ -0,0 +1,322 @@
|
||||||
|
<!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/ProgRepartieTP4/archives/">http://glenux2.free.fr/pub/projets/ProgRepartieTP4/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://repository.glenux.ath.cx/svn/Cours/M2/Prog_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>
|
|
@ -2,6 +2,7 @@ all:
|
||||||
@echo "Usage: make <commande>"
|
@echo "Usage: make <commande>"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "Commandes disponibles:"
|
@echo "Commandes disponibles:"
|
||||||
|
@echo "- server : programme serveur"
|
||||||
@echo "- worm_inc : version modifiée des programmes, avec insertion de detect_init()"
|
@echo "- worm_inc : version modifiée des programmes, avec insertion de detect_init()"
|
||||||
@echo " et bibliothèque de détection de pannes liée statiquement"
|
@echo " et bibliothèque de détection de pannes liée statiquement"
|
||||||
@echo "- worm_shared : version modifiée des programmes, avec insertion de detect_init()"
|
@echo "- worm_shared : version modifiée des programmes, avec insertion de detect_init()"
|
Loading…
Reference in a new issue