• Aucun résultat trouvé

Plateformes existantes

CHAPITRE 3 AGENTS MOBILES ET LEURS SPÉCIFICITÉS

3.4 Plateformes existantes

La très grande majorité des plateformes d’agents mobiles actuelles utilise Java grâce à sa machine virtuelle largement répandue qui cache l’hétérogénéité des processeurs et des systèmes d’exploitation sous-jacents. Java fournit un mécanisme pour la sérialisation [Grosso, 2001] et le chargement dynamique des classes qui sont directement utilisées par les plateformes telles que Voyager [Recursion Software, 2011], JADE [Bellifemine et al., 2007] et Aglets [Lange et Mitsuru, 1998] pour mettre en œuvre la migration d’agents mobiles. Notons que les références spécifient la date d’apparition de documents que nous avons utilisés pour présenter les plateformes et non à la date de leur première apparition. À titre d’exemple, la plateforme Voyager a été introduite par la compagnie ObjectSpace en 1997, achetée depuis par Recursion Software mais la version utilisée dans cette présentation date de 2011.

La sérialisation consiste simplement à transférer une instance d’objet en une série d’octets. Cette technique est souvent utilisée pour stocker sur disque une instance d’objet afin d’assurer sa persistance. Cependant, on peut aussi bien transférer cette série d’octets sur le réseau entre deux machines virtuelles Java. C’est d’ailleurs ce qui se passe lorsque l’on fournit un paramètre en appelant un message sur un objet distant. Le paramètre est d’abord transféré en une série d’octets ("sérialisé"), puis acheminé vers la machine virtuelle Java où se trouve l’objet distant. La suite d’octets représentant l’objet-paramètre est ensuite reconstruite comme objet réel dans la mémoire de la machine virtuelle Java de destination ("dé-sérialisé"), puis ce paramètre est passé à l’objet cible lors de l’appel de la méthode.

Toutefois, étant donné que Java ne fournit pas des services d’accès à la zone d’exécution des données, ces plateformes ne permettent pas le support de la migration forte sans les modifications de la machine virtuelle. Elles fournissent la mobilité faible: un agent reprend son cours d’exécution dès le début quand il arrive à la destination.

Au niveau de l'application, la mobilité est mise en œuvre en appelant une méthode donnée, habituellement appelée moveTo(), spécifiant d'une façon ou d'une autre le nœud de destination. La figure 3.12 montre deux fragments de code Java d'un agent. La première repose sur la

mobilité faible: l'appel de la méthode moveTo() envoie l'agent vers le nœud NouveauNœud, puis, après le transfert, l'exécution démarre la méthode NouvelleMethode() telle que spécifiée par le paramètre dans la figure 3.12 (a). Dans le cas d’un système supportant la mobilité forte, l'exécution est relancée à partir de la première instruction après la méthode moveTo() telle qu’illustrée à la figure 3.12 (b).

void main(String args[]) {

... // Les instructions avant le déplacement moveTo ( NouveauNœud , NouvelleMethode ); // N atteint pas ici

} //Fin de main()

void NouvelleMethode () { // L exécution débute ICI ...

} //Fin de la NouvelleMethode()

(a) Mobilité faible

void main(String args[]) {

... // Les instructions avant le déplacement moveTo ( NouveauNœud );

// L exécution se poursuit ICI

...

} //Fin de main()

(b) Mobilité forte

Figure 3.12 Code d’un agent utilisant une mobilité faible en (a) et une mobilité forte en (b)

Nous présentons dans cette section une synthèse des plateformes Voyager, Mobile-C et JADE. Nous nous intéressons particulièrement aux aspects liés à la mobilité des applications puisque ces plateformes sont aussi utilisées dans d’autres domaines (par exemple RPC).

3.4.1 Plateforme Voyager

Cette plateforme a pour objectif de produire rapidement des systèmes répartis. Elle offre une série de services, tous essentiels au développement des applications réparties. Certaines fonctionnalités de la plateforme Voyager opèrent en arrière-plan de façon transparente pour l’utilisateur. Les techniques mises en œuvre à l’aide de Voyager permettent la construction des objets distants, de leur envoyer des messages et de les déplacer entres les programmes.

Comme il est difficile de prévoir les exigences uniques de chaque client, la plateforme Voyager est construite à base de composants qui peuvent être étendus ou remplacés pour intégrer dans l'infrastructure existante. La plateforme Voyager est mise en œuvre au-dessus de la couche du système d’exploitation et fournit un ensemble d'API universelle [Recursion Software, 2011]. Voyager intègre des composants pouvant s’exécuter aussi bien dans une

