S.C.O.O.P., SystΦme de Communication OrientΘ Objet pour Protocoles est un simulateur fonctionnant au dessus d'Unix. Il reprend dans ses grandes lignes les fonctionnalitΘs du simulateur x-Kernel. La principale propriΘtΘ de SCOOP est qu'il est entiΦrement conτu dans un langage orientΘ objet : le C++.
Certaines fonctionnalitΘs de x-Kernel ont ΘtΘ assouplies ou supprimΘes (gestion de la mΘmoire, gestionnaire dÆΘvΘnements, gestion des processus), le but Θtant de montrer une implΘmentation dans un langage orientΘ objet de la composante principale de x-Kernel : son gestionnaire de communication, α la base a ΘtΘ conτu en langage C. SCOOP simule les diffΘrentes couches rΘseau (UDP, IP, ARP, ICMP) le driver ethernet Θtant en fait l'ouverture d'une socket. Nous avons conservΘ la modularitΘ d'x-Kernel, et donc la possibilitΘ d'implΘmenter facilement un nouveau protocole.
branche
type_branche 2
l_index 27
nom_branche 2 - CHOIX DE D╔VELOPPEMENT
full_path SCOOP.MMO\2 - CHOIX DE D╔VELOPPEMENT
niveau_branche 2
mots_cles
l_auteur
la_reference
la_description
SCOOP a ΘtΘ dΘveloppΘ en C++ avec le compilateur GNU (g++, version 1.40) sur des stations de travail SONY News. AprΦs l'Θtude du systΦme d'exploitation Choices et de
x-Kernel il nous a semblΘ que le langage C++ est le plus adaptΘ pour l'Θlaboration de SCOOP. De plus, notre connaissance du langage C, nous permettait sans doute un passage plus rapide vers le C++ que vers un autre langage orientΘ objet.
Bien que x-Kernel ait ΘtΘ pensΘ dans un style orientΘ objet, il a fallu Θtudier un nouveau fonctionnement pour pouvoir l'adapter au C++ tout en gardant sa philosophie.
Notre premier travail a ΘtΘ de dΘfinir les classes d'objets ainsi que les liens d'hΘritage entre les classes. Ensuite nous avons Θcrit tout le code en C++, parfois nous n'avons fait qu'une simple transposition. Mais le C++ Θtant beaucoup moins permissif que le langage C, nous avons souvent rΘΘcrit le code d'une autre maniΦre en pensant en terme d'objet, et non plus en terme procΘdural comme avec le langage C.
branche
type_branche 2
l_index 28
nom_branche 3 - PR╔SENTATION G╔N╔RALE
full_path SCOOP.MMO\3 - PR╔SENTATION G╔N╔RALE
niveau_branche 2
mots_cles
l_auteur
la_reference
la_description
Le simulateur SCOOP fonctionne au dessus d'Unix et simule les diffΘrentes couches du rΘseau. Nous avons choisi un modΦle de type client-serveur pour illustrer le fonctionnement de SCOOP. SCOOP est lancΘ simultanΘment sur deux stations : une en mode client et l'autre en mode serveur. Le serveur aprΦs son initialisation (on simule le boot d'une station), est en attente d'une interruption. Le client, aprΦs lui aussi Ωtre passΘ par une phase d'initialisation, envoi une sΘrie de messages au serveur.
branche
type_branche 0
l_index 29
nom_branche 4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
niveau_branche 2
mots_cles
branche
type_branche 2
l_index 30
nom_branche 4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
niveau_branche 3
mots_cles
l_auteur
la_reference
la_description
Certaines classes de SCOOP possΦdent des liens d'hΘritage entre elles. Seul l'hΘritage
simple est utilisΘ dans l'organisation hiΘrarchique.
Les classes sont dΘcoupΘes en cinq catΘgories, les classes spΘcifiques pour chaque
protocoles, les classes pour la gestion des messages, les classes pour la gestion des tΓches,
la classe Scoop pour l'interface commune des protocoles et la classe User pour l'utilisation
et les test de SCOOP..
branche
type_branche 2
l_index 31
nom_branche 4.1 - LES CLASSES PROTOCOLES
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.1 - LES CLASSES PROTOCOLES
niveau_branche 3
mots_cles
l_auteur
la_reference
la_description
Pour chaque protocole est dΘfini une classe principale ôPROTLöaddr (ETHaddr,
ARPadr, etc ...) qui hΘrite de la classe Scoop, et dΘfinit les fonctionnalitΘs du protocole en
question. D'autres classes complΦtent leur fonctionnement, mais n'ont pas de lien
d'hΘritage, ce sont des classes isolΘes, nommΘes classes internes.
Les classes internes du protocole ETH (driver ethernet) :
ò Driver, Entete, Packet.
Les classes internes du protocole ARP (Address Resolution Protocole) :
ò ArpPak, arpstate, arpent.
Les classes internes du protocole ICMP (Internet Control Message Protocole) :
ò ICMPHeader, ICMPrefix, ICMPBadMsg, ICMPFormat,
ò ICMPRedirect, ICMPErreur, ICMPTimeStamp, ICMPState.
Les classes internes du protocole IP (Internet Protocole) :
ò IPhost, IPheader, MSGlist, IPtimer, RR, IPstate, Activeid,
ò ReassemblyKey, RTE, IPOption.
Les classes internes du protocole UDP (User Datagram Protocole) :
ò Header, Sstate, Activepid.
branche
type_branche 2
l_index 32
nom_branche 4.2 - LES CLASSES MESSAGES
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.2 - LES CLASSES MESSAGES
niveau_branche 3
mots_cles
l_auteur
la_reference
la_description
Les classes messages fournissent une panoplie de mΘthodes pour manipuler les objet
messages au cours de leur passage dans les diffΘrentes couches rΘseau. Ces mΘthodes
permettent entre autre la manipulation des en-tΩtes et le dΘcoupage/rΘassemblage des
messages.
Les classes messages :
ò NMsg, Msg.
branche
type_branche 0
l_index 33
nom_branche 4.3 - LA GESTION DES TACHES
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES
niveau_branche 3
mots_cles
branche
type_branche 2
l_index 34
nom_branche 4.3 - LA GESTION DES TACHES
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3 - LA GESTION DES TACHES
niveau_branche 4
mots_cles
l_auteur
la_reference
la_description
SCOOP offre un gestionnaire de tΓches fonctionnant α travers une liste chaεnΘe
suivant deux types de queue : F.I.F.O. et L.I.F.O.. Chaque tΓche est dΘsignΘe par un appel
de fonction ou l'exΘcution d'une mΘthode, ayant comme arguments les variables ôargcö,
pour mentionner le nombre d'arguments, et ôargvö, pour la liste des arguments. Cette
gestion existe α travers trois classes : Scheduler, ListeTache, et Tache, la premiΦre classe
est la principale, et sert d'interface pour les besoins des autres objets dΘsirant gΘrer une liste
de tΓches.
branche
type_branche 2
l_index 35
nom_branche 4.3.1 - LA CLASSE TACHE
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3.1 - LA CLASSE TACHE
niveau_branche 4
mots_cles
l_auteur
la_reference
la_description
Elle possΦde les informations liΘes α une tΓche :
ò un identifiant unique,
ò la tΓche α exΘcuter avec ses arguments,
ò un numΘro de prioritΘ,
ò une pile,
ò des pointeurs de chaεnage,
et offre des services de rΘcupΘration, de destruction, et de modification d'informations liΘs
α l'objet impliquΘ.
branche
type_branche 2
l_index 36
nom_branche 4.3.2 - LA CLASSE LISTETACHE
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3.2 - LA CLASSE LISTETACHE
niveau_branche 4
mots_cles
l_auteur
la_reference
la_description
Elle ne possΦde que deux pointeurs de liste, un de fin de liste et un autre de dΘbut.
Ses services ciblent uniquement la manipulation des listes ainsi que des tΓches α travers une
liste.
branche
type_branche 2
l_index 37
nom_branche 4.3.3 - LA CLASSE SCHEDULER
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3.3 - LA CLASSE SCHEDULER
niveau_branche 4
mots_cles
l_auteur
la_reference
la_description
Elle gΦre l'ordonnancement des tΓches appartenant α une liste. A chaque objet
Scheduler est associΘe une liste gΘrΘe par des mΘthodes de rΘcupΘration et d'insertion des
tΓches suivant le type de queue choisie.
branche
type_branche 2
l_index 38
nom_branche 4.3.4 - LA HI╔RARCHIE
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3.4 - LA HI╔RARCHIE
niveau_branche 4
mots_cles
l_auteur
la_reference
la_description
La hiΘrarchie de la gestion des tΓches se dΘcompose en trois classes principales. La
classe Scheduler hΘrite des deux autres classes, ce qui lui configure α la dΘclaration d'un
objet, les mΘthodes et services des autres classes, et surtout une gestion transparente dÆune
ou plusieurs listes, par lÆobjet qui utilise les services de la classe Scheduler.
branche
type_branche 2
l_index 39
nom_branche 4.4 - LA CLASSE SCOOP
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.4 - LA CLASSE SCOOP
niveau_branche 3
mots_cles
l_auteur
la_reference
la_description
La principale fonction de la classe Scoop est de dΘfinir l'interface virtuelle des
protocoles de communication (IP, UDP, ICMP, ARP, ETH). Les mΘthodes appartenant α
l'interface commune sont dΘfinies dans la classe Scoop comme mΘthode virtuelle (notion de
polymorphisme).
Ces mΘthodes sont redΘfinies au niveau de chaque classe de protocole qui hΘrite de
la classe Scoop. Ainsi pour une mΘthode donnΘe, il existe pour chaque classe de protocoles
une mΘthode qui est personnalisΘe pour chaque protocole. Prenons l'exemple de la
mΘthode Push () qui est dΘfinie comme mΘthode virtuelle dans la classe Scoop et qui est
redΘfinie dans les classes UDPaddr et IPaddr.
DΘfinition de la classe supΘrieure Scoop :
DΘfinition de la classe IPaddr qui hΘrite des propriΘtΘs de la classe parent Scoop :
DΘfinition de la classe UDPaddr qui hΘrite des propriΘtΘs de la classe parent Scoop :
Ainsi l'appel de la mΘthode Scoop::Push () avec le protocole IP permet d'appeler la
mΘthode IPaddr::Push () de maniΦre transparente. Il n'est pas obligatoire pour une classe
hΘritant de la classe Scoop de redΘfinir une mΘthode virtuelle. Par exemple la classe
ARPaddr hΘrite bien de la classe Scoop mais ne comporte pas de mΘthode Push ().
branche
type_branche 2
l_index 40
nom_branche 4.5 - LA CLASSE USER
full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.5 - LA CLASSE USER
niveau_branche 3
mots_cles
l_auteur
la_reference
la_description
La classe User permet de tester et dÆutiliser S.C.O.O.P.. Elle hΘrite de la classe
Scoop pour Ωtre aisΘment manipulΘe par les objets polymorphes du graphe.
La classe User correspond au niveau applicatif de SCOOP. Elle simule la couche
utilisateur de lÆapplication. Elle se situe dans la hiΘrarchie des classes au mΩme niveau que
les protocoles pour les manipuler aisΘment.
Ne faisant pas partie de lÆinitialisation du graphe de dΘpart, lÆobjet User crΘΘ possΦde
certaines mΘthodes de lÆinterface virtuelle qui lui permettent dÆenvoyer et de recevoir des
messages. ConstituΘe principalement de deux mΘthodes : Client et Server, lors de lÆappel
α la mΘthodes d'initialisation de la classe, une tΓche est gΘnΘrΘe, et est considΘrΘe soit
comme application de type client, ou soit comme application de type serveur, suivant le
mode de lancement.
Le fait de crΘer une classe User hΘritant de la classe Scoop, permet une manipulation
plus fine de lÆensemble de toutes les classes. En utilisant la classe User on comprend mieux
la facilitΘ de crΘer un nouveau protocole et de lÆinsΘrer dans la hiΘrarchie existante, au lieu
dÆavoir une architecture de couches statiques, il est plus intΘressant dÆavoir tous les
protocoles au mΩme niveau et de les interconnecter α son grΘ.
La classe User est crΘΘe pour mettre en Θvidence une des utilisations de SCOOP.