Fault (by death or blocking) detection library , usable on any process.
Go to file
glenux 7864394934 2006-09-07 14:49:32 +00:00
src 2006-03-17 17:04:59 +00:00
readme.css 2006-03-17 17:04:59 +00:00
readme.html 2006-09-07 14:49:32 +00:00
tip-macosx.txt 2006-03-01 21:40:31 +00:00

readme.html

<!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&eacute;</title>


  <meta content="Glenn ROLLAND" name="author">

</head>


<body style="direction: ltr;">

<div style="text-align: justify;" class="page">
<h1>Programmation r&eacute;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&egrave;que
de d&eacute;tection de pannes (mort ou blocage), utilisable sur
n'importe quel processus.</p>

<p> Il poss&egrave;de les
caract&eacute;ristiques
suivantes :</p>

<ul>

  <li>Il est distribu&eacute;
sous la licence&nbsp;<a href="http://www.gnu.org/copyleft/gpl.html">GNU
General Public License</a></li>

  <li>Il&nbsp;est
&eacute;crit en C,&nbsp;</li>

  <li>Il peut &ecirc;tre invoqu&eacute; depuis la
fonction main(int, char**) d'un programme et li&eacute;
statiquement.</li>

  <li>Il peut &ecirc;tre invoqu&eacute; depuis la
fonction main(int, char**) d'un programme et &ecirc;tre
li&eacute; dynamiquement.</li>

  <li>Il peut &ecirc;tre invoqu&eacute; sans modifier le
programme original, au chargement de la biblioth&egrave;que
dynamique.</li>

</ul>

<h3>1.1.
Auteurs</h3>

<p>Cet exercice a
&eacute;t&eacute; enti&egrave;rement
r&eacute;alis&eacute; par Glenn ROLLAND &lt;<a href="mailto:glenux@fr.st">glenux@fr.st</a>&gt;
&agrave; l'occasion de travaux pratiques du cours de <span style="font-style: italic;">Programmation R&eacute;partie</span>
du Master 2 Ing&eacute;nierie Informatique
-
Syst&egrave;mes, R&eacute;seaux et Internet.</p>

<h2><a99 name="2._Pr&eacute;-requis">2.
Pr&eacute;-requis</a99></h2>

<p>Cet exercice n&eacute;cessite un syst&egrave;me
GNU/Linux, ainsi que l'utilisation de GNU GCC
(version&nbsp;&ge;
2.95) et de GNU Make.</p>

<h2>3.
Se procurer le sources</h2>

<p>Vous
pouvez t&eacute;l&eacute;charger la derni&egrave;re archive
des
sources, ou bien directement leur version la plus r&eacute;cente
sur le d&eacute;p&ocirc;t Subversion du projet.</p>

<h3>3.1. L'archive compress&eacute;e</h3>

<p>Elle est disponible &agrave; 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&eacute;p&ocirc;t Subversion</h3>

<p>Afin d'obtenir les sources les
plus &agrave; jour, vous pouvez utiliser le logiciel de
contr&ocirc;le de sources Subversion </p>

<p class="code">$ svn
checkout \<br>

&nbsp;
http://websvn.glenux.ath.cx/svn/Cours/M2/Programmation_Repartie/TP4/ \<br>

&nbsp; prog-repartie-tp4</p>

<p>Il n'y a pas de mot de passe,
il suffit donc de presser la touche
"Entr&eacute;e" pour l'utilisateur "anonymous", si ce dernier vous
est
demand&eacute;.</p>

<h2><a name="4._Utiliser_Alob&eacute;"></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&eacute;compressez.</p>

<p class="code">$ tar -xzvf prog-repartie-tp4.tar.gz</p>

<p>Rendez vous ensuite dans le
dossier qui vient d'&ecirc;tre cr&eacute;&eacute; lors de
la d&eacute;compression.</p>

<p class="code">$ cd prog-repartie-tp4</p>

<p>Puis lancez&nbsp;la compilation du logiciel avec les
param&egrave;tres souhait&eacute;s..</p>

<h3><a name="4.2._Utilisation"></a>4.2.
Exercices</h3>

<p>Il s'agit d'&eacute;crire un d&eacute;tecteur de
pannes, utilisant deux threads: une pour le programme principal, et une
pour le d&eacute;tecteur. La thread du d&eacute;tecteur se
connecte via une socket INET &agrave; un serveur chez qui elle
"s'enregistre" pour &ecirc;tre ensuite surveill&eacute;e.</p>

<p>Pour utiliser les logiciels, il faut avoir d&eacute;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&egrave;me de
d&eacute;tection de pannes.</p>

<p>Avant de lancer les programmes &agrave; surveiller, il
faut d'abord lancer le programme serveur qui v&eacute;rifiera la
vivacit&eacute; des processus enregistr&eacute;s.</p>

<h4>4.2.1. Exercice 1</h4>

<p>Il s'agit du programme serveur.&nbsp;</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&eacute;tecteur de pannes invoqu&eacute;
depuis le main du programme &agrave; surveiller et li&eacute;
statiquement.</p>

<p>Pour compiler les&nbsp;exemples, taper:</p>

<p class="code">$ make worm_inc</p>

<p>Puis, pour lancer les exemples:&nbsp;</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&nbsp;</h4>

<p>Il s'agit du d&eacute;tecteur de pannes invoqu&eacute;
depuis le main du programme &agrave; surveiller et li&eacute;
dynamiquement.</p>

<p>Pour compiler les exemples, taper:</p>

<p class="code">$ make worm_shared</p>

<p>Puis, pour lancer les exemples:&nbsp;</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&eacute;tecteur de pannes, dans une
biblioth&egrave;que li&eacute;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:&nbsp;</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>