• Aucun résultat trouvé

Architecture

Dans le document Rejo Langage d'Objects Réactifs et d'Agents (Page 149-152)

ROS a ´et´e construit en utilisant une philosophie micro-noyau. Cette philosophie a permis de construire un prototype minimal qui est constitu´e par trois modules : le module Engine Daemon (D´emon de la machine) qui fait r´eagir la machine r´eactive, le module Migration Daemon (D´emon de migration) qui permet la charge distante de nouveaux Rejos (des agents) dans le syst`eme, et le Kernel (Noyau) qui g`ere les Rejos (les charge localement, les ´elimine, etc.). La figure7.2montre cette architecture.

Machine reactive

API du noyau

API de M i g r a t i o n

Reactive

Operating

System

(ROS)

Noyau Demon demigration

Demon de la

machine

Tableau

de REJO

Applications:

Agents

GUI

Reactif Shell

Fig. 7.2: Architecture de ROS

Les Rejos sont g´er´es par une table et un identificateur local unique qui fournit un nommage local. Cet iden-tificateur est l’´equivalent du PID (Process Id) d’UNIX. Pour faciliter l’usage du syst`eme, trois interfaces ont ´

et´e construites : l’interface API kernelqui d´ecrit la fa¸con d’utiliser le syst`eme (ajouter et enlever des Rejos), l’interfaceMigrationServqui offre le service de migration et l’interfaceAgentqui d´efinit un ensemble minimal de m´ethodes que doivent poss´eder les Rejos pour ˆetre ex´ecut´es en ROS.

D´emarrage du syst`eme et utilisation

Le d´emarrage du syst`eme ROS se fait avec un script appel´e runqui simplifie l’ex´ecution en passant les bons param`etres, tels le CLASSPATH et la configuration du serveur RMI (voir figures7.3).

Le syst`eme Ros d´emarre chaque module du syst`eme ; si un des modules basiques (le kernel et le d´emon de la machine) ne peut pas ˆetre ex´ecut´e, le syst`eme retourne un code d’erreur `a l’utilisateur. Par contre, si le module

de migration ne peut pas ˆetre d´emarr´e, le syst`eme affiche un message d’erreur mais d´emarre tout de mˆeme, sans le service de migration.

$ run

Reactive Operating System Junior release: stormRR v2.1 b2 Reactive Machine

Starting EngineDaemon Migration service Starting MigrationDaemon

adrs:port= macaroni.inria.fr:1099 Ros name = Ros1

MigrationDaemon error 1: codebase or rmiregistry problem h macaroni.inria.fr ∼ path i

Fig. 7.3: D´emarrage du syst`eme ROS

La commanderunaccepte quelques options qui permettent de lancer le noyau seul ou avec quelques applications. La table7.1 d´ecrit les options existantes. Si aucune option n’est donn´ee, le syst`eme d´emarre avec les options

-ket-t, c’est-`a-dire avec le noyau et ses modules ainsi qu’une application, le Rsh, d´ecrite dans la section7.4.1.

Option Signification -k lance le Noyau

-g lance l’Interface Graphique -r lance les Ricobjs

-t lance le Shell r´eactif

Tab. 7.1: Les options de d´emarrage de Ros

Finalement, ROS peut ˆetre lanc´e `a l’int´erieur d’autres programmes (embedded systems) sans probl`eme car il n’impose aucune interface graphique (comme le fait RAMA), ni la pr´esence du service de migration. ROS peut utiliser une interface graphique en Tcl/Tk ou bien peut ˆetre inclus dans une page Web en utiliser le Browser comme interface. Dans la sous-section7.4.2, on pr´esente une application (les Ricobjs) qui tourne sur ROS et qui utilise des applets pour montrer graphiquement des comportements r´eactifs ; les applets peuvent ˆetre utilis´es dans un browser comme Explorer ou par une application `a part enti`ere.

REJOC ROS fichier.rejo

JavaCC

fichier.class fichier.java

Fig. 7.4: Compilation et ex´ecution d’un agent

Le syst`eme ROS offre 4 services (d´efinis dans l’interfaceAPI kernel). Ces services ´equivalent aux system calls d’un syst`eme d’exploitation et ils sont les suivants :

1. La gestion d’Agents (charge et d´echarge d’agents).

int load(Agent ro);

int load(Agent ro, Output o);

int load(Agent ro, String[] args, Output o);

Charge l’agentrodans le syst`eme en lui affectant un nom. L’agent est charg´e `a l’instant d’apr`es et, s’il a d´ej`a ´et´e ex´ecut´e auparavant, on charge juste son r´esidu. Le param`etreargs est une copie des variables que re¸coit le syst`eme au d´emarrage.

Lorsque le param`etreOutput est pr´esent, il est utilis´e comme une deuxi`eme sortie standard. L’agent peut l’utiliser dans le code r´eactif par les deux instructions atomiques d’impressionprintet println

qui sont ´equivalentes aux instructionsSystem.out.printet System.out.println. Pour pouvoir les utiliser sur une plate-forme ROS, il faut que l’agent impl´emente l’interfaceOutput, ce qui est toujours le cas lorsque on compile avec l’option -ros.

void loadInst(Program i);

Charge un programme Junior dans la machine. Le programme n’a aucune structure de contrˆole et donc n’a pas de nom non plus

void unLoad(Agent ro); Program unLoad(String name);

´

Elimine un agent en utilisant une chaˆınename ou l’objet ro. L’´elimination consiste en la g´en´eration de l’´ev´enement killet l’´elimination du tableau des agents.

Hashtable getTable();

Retourne une copie du tableau des agents du syst`eme. Le tableau est de typeHashtablede Java et il donne l’´etat du syst`eme `a l’instant i-1 (ou i est l’instant d’ex´ecution), plus les agents qui ont ´et´e charg´es dans l’instant courant, avant l’appel de la m´ethode.

2. Interaction avec la machine r´eactive. Il offre la mˆeme API que la machine r´eactive de Junior, plus les m´ethodes suivantes :

void generate(String name);

void generate(String name, Object val);

G´en`ere un ´ev´enement name dans la machine. L’´ev´enement peut ˆetre un ´ev´enement valu´e qui utilise l’objetval. Cette g´en´eration implique l’utilisation duStringIdentifierd´efini dans le langage Rejo.

void suspend(); void resume();

3. Quelques m´ethodes pour obtenir des informations sur l´´etat de la machine.

int getInstant();

Retourne le nombre d’instants au cours desquels la machine r´eactive a ´et´e activ´ee.

int getRejos();

Retourne le nombre d’agents pr´esents dans le syst`eme.

String getName();

Retourne le nom du syst`eme. Ce nom est utilis´e par le service de migration et il sert `a diff´erencier plusieurs syst`emes ROS tournant sur la mˆeme machine physique. Ce nom est donn´e par l’utilisateur au moment du d´emarrage avec l’option-n.

4. Un service de migration offert par le d´emon de migration qui ex´ecute les appels de la m´ethode :

int Agent(Agent ag) throws java.rmi.RemoteException;

Cette m´ethode charge l’agentagen utilisant la m´ethodeload(ag, ros);o`u rosest un identifier du syst`eme ROS qui re¸coit l’agent.

Dans le document Rejo Langage d'Objects Réactifs et d'Agents (Page 149-152)