machine virtuelle Java que dans un environnement «.net». Ainsi, Voyager devient une plateforme d'abstraction qui permet d’écrire un code natif dans le langage du choix de l’utilisateur (Java, C#, etc.) et de le déployer sur n'importe quel appareil quelle que soit la machine virtuelle du dispositif utilisé. Voyager supporte également plusieurs protocoles de communication tels que SOAP (Simple Object Access Protocol), IIOP (Internet Inter-ORB Protocol), etc. Voyager est un environnement multi-langage mais c’est seulement le composant écrit en Java qui supporte les agents mobiles et plus précisément la mobilité faible.

3.4.2 Plateforme Mobile-C

Mobile-C [Chou et al., 2010] [Chen et al., 2006] est une plateforme d'agents mobiles qui est mise en œuvre sous la forme d’une bibliothèque. Ainsi, elle peut être facilement intégrée dans des applications qui utilisent des agents mobiles. Cette plateforme est conforme aux normes FIPA et elle est destinée aux systèmes mécatroniques (mécanique/électronique) et aux systèmes embarqués «réseautés». Bien qu'elle soit une plateforme multiagents polyvalente, Mobile-C est conçue spécialement pour les systèmes temps réel et pour les machines avec des ressources limitées. Les agents mobiles dans un système de multiagent communiquent et travaillent en collaboration avec d'autres agents pour atteindre un but commun.

Pour des raisons de portabilité, les agents mobiles de Mobile-C sont écrits en C/C++. Mobile- C est intégré à un interprète appelé Ch [SoftIntegration, 2011] qui est un environnement d'exécution des agents mobiles en C/C++ [Chou et al., 2010]. Ch est un surensemble de C pour l’écriture de script multiplateforme. Cet interprète supporte toutes les caractéristiques de la norme ANSI/ISO de 1990 de C et la plupart des nouveaux éléments ajoutés dans la norme ISO C99, tels que les nombres complexes, le tableau de longueur variable, les constantes binaires et le codage de virgule flottante de format IEEE 754. Il supporte aussi les classes, les objets et l'encapsulation en C++ pour la programmation à base d'objet.

Mobile-C est entièrement conforme aux normes FIPA tant au niveau de l’agent qu’au niveau de la plateforme. Au niveau de l’agent, la conformité comprend:

 Les protocoles d'échange de message,

 Les actes communicatifs: chaque message est considéré comme une action communicative;

 Les langages de représentation des connaissances pour décrire le contenu des messages.

Au niveau de la plateforme, Mobile-C fournit un système de gestion du cycle de vie d’agents, un canal permettant la communication entre agents sur le réseau et un répertoire de pages jaunes.

3.4.3 Plateforme JADE

JADE (Java Agent DEvelopment Framework) [Bellifemine et al., 2007] est une plateforme à code source ouvert pour la mise en œuvre de systèmes multiagents conforme aux spécifications FIPA. JADE est un intergiciel qui permet de mettre en œuvre un cadre et un environnement de développement d'agents grâce à un ensemble de bibliothèques Java. Cet intergiciel offre un environnement graphique et fournit aux programmeurs des fonctions prêtes à l’emploi et faciles à personnaliser [Filgueiras et al., 2012].

L’intergiciel permet le développement d’applications d’agents intelligents sur des plateformes fixes ou mobiles. La plateforme JADE est composée de conteneurs d'agent pouvant être distribués à travers le réseau. Les agents vivent dans les conteneurs qui sont des processus Java et fournissent tous les services nécessaires pour héberger:

 L’environnement complet d’exécution pour un agent;

 L’exécution concurrente de plusieurs agents non préemptifs. Cependant, il est important de souligner que l’ordonnanceur non préemptif n'arrête pas l'exécution du processus courant (comme les processus Java). Un ordonnanceur préemptif peut interrompre un processus au profit d'un autre plus prioritaire.

 Le contrôle du cycle de vie des agents,  La communication entre agents.

Il existe un conteneur spécial, appelé le conteneur principal, qui représente le point d'amorçage de la plate-forme: c'est le premier conteneur à être lancé et tous les autres doivent se joindre à lui. Les conteneurs sont identifiés par leur nom. Une plateforme JADE héberge un ensemble d’agents, identifiés de manière unique, pouvant communiquer de manière bidirectionnelle avec les autres agents. Comme la plateforme JADE respecte la norme FIPA, on retrouve les différents éléments: AMS, DF, etc. Il est pertinent de préciser que la plateforme JADE supporte la mobilité faible.