2004-02-25 15:45:14 +00:00
\chapter { Le d<> veloppement}
2004-02-25 21:22:51 +00:00
\section { Outils utilis<69> s pour le d<> veloppement}
2004-02-25 15:45:14 +00:00
\subsection { Travail collaboratif}
2004-02-25 21:22:51 +00:00
\par Nous avons travaill<6C> ensemble gr{ \^ a} ce <20> CVS (Concurrent Versions System). Notre projet est h<> berg<72> chez Sourceforge\footnote { \url { http://www.sourceforge.net} } .
2004-02-25 15:45:14 +00:00
Le CVS permet la modification du code du projet en m{ \^ e} me temps par plusieurs personnes. Les modifications et les mises <20> jour de chacun des membres du projet sont diffus<75> es instantan<61> ment, avec un risque minimis<69> de conflits lors des modifications du m{ \^ e} me code.
\subsection { Moyens techniques}
\par Chacun selon nos pr<70> f<EFBFBD> rences, nous avons utilis<69> s des machines sous GNU/Linux ou Microsoft Windows et cod<6F> avec Vim.
La personne sous Microsoft Windows avait une session graphique sur un serveur GNU/Linux, appartenant a un autre membre du projet,
2004-02-25 20:37:05 +00:00
gr{ \^ a} ce <20> l'utilisation de VNC\footnote { \url { http://www.realvnc.com} } (Virtual Network Computing).
2004-02-25 15:45:14 +00:00
Cela afin de permettre <20> l'utilisateur de Microsoft Windows de pouvoir
tester la biblioth<74> que dans les meilleures conditions, car sous
Microsoft Windows l'utilisateur n'est pas pr<70> venu des
{ \em segmentation fault} et autres erreurs syst<73> me.
2004-02-25 16:31:55 +00:00
2004-02-25 18:21:37 +00:00
\section { Programmation}
2004-02-26 08:15:45 +00:00
\subsection { Description des fonctions et de leurs effets}
2004-02-25 18:21:37 +00:00
2004-02-26 08:15:45 +00:00
\par Nous allons dresser un descriptif de l'utilit<69> des fonctions
utilis<EFBFBD> es dans notre biblioth<74> que. Vous trouverez tous les prototypes
des fonctions dans le fichier \\ ``\verb +/src/proto.h+'', avec en
commentaire le fichier d'o<> il est issu. Par contre pour les fonctions
qui g<> n<EFBFBD> rent les { \em ids} , leur prototype est dans le fichier ``\verb +/src/ids.h+'', g<> n<EFBFBD> r<EFBFBD> par ``\verb +/src/ids.c+''.
Le fichier ``\verb +/src/proto.h+'' est connu des logiciels qui utilisent
notre biblioth<74> que, tandis que ``\verb +/src/ids.h+'' non.
Nous allons donc vous d<> crire nos diff<66> rentes fonctions en les classant
par famille.
2004-02-26 08:53:52 +00:00
\newline
\par Nous avons quatre grandes { \em familles} de fonctions.
\begin { description}
\item { \sc msgBuffer*} Ce sont toutes les fonctions qui concernent les
buffers : comment on les cr<63> <72> s, les ``attachent'' aux processus.
\item { \sc msgPool*} Ce sont les fonctions qui permettent de cr<63> er ou de
d<EFBFBD> truire une { \em pool} , de l'ouvrir ou encore de poser un ``verrou''.
\item { \sc msgQueue*} Toutes les fonctions g<> rant les ``queues'', { \em
files de maessages} . On y
trouve celle qui en cr<63> <72> une, celles qui v<> rifient si elle est
disponible ou pas, celles qui ajoutent un <20> l<EFBFBD> ment ou au contraire en
enl<EFBFBD> ve un.
\item { \sc msgSpace*} Ensemble de fonctions qui g<> rent les espaces de
messages : cr<63> ation, ouverture\ldots
\end { description}
2004-02-26 08:15:45 +00:00
\subsection { D<EFBFBD> tails sur certaines fonctions}
\par Nous d<> taillerons ici quelques fonctions qui peuvent ne pas
2004-02-26 08:53:52 +00:00
par{ \^ i} tre claires, malgr<67> les explications au-dessus, ou qui n'ont
pas encore <20> t<EFBFBD> abord<72> es.
\par Voici la liste des fonctions non abord<72> es dans la partie
pr<EFBFBD> c<EFBFBD> dente, mais n<> anmoins utiles pour la compr<70> hension de notre
bibliot<EFBFBD> que.
2004-02-26 08:15:45 +00:00
2004-02-26 08:53:52 +00:00
\begin { itemize}
\item { \sc msgAllocate(\dots )}
\item { \sc msgFree(\dots )}
\item { \sc msgGet(\dots )}
\item { \sc msgList(\dots )}
\item { \sc msgPut(\dots )}
\end { itemize}
2004-02-26 08:15:45 +00:00
\section { Difficult<EFBFBD> s rencontr<74> es}
2004-02-25 17:40:20 +00:00
2004-02-26 07:36:56 +00:00
\par Nous n'avons pas eu de grosses difficult<6C> s <20> proprement parl<72> .
2004-02-25 17:40:20 +00:00
Nous avions juste quelques restrictions, comme le fait de ne pas
pouvoir utiliser de pointeurs absolus, car l'espace d'adressage entre
les diff<66> rents processus n'est pas forc<72> ment le m{ \^ e} me. Ils ont
2004-02-26 07:36:56 +00:00
seulement un segment de m<> moire partag<61> e en commun. Il a donc
2004-02-25 17:40:20 +00:00
fallu utiliser les diff<66> rentes { \em id} des espaces de messages { \em msgSpace} , ou
encore des { \em pools} pour pouvoir faire en sorte que les processus peuvent
bien acc<63> der aux { \em buffers} situ<74> s dans la m<> moire partag<61> e.
2004-02-25 18:21:37 +00:00
\par Le choix des identifiants ne fut pas simple non plus, car il
fallait en changer en fonction des diff<66> rentes impl<70> mentations. Par
exemple nous pouvions avoir des identifiants du type ``\verb +/tmp/identifiant+'',
qui ne marchaient que sur un type de machines. Sur les autres il
fallait en avoir un du type ``\verb +/identifiant+''. Cela nous a amener
<EFBFBD> faire une distinction de cas et g<> n<EFBFBD> rer un identifiant diff<66> rent
selon que l'on soit sur une machine de type { \em HP-UX} , { \em SunOS}
ou { \em Linux} .
\par Malheureusement le fait de travailler sur plusieurs types de
machines n'<27> tait pas seulement g{ \^ e} nant pour les identifiants,
mais <20> galement pour cr<63> er la biblioth<74> que. En effet, il faut ajouter
2004-02-26 07:36:56 +00:00
plus ou moins d'options <20> la compilation: soit il faut ajouter \verb +-lrt+, dans un cas ou \verb +-lrt -lpthread+ dans l'autre. Ceci afin
d'inclure les bonnes librairies pour que notre biblioth<74> que puisse
fonctionner convenablement.
2004-02-25 18:21:37 +00:00
\par Ces distinctions se font dans les { \em Makefile} , \verb +/src/Makefile+ et \verb +/test/Makefile+.
2004-02-25 18:43:22 +00:00
\par Encore une autre difficult<6C> d{ \^ u} e <20> Posix, est la
projection de fichier ou { \em mapping} avec { \em mmap} . L'offset
peut { \^ e} tre align<67> sur les pages m<> moires sur
certains syst<73> mes. Or ceci est emb{ \^ e} tant lorsque l'on veut
acc<EFBFBD> der <20> un fichier qui commence n'importe o<> dans le bloc m<> moire.
Pour rem<65> dier <20> cela, nous { \em mappons} jusqu'<27> ``juste derri<72> re le
buffer''. Nous autorisons le buffer en lecture/<2F> criture et nous d<> pla<6C> ons
l'adresse obtenue au d<> but du buffer.