home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 22 / CD_ASCQ_22_0695.iso / win / fr / doc12 / scoop.mm_ / scoop.mm
Text File  |  1994-12-16  |  35KB  |  695 lines

  1. liaison_glossaire 
  2. liaison_bibliographie 
  3. fermer_fichier_lier 0
  4. branche
  5. type_branche 0
  6. l_index 0
  7. nom_branche SCOOP.MMO
  8. full_path SCOOP.MMO
  9. niveau_branche 1
  10. mots_cles 1 - Extraits du mΘmoire de maitrise 1992|2 - Auteurs:|3 - Bertrand  LE QUELLEC|4 - et Fabien DENIS
  11. branche
  12. type_branche 0
  13. l_index 1
  14. nom_branche HIERARCHIE DES CLASSES
  15. full_path SCOOP.MMO\HIERARCHIE DES CLASSES
  16. niveau_branche 2
  17. mots_cles 
  18. branche
  19. type_branche 0
  20. l_index 2
  21. nom_branche Root
  22. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root
  23. niveau_branche 3
  24. mots_cles 
  25. branche
  26. type_branche 1
  27. l_index 3
  28. nom_branche Scoop
  29. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop
  30. niveau_branche 4
  31. mots_cles METHODES VIRTUELLES:|Push|Pop|Demux|Init|Open|OpenEnable|Close|InstantiateProtl
  32. branche
  33. type_branche 0
  34. l_index 4
  35. nom_branche User
  36. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\User
  37. niveau_branche 5
  38. mots_cles 
  39. branche
  40. type_branche 0
  41. l_index 5
  42. nom_branche UDPaddr
  43. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\UDPaddr
  44. niveau_branche 5
  45. mots_cles 
  46. branche
  47. type_branche 0
  48. l_index 6
  49. nom_branche IPaddr
  50. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\IPaddr
  51. niveau_branche 5
  52. mots_cles 
  53. branche
  54. type_branche 0
  55. l_index 7
  56. nom_branche ICMPaddr
  57. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\ICMPaddr
  58. niveau_branche 5
  59. mots_cles 
  60. branche
  61. type_branche 0
  62. l_index 8
  63. nom_branche ARPaddr
  64. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\ARPaddr
  65. niveau_branche 5
  66. mots_cles 
  67. branche
  68. type_branche 0
  69. l_index 9
  70. nom_branche ETHaddr
  71. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\ETHaddr
  72. niveau_branche 5
  73. mots_cles 
  74. branche
  75. type_branche 1
  76. l_index 10
  77. nom_branche Tache
  78. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\Tache
  79. niveau_branche 5
  80. mots_cles METHODES:|Create|Pid|GetPriorite|Display
  81. branche
  82. type_branche 1
  83. l_index 11
  84. nom_branche ListeTache
  85. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\Tache\ListeTache
  86. niveau_branche 6
  87. mots_cles METHODES:|DelListe|AddListe|InsListe|AddTache|DelTache|FindTache|GetQueue|GetTete|InitTete|InitQueue|AddObjListe|InsObjListe
  88. branche
  89. type_branche 0
  90. l_index 12
  91. nom_branche Scheduler
  92. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Scoop\Tache\ListeTache\Scheduler
  93. niveau_branche 7
  94. mots_cles METHODES:|Put|Get|Exec
  95. branche
  96. type_branche 0
  97. l_index 13
  98. nom_branche NMsg
  99. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\NMsg
  100. niveau_branche 4
  101. mots_cles 
  102. branche
  103. type_branche 0
  104. l_index 14
  105. nom_branche Msg
  106. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\NMsg\Msg
  107. niveau_branche 5
  108. mots_cles METHODES:|MsgPush|MsgPop|MsgLen|MsgLen|MsgJoin|MsgBreak|MsgFree|MsgSave|MsgMakeAllStack
  109. branche
  110. type_branche 0
  111. l_index 15
  112. nom_branche Map
  113. full_path SCOOP.MMO\HIERARCHIE DES CLASSES\Root\Map
  114. niveau_branche 4
  115. mots_cles METHODES:|MapCreate|MapBind|MapResolve
  116. branche
  117. type_branche 2
  118. l_index 26
  119. nom_branche 1 - INTRODUCTION
  120. full_path SCOOP.MMO\1 - INTRODUCTION
  121. niveau_branche 2
  122. mots_cles 
  123. l_auteur 
  124. la_reference [Stroustrup 86] [Hansen 90] [Colnet 90] [Campbell 88] [Bach 89] [AFNOR]
  125. la_description
  126.     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++.
  127. 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.
  128. branche
  129. type_branche 2
  130. l_index 27
  131. nom_branche 2 - CHOIX DE D╔VELOPPEMENT
  132. full_path SCOOP.MMO\2 - CHOIX DE D╔VELOPPEMENT
  133. niveau_branche 2
  134. mots_cles 
  135. l_auteur 
  136. la_reference 
  137. la_description
  138.     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
  139. 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.
  140.     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.
  141. 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.
  142. branche
  143. type_branche 2
  144. l_index 28
  145. nom_branche 3 - PR╔SENTATION G╔N╔RALE
  146. full_path SCOOP.MMO\3 - PR╔SENTATION G╔N╔RALE
  147. niveau_branche 2
  148. mots_cles 
  149. l_auteur 
  150. la_reference 
  151. la_description
  152.     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.
  153. branche
  154. type_branche 0
  155. l_index 29
  156. nom_branche 4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
  157. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
  158. niveau_branche 2
  159. mots_cles 
  160. branche
  161. type_branche 2
  162. l_index 30
  163. nom_branche 4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
  164. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES
  165. niveau_branche 3
  166. mots_cles 
  167. l_auteur 
  168. la_reference 
  169. la_description
  170.     Certaines classes de SCOOP possΦdent des liens d'hΘritage entre elles. Seul l'hΘritage
  171. simple est utilisΘ dans l'organisation hiΘrarchique.
  172.     Les classes sont dΘcoupΘes en cinq catΘgories, les classes spΘcifiques pour chaque
  173. protocoles, les classes pour la gestion des messages, les classes pour la gestion des tΓches,
  174. la classe Scoop pour l'interface commune des protocoles et la classe User pour l'utilisation
  175. et les test de SCOOP..
  176. branche
  177. type_branche 2
  178. l_index 31
  179. nom_branche 4.1 - LES CLASSES PROTOCOLES
  180. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.1 - LES CLASSES PROTOCOLES
  181. niveau_branche 3
  182. mots_cles 
  183. l_auteur 
  184. la_reference 
  185. la_description
  186.     Pour chaque protocole est dΘfini une classe principale ôPROTLöaddr (ETHaddr,
  187. ARPadr, etc ...) qui hΘrite de la classe Scoop, et dΘfinit les fonctionnalitΘs du protocole en
  188. question. D'autres classes complΦtent leur fonctionnement, mais n'ont pas de lien
  189. d'hΘritage, ce sont des classes isolΘes, nommΘes classes internes.
  190.     Les classes internes du protocole ETH (driver ethernet) :
  191.         ò Driver, Entete, Packet.
  192.     Les classes internes du protocole ARP (Address Resolution Protocole) :
  193.         ò ArpPak, arpstate, arpent.
  194.     Les classes internes du protocole ICMP (Internet Control Message Protocole) :
  195.         ò ICMPHeader, ICMPrefix, ICMPBadMsg, ICMPFormat,
  196.         ò ICMPRedirect, ICMPErreur, ICMPTimeStamp, ICMPState.
  197.     Les classes internes du protocole IP (Internet Protocole) :
  198.         ò IPhost, IPheader, MSGlist, IPtimer, RR, IPstate, Activeid,
  199.         ò ReassemblyKey, RTE, IPOption.
  200.     Les classes internes du protocole UDP (User Datagram Protocole) :
  201.         ò Header, Sstate, Activepid.
  202. branche
  203. type_branche 2
  204. l_index 32
  205. nom_branche 4.2 - LES CLASSES MESSAGES
  206. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.2 - LES CLASSES MESSAGES
  207. niveau_branche 3
  208. mots_cles 
  209. l_auteur 
  210. la_reference 
  211. la_description
  212.     Les classes messages fournissent une panoplie de mΘthodes pour manipuler les objet
  213. messages au cours de leur passage dans les diffΘrentes couches rΘseau. Ces mΘthodes
  214. permettent entre autre la manipulation des en-tΩtes et le dΘcoupage/rΘassemblage des
  215. messages.
  216.     Les classes messages :
  217.         ò NMsg, Msg.
  218. branche
  219. type_branche 0
  220. l_index 33
  221. nom_branche 4.3 - LA GESTION DES TACHES
  222. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES
  223. niveau_branche 3
  224. mots_cles 
  225. branche
  226. type_branche 2
  227. l_index 34
  228. nom_branche 4.3 - LA GESTION DES TACHES
  229. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3 - LA GESTION DES TACHES
  230. niveau_branche 4
  231. mots_cles 
  232. l_auteur 
  233. la_reference 
  234. la_description
  235.     SCOOP offre un gestionnaire de tΓches fonctionnant α travers une liste chaεnΘe
  236. suivant deux types de queue : F.I.F.O. et L.I.F.O.. Chaque tΓche est dΘsignΘe par un appel
  237. de fonction ou l'exΘcution d'une mΘthode, ayant comme arguments les variables ôargcö,
  238. pour mentionner le nombre d'arguments, et ôargvö, pour la liste des arguments. Cette
  239. gestion existe α travers trois classes : Scheduler, ListeTache, et Tache, la premiΦre classe
  240. est la principale, et sert d'interface pour les besoins des autres objets dΘsirant gΘrer une liste
  241. de tΓches.
  242. branche
  243. type_branche 2
  244. l_index 35
  245. nom_branche 4.3.1 - LA CLASSE TACHE
  246. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3.1 - LA CLASSE TACHE
  247. niveau_branche 4
  248. mots_cles 
  249. l_auteur 
  250. la_reference 
  251. la_description
  252.     Elle possΦde les informations liΘes α une tΓche :
  253.             ò un identifiant unique,
  254.             ò la tΓche α exΘcuter avec ses arguments,
  255.             ò un numΘro de prioritΘ,
  256.             ò une pile,
  257.             ò des pointeurs de chaεnage,
  258. et offre des services de rΘcupΘration, de destruction, et de modification d'informations liΘs
  259. α l'objet impliquΘ.
  260. branche
  261. type_branche 2
  262. l_index 36
  263. nom_branche 4.3.2 - LA CLASSE LISTETACHE
  264. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3.2 - LA CLASSE LISTETACHE
  265. niveau_branche 4
  266. mots_cles 
  267. l_auteur 
  268. la_reference 
  269. la_description
  270.     Elle ne possΦde que deux pointeurs de liste, un de fin de liste et un autre de dΘbut.
  271. Ses services ciblent uniquement la manipulation des listes ainsi que des tΓches α travers une
  272. liste.
  273. branche
  274. type_branche 2
  275. l_index 37
  276. nom_branche 4.3.3 - LA CLASSE SCHEDULER
  277. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3.3 - LA CLASSE SCHEDULER
  278. niveau_branche 4
  279. mots_cles 
  280. l_auteur 
  281. la_reference 
  282. la_description
  283.     Elle gΦre l'ordonnancement des tΓches appartenant α une liste. A chaque objet
  284. Scheduler est associΘe une liste gΘrΘe par des mΘthodes de rΘcupΘration et d'insertion des
  285. tΓches suivant le type de queue choisie.
  286. branche
  287. type_branche 2
  288. l_index 38
  289. nom_branche 4.3.4 - LA HI╔RARCHIE
  290. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.3 - LA GESTION DES TACHES\4.3.4 - LA HI╔RARCHIE
  291. niveau_branche 4
  292. mots_cles 
  293. l_auteur 
  294. la_reference 
  295. la_description
  296.     La hiΘrarchie de la gestion des tΓches se dΘcompose en trois classes principales. La
  297. classe Scheduler hΘrite des deux autres classes, ce qui lui configure α la dΘclaration d'un
  298. objet, les mΘthodes et services des autres classes, et surtout une gestion transparente dÆune
  299. ou plusieurs listes, par lÆobjet qui utilise les services de la classe Scheduler.
  300. branche
  301. type_branche 2
  302. l_index 39
  303. nom_branche 4.4 - LA CLASSE SCOOP
  304. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.4 - LA CLASSE SCOOP
  305. niveau_branche 3
  306. mots_cles 
  307. l_auteur 
  308. la_reference 
  309. la_description
  310.     La principale fonction de la classe Scoop est de dΘfinir l'interface virtuelle des
  311. protocoles de communication (IP, UDP, ICMP, ARP, ETH). Les mΘthodes appartenant α
  312. l'interface commune sont dΘfinies dans la classe Scoop comme mΘthode virtuelle (notion de
  313. polymorphisme).
  314.     Ces mΘthodes sont redΘfinies au niveau de chaque classe de protocole qui  hΘrite de
  315. la classe Scoop. Ainsi pour une mΘthode donnΘe, il existe pour chaque classe de protocoles
  316. une mΘthode qui est personnalisΘe pour chaque protocole. Prenons l'exemple de la
  317. mΘthode Push () qui est dΘfinie comme mΘthode virtuelle dans la classe Scoop et qui est
  318. redΘfinie dans les classes UDPaddr et IPaddr.
  319.     DΘfinition de la classe supΘrieure Scoop :
  320.     DΘfinition de la classe IPaddr qui hΘrite des propriΘtΘs de la classe parent Scoop :
  321.     DΘfinition de la classe UDPaddr qui hΘrite des propriΘtΘs de la classe parent Scoop :
  322.     Ainsi l'appel de la mΘthode Scoop::Push () avec le protocole IP permet d'appeler la
  323. mΘthode IPaddr::Push () de maniΦre transparente. Il n'est pas obligatoire pour une classe
  324. hΘritant de la classe Scoop de redΘfinir une mΘthode virtuelle. Par exemple la classe
  325. ARPaddr hΘrite bien de la classe Scoop mais ne comporte pas de mΘthode Push ().
  326. branche
  327. type_branche 2
  328. l_index 40
  329. nom_branche 4.5 - LA CLASSE USER
  330. full_path SCOOP.MMO\4 - ORGANISATION HI╔RARCHIQUE DES CLASSES\4.5 - LA CLASSE USER
  331. niveau_branche 3
  332. mots_cles 
  333. l_auteur 
  334. la_reference 
  335. la_description
  336.     La classe User permet de tester et dÆutiliser S.C.O.O.P.. Elle hΘrite de la classe
  337. Scoop pour Ωtre aisΘment manipulΘe par les objets polymorphes du graphe.
  338.     La classe User correspond au niveau applicatif de SCOOP. Elle simule la couche
  339. utilisateur de lÆapplication. Elle se situe dans la hiΘrarchie des classes au mΩme niveau que
  340. les protocoles pour les manipuler aisΘment.
  341.     Ne faisant pas partie de lÆinitialisation du graphe de dΘpart, lÆobjet User crΘΘ possΦde
  342. certaines mΘthodes de lÆinterface virtuelle qui lui permettent dÆenvoyer et de recevoir des
  343. messages. ConstituΘe principalement de deux mΘthodes : Client et Server, lors de lÆappel
  344. α la mΘthodes d'initialisation de la classe, une tΓche est gΘnΘrΘe, et est considΘrΘe soit
  345. comme application de type client, ou soit comme application de type serveur, suivant le
  346. mode de lancement.
  347.     Le fait de crΘer une classe User hΘritant de la classe Scoop, permet une manipulation
  348. plus fine de lÆensemble de toutes les classes. En utilisant la classe User on comprend mieux
  349. la facilitΘ de crΘer un nouveau protocole et de lÆinsΘrer dans la hiΘrarchie existante, au lieu
  350. dÆavoir une architecture de couches statiques, il est plus intΘressant dÆavoir tous les
  351. protocoles au mΩme niveau et de les interconnecter α son grΘ.
  352.     La classe User est crΘΘe pour mettre en Θvidence une des utilisations de SCOOP.
  353. branche
  354. type_branche 0
  355. l_index 41
  356. nom_branche 5 - FONCTIONNEMENT G╔N╔RAL
  357. full_path SCOOP.MMO\5 - FONCTIONNEMENT G╔N╔RAL
  358. niveau_branche 2
  359. mots_cles 
  360. branche
  361. type_branche 2
  362. l_index 42
  363. nom_branche 5 - FONCTIONNEMENT G╔N╔RAL
  364. full_path SCOOP.MMO\5 - FONCTIONNEMENT G╔N╔RAL\5 - FONCTIONNEMENT G╔N╔RAL
  365. niveau_branche 3
  366. mots_cles 
  367. l_auteur 
  368. la_reference 
  369. la_description
  370.     SCOOP fonctionne α travers la crΘation d'un graphe de protocoles qui s'initialise au
  371. lancement de l'application (client ou serveur). NommΘ graphe polymorphe, car chacun des
  372. noeuds peut prendre la forme de l'objet protocole qui lui est assignΘ, il reprΘsente le chemin
  373. principal que prennent les messages. La seule chose qui n'est pas prise en compte, est la
  374. cohΘrence des envois de messages entre les diffΘrents protocoles, qui est laissΘe α la charge
  375. de l'utilisateur, cÆest-α-dire dans son choix de crΘation du graphe. Une fois le graphe
  376. constituΘ, une phase dÆinitialisation est lancΘe, qui est en partie une prise de connaissance
  377. des noeuds entre eux.
  378.     Tous les noeuds sont des objets qui appartiennent α la classe Scoop, grΓce α
  379. l'interface virtuelle dΘfinie par cette classe, chaque protocole initialisΘ α l'intΘrieur de
  380. chaque noeud peut communiquer avec les autres α l'intΘrieur du graphe, soit dans le sens
  381. montant, vers l'application utilisateur, soit dans le sens descendant, vers le rΘseau.
  382. branche
  383. type_branche 2
  384. l_index 43
  385. nom_branche 5.1 - LÆINTERFACE VIRTUELLE
  386. full_path SCOOP.MMO\5 - FONCTIONNEMENT G╔N╔RAL\5.1 - LÆINTERFACE VIRTUELLE
  387. niveau_branche 3
  388. mots_cles 
  389. l_auteur 
  390. la_reference 
  391. la_description
  392.     LÆinterface virtuelle, appelΘe aussi interface commune, reprΘsente la partie principale
  393. de la classe Scoop, cÆest par elle que transitent les messages, et cÆest elle qui assure la
  394. modularitΘ de chaque protocole, ainsi que leur intΘgration dans le graphe. Elle est
  395. commune α chaque protocole grΓce α la notion de hiΘrarchie.
  396.     Les mΘthodes sont dΘclarΘes virtuelles, et dans chaque sous classe il existe une
  397. mΘthode correspondante qui redΘfinit les actions de lÆobjet appelant. La notion de mΘthode
  398. virtuelle est ici trΦs importante, cÆest grΓce α elle que la notion de polymorphisme donne
  399. tout son potentiel α la manipulation des objets protocoles. Pour chaque objet de la classe
  400. Scoop, et pour chaque appel α une mΘthode virtuelle, ce ne sont pas les actions liΘes au
  401. type de lÆobjet, cÆest-α-dire sa classe, qui sont appelΘes, mais les actions de lÆobjet
  402. factorisΘ.
  403.     Dans le cas o∙ lÆobjet Scoop scp1 considΘrΘ prend la forme dÆun objet obj1 dÆune
  404. sous classe UDPaddr, par exemple, au moment de lÆappel dÆune mΘthode de la classe
  405. Scoop, cÆest la mΘthode de la classe UDPaddr qui est appelΘe, α laquelle appartient obj1,
  406. dans la mesure o∙ cette derniΦre classe redΘfinit la mΘthode et ses actions, dans le cas
  407. contraire, cÆest la mΘthode de lÆobjet scp1 qui est appelΘe.
  408. branche
  409. type_branche 2
  410. l_index 44
  411. nom_branche 5.2 - LA COMMUNICATION ENTRE LES NOEUDS
  412. full_path SCOOP.MMO\5 - FONCTIONNEMENT G╔N╔RAL\5.2 - LA COMMUNICATION ENTRE LES NOEUDS
  413. niveau_branche 3
  414. mots_cles 
  415. l_auteur 
  416. la_reference 
  417. la_description
  418.     Son mode de fonctionnement peut Ωtre schΘmatisΘ par une couche qui enveloppe
  419. chaque protocole, qui permet α chaque message dÆΘvoluer dÆobjet en objet. Chaque noyau
  420. de ces nouvelles entitΘs est inconnu des autres, seule la partie extΘrieure est considΘrΘe
  421. comme visible
  422.     LÆabstraction faite par lÆinterface virtuelle permet les envois de message α lÆintΘrieur
  423. du graphe. A chaque noeud, traversΘ par un message, le protocole associΘ lui applique ses
  424. mΘthodes et le renvoi au prochain noeud, et ainsi de suite, suivant le sens du message.
  425.     Une fois le graphe crΘΘ et initialisΘ, SCOOP exΘcute les tΓches de lÆutilisateur qui a
  426. choisi le r⌠le de lÆapplication, soit en serveur, soit en client. Dans les deux cas, les
  427. messages sont remontΘs jusquÆα la racine du graphe, et sont ensuite laissΘs α la charge de
  428. lÆapplication utilisateur, la classe User donne une des possibilitΘs dÆutilisation du graphe.
  429. branche
  430. type_branche 2
  431. l_index 45
  432. nom_branche 5.3 - CR╔ATION DES OBJETS DE MODEL╔ SESSION
  433. full_path SCOOP.MMO\5 - FONCTIONNEMENT G╔N╔RAL\5.3 - CR╔ATION DES OBJETS DE MODEL╔ SESSION
  434. niveau_branche 3
  435. mots_cles 
  436. l_auteur 
  437. la_reference 
  438. la_description
  439.     A la maniΦre de x-Kernel, SCOOP reprend les modΦles Session et Protocole. La
  440. crΘation des objets de modΦle Session se fait α lÆinitialisation dÆune connexion entre un
  441. client et un serveur. Avant dÆenvoyer ses messages, lÆapplication cliente doit ouvrir une
  442. session sur le noeud du graphe de niveau infΘrieur, grΓce α la mΘthode virtuelleOpen () de
  443. la classe Scoop, avec comme arguments, lÆobjet protocole reprΘsentant lÆapplication, doit
  444. Ωtre reprΘsentΘ par un objet polymorphe de la classe Scoop, le noeud du protocole dΘsirΘ
  445. (UDP, IP, ETH, ...), reprΘsentΘ aussi par un objet polymorphe, celui-ci peut Ωtre aisΘment
  446. rΘcupΘrΘ par la mΘthode GetProtlByName () de la classe Scoop, et les participants de cette
  447. connexion.
  448.     A lÆappel de la mΘthode virtuelle Open () sur un noeud du graphe, ce dernier se
  449. charge de rΘpercuter lÆappel sur le noeud de niveau infΘrieur, et ainsi de suite. A chaque
  450. rΘpercussion sur les noeuds infΘrieurs du graphe, un objet polymorphe de modΦle Session
  451. est retournΘ. LÆapplication cliente recevant en gage de bon dΘroulement de lÆappel, un
  452. objet de modΦle Session, par cet objet, lÆapplication peut envoyer ses messages sur le
  453. protocole choisi.
  454.     Par la crΘation de ces objets de modΦle Session, une liaison dynamique est crΘΘe, elle
  455. garantit lÆacheminement des messages dÆune connexion, il est ainsi possible d'ouvrir
  456. plusieurs connexions pour des acheminements diffΘrents.
  457. branche
  458. type_branche 2
  459. l_index 46
  460. nom_branche 5.4 - LÆACHEMINEMENT DES MESSAGES
  461. full_path SCOOP.MMO\5 - FONCTIONNEMENT G╔N╔RAL\5.4 - LÆACHEMINEMENT DES MESSAGES
  462. niveau_branche 3
  463. mots_cles 
  464. l_auteur 
  465. la_reference 
  466. la_description
  467.     Les messages sont transmis α travers le graphe grΓce α deux principales mΘthodes :
  468. Push () et Pop (). La premiΦre pousse un message dans le sens descendant, alors que la
  469. seconde pousse le message vers le sens ascendant. Dans le cas de plusieurs objets de
  470. modΦle Session pour un mΩme objet de modΦle Protocole, la mΘthode Demux () se charge
  471. de diriger le flux de messages vers le bon objet Session.
  472. branche
  473. type_branche 2
  474. l_index 47
  475. nom_branche 5.5 - LA GESTION DES MESSAGES
  476. full_path SCOOP.MMO\5 - FONCTIONNEMENT G╔N╔RAL\5.5 - LA GESTION DES MESSAGES
  477. niveau_branche 3
  478. mots_cles 
  479. l_auteur 
  480. la_reference 
  481. la_description
  482.     Les Classes Msg et NMsg fournissent un jeu de mΘthodes pour manipuler les objets
  483. messages (ajout ou retrait des en-tΩtes, assemblage et rΘassembage des messages, etc...).
  484. La classe Map est utilisΘe par les protocoles pour diriger un paquet qui arrive d'un
  485. protocole de niveau supΘrieur, ou infΘrieur, vers l'objet Session appropriΘ. Ces mΘthodes
  486. reprennent en grande partie la librairie message fournie dans x-Kernel. Le message est
  487. composΘ de trois ΘlΘments :
  488.     ò Une pile qui englobe les en-tΩtes du message.
  489.     ò Un index qui reprΘsente le haut de la pile.
  490.     ò Un pointeur vers un graphe de buffer qui englobe les donnΘes.
  491.     Le principale avantage de cette structuration des messages est que les en-tΩtes sont
  492. ajoutΘs ou enlevΘs en manipulant la pile, sans recopier le message. Lorsque le message est
  493. de petite taille il est contenu dans la pile. Lorsque le message est plus important il est
  494. reprΘsentΘ par un graphe acyclique.
  495.     Lorsqu'un message parcoure les diffΘrents protocoles, des en-tΩtes sont ajoutΘs ou
  496. enlevΘs en dΘplaτant l'index du haut de la pile. Chaque protocole par lÆintermΘdiaire des
  497. mΘthodes virtuelles Push () et Pop () peut insΘrΘ, ou lÆextraire, son en-tΩte. Mais seule la
  498. mΘthode virtuelle Demux () extrait les informations de lÆen-tΩte pour diriger le message
  499. vers le bon objet Session, dans le cas ou le message vient du rΘseau.
  500.     Lorsque le message ne peut plus Ωtre contenu dans la pile, la pile est de taille fixe et
  501. ne peut donc pas Ωtre agrandie, un dΘcoupage en forme de graphe est alors effectuΘe. Dans
  502. le schΘma suivant la structure du message est dans une Θtape intermΘdiaire, le message est
  503. trop grand pour faire partie de la pile, mais il est contenu dans un simple buffer.
  504.     Avant dÆenvoyer un message dans le graphe des protocoles, il faut obtenir
  505. lÆouverture dÆobjets de type Session, qui, avec les participants de la communication,
  506. permettent de baliser le chemin que prennent les messages. Cet service sÆobtient par la
  507. mΘthode Open () de la classe Scoop. Cette mΘthode rΘpercute la demande sur lÆensemble
  508. du graphe, et renvoie lÆobjet de type Session, en rΘponse dÆun bon dΘroulement, ensuite il
  509. suffira dÆenvoyer les messages par lÆintermΘdiaire de cet objet, et grΓce au service de la
  510. mΘthode Push () de la classe Scoop. Chaque objet session sÆoccupe de gΘrer la liaison
  511. entre deux objets de type Protocole, et permet ainsi le dΘplacement des messages α travers
  512. les diffΘrents protocoles de communication.
  513.     Dans le cas ou un message remonte du rΘseau, la mΘthode virtuelle Demux (), dirige
  514. le message dans son parcours, grΓce aux objets de la classe Map, qui sauvegardent dans
  515. une liste les diffΘrents objets Scoop de type Session, pour les diffΘrents protocoles
  516. existants. La gestion de cette liste est assurΘe par les mΘthodes de la classe Map, elle
  517. permet ainsi α chaque protocole de possΘder plusieurs objets de type Session, pour assurer
  518. les diffΘrents voyages α travers le graphe des messages. LÆobjet Map gΦre sa liste, par
  519. ôhash codingö , par lÆintermΘdiaire de clΘs, α travers une table, ainsi chaque protocole
  520. peut rΘcupΘrer lÆobjet de type Session correspondant au message arrivant.
  521.     Les objets Map peuvent sauvegarder dans leur liste tout type dÆobjet, puisque leur
  522. services sont aussi utilisΘs pour y sauvegarder des objets de la classe.RTE, classe interne α
  523. la classe IPaddr.
  524. branche
  525. type_branche 0
  526. l_index 48
  527. nom_branche 6 - IMPL╔MENTATION D'UN PROTOCOLE
  528. full_path SCOOP.MMO\6 - IMPL╔MENTATION D'UN PROTOCOLE
  529. niveau_branche 2
  530. mots_cles 
  531. branche
  532. type_branche 2
  533. l_index 49
  534. nom_branche 6 - IMPL╔MENTATION D'UN PROTOCOLE
  535. full_path SCOOP.MMO\6 - IMPL╔MENTATION D'UN PROTOCOLE\6 - IMPL╔MENTATION D'UN PROTOCOLE
  536. niveau_branche 3
  537. mots_cles 
  538. l_auteur 
  539. la_reference 
  540. la_description
  541.     SCOOP permet une implΘmentation simple d'un nouveau protocole de
  542. communication. La premiΦre rΦgle α respecter est l'hΘritage que ce nouveau protocole doit
  543. obtenir de la classe supΘrieure Scoop. Par cette simple adjonction le nouveau protocole
  544. implΘmentΘ gagnera en abstraction pour son utilisation α partir d'un objet Scoop.
  545.     Mais pour une correcte coopΘration avec les autres protocoles, la classe principale de
  546. cette nouvelle implΘmentation doit obligatoirement possΘder l'interface virtuelle α toutes les
  547. classes dΘrivΘes de la classe majeure Scoop. Cette interface commune permet une
  548. utilisation immΘdiate de ces fonctionnalitΘs par d'autres objets, et inversement.
  549.     En respectant ce minimum, la coordination entre les objets se fera automatiquement.
  550. A l'intΘrieur de la nouvelle classe, la crΘation et l'appel α des objets internes sont tout α fait
  551. acceptΘes. La nouvelle classe doit Ωtre considΘrΘe par les autres objets protocoles, comme
  552. une "boite avec des entrΘes", chaque objet effectue son travail sur le message dont il
  553. connaεt le format principal commun α toute la hiΘrarchie.
  554. branche
  555. type_branche 2
  556. l_index 50
  557. nom_branche 6.1 - IMPL╔MENTATION DE LA CLASSE UDPaddr
  558. full_path SCOOP.MMO\6 - IMPL╔MENTATION D'UN PROTOCOLE\6.1 - IMPL╔MENTATION DE LA CLASSE UDPaddr
  559. niveau_branche 3
  560. mots_cles 
  561. l_auteur 
  562. la_reference 
  563. la_description
  564.     Dans le premier stade de lÆimplΘmentation il est nΘcessaire de modulariser la nouvelle
  565. classe en dΘtachant les diffΘrents services de la classe. La classe UDPaddr est la plus
  566. simple α implΘmenter, reprenant les fonctionnalitΘs de la couche UDP de x-Kernel, et
  567. nÆaffectant que trΦs peu les messages, son implΘmentation sÆest faite α travers les mΘthodes
  568. virtuelles de la classe Scoop. La classe UDPaddr ne possΦde que trΦs peu de mΘthodes
  569. non hΘritΘes de la classe supΘrieure, elle redΘfinit la majeure partie des mΘthodes.
  570.     Reprenant les fonctionnalitΘs dÆune couche UDP standard elle affecte les messages α
  571. travers la classe Header interne, qui contient les informations : du ôchecksumö, de la taille,
  572. et des ports de communication du message qui transite par elle. Les classes sont dites
  573. internes, dans le cas o∙ elles correspondent α une spΘcificitΘ dÆun protocole, et ne sont
  574. connus dÆaucune autre classe que la classe principale du protocole, cÆest-α-dire ici
  575. UDPaddr.
  576. branche
  577. type_branche 2
  578. l_index 51
  579. nom_branche 6.2 - IMPL╔MENTATION DE LA CLASSE ETHaddr
  580. full_path SCOOP.MMO\6 - IMPL╔MENTATION D'UN PROTOCOLE\6.2 - IMPL╔MENTATION DE LA CLASSE ETHaddr
  581. niveau_branche 3
  582. mots_cles 
  583. l_auteur 
  584. la_reference 
  585. la_description
  586.     La classe ETHaddr redΘfinit les mΘthodes hΘritΘes de la classe Scoop, et gΦre les
  587. messages avec la classe Driver. SCOOP Θtant un simulateur au niveau utilisateur, grΓce α
  588. la classe Driver, les objets ETHaddr envoient et reτoivent les messages, comme si ces
  589. derniers circulaient α travers un driver communiquant avec la carte ethernet de la station.
  590. La classe Driver sÆoccupe de lÆenvoi vΘritable des messages sur le rΘseau via le mΘcanisme
  591. des sockets. Dans le cas dÆune modification de SCOOP, par lÆajout dÆun dialogue direct
  592. avec la carte rΘseau, il suffira dÆajouter α la classe Driver une sous classe qui se chargera
  593. du dialogue. Le choix pourra alors se faire entre la simulation ou lÆaccΦs direct au rΘseau,
  594. par lÆintermΘdiaire dÆun objet Driver dΘjα existant dans la classe ETHaddr par le simple
  595. appel de tel ou tel service.
  596. branche
  597. type_branche 2
  598. l_index 52
  599. nom_branche 7 - COMPILATION ET PORTAGE
  600. full_path SCOOP.MMO\7 - COMPILATION ET PORTAGE
  601. niveau_branche 2
  602. mots_cles 
  603. l_auteur 
  604. la_reference 
  605. la_description
  606. Le choix d'un compilateur C++ est un ΘlΘment trΦs important en cas de portage d'une
  607. application. Le C++ n'est pas suffisamment normalisΘ, il est en Θvolution constante, de
  608. plus, la plupart dÆentre eux se contentent de gΘnΘrer du code C qui sera en suite recompilΘ.
  609. Pour SCOOP le compilateur g++ du GNU a ΘtΘ choisi pour sa plate-forme qui peut
  610. Ωtre installΘe sur de nombreuses machines (HP, SUN, SONY, PC compatibles, etc ...), ce
  611. qui garantit, dans le meilleur des cas, un code indΘpendant du matΘriel, dans le soucis
  612. d'Θcrire un code C++ "portable", car malgrΘ les caractΘristiques de ce langage de haut
  613. niveau, le C++ est loin d'Ωtre implΘmentΘ de la mΩme maniΦre sur toutes les machines.
  614.     C'est pour toutes ces raisons, que SCOOP a ΘtΘ testΘ avec d'autres compilateurs, dit
  615. conforme AT&T : sur SONY, HP, SUN, et micro-ordinateurs (PC : Turbo C++,
  616. Commodore Amiga : Lattice C++). Il s'est avΘrΘ que certaines implΘmentations C++ sont α
  617. manipuler avec prudence. La liste de toutes ces anomalies ne sera pas ici dΘtaillΘe, mais
  618. quelques particularitΘs utilisΘes dans SCOOP sont α dΘtailler.
  619.     Les pointeurs sur les mΘthodes et leur utilisation par des objets de types diffΘrents
  620. peuvent Ωtre α l'origine de nombreuses erreurs de programmation. Avec le langage C
  621. l'utilisation de pointeurs sur fonctions est trΦs facile, et cette facilitΘ se retrouve avec le
  622. C++, la difficultΘ commence quand il s'agit de pointeurs sur les mΘthodes d'un objet
  623. particulier manipulΘ par un autre objet de type diffΘrent.
  624.     En C++ il est possible de prendre l'adresse d'une fonction membre, le principal
  625. inconvΘnient est qu'il est obligatoire de prΘciser le type du pointeur [str86]. Et suivant les
  626. compilateurs cette implΘmentation est plus ou moins stricte, ou bien oblige une grammaire
  627. diffΘrente, ce qui peut obliger une hiΘrarchie non souhaitΘe pour arriver au service voulu.
  628.     L'utilisation du type ôconstö, α la place de certain ô#defineö n'est pas toujours ce qu'il
  629. y a de mieux α faire, surtout pour certain passage d'argument aux mΘthodes, qui modifie la
  630. valeur de l'argument concernΘ, le compilateur C++ sur SUN est le seul α se ôplanterö
  631. littΘralement sans donner la moindre indication. Le passage d'argument implicite est
  632. souvent proscrit, ce qui oblige α prΘciser le type exact de l'argument par des conversion de
  633. types souvent abusifs et pouvant apparaεtre inutiles.
  634. branche
  635. type_branche 2
  636. l_index 53
  637. nom_branche 8 - ORGANISATION ET LANCEMENT DE S.C.O.O.P.
  638. full_path SCOOP.MMO\8 - ORGANISATION ET LANCEMENT DE S.C.O.O.P.
  639. niveau_branche 2
  640. mots_cles 
  641. l_auteur 
  642. la_reference 
  643. la_description
  644.     Les sources de S.C.O.O.P. se regroupent dans un rΘpertoire Scoop, comprenant deux
  645. rΘpertoires principaux :
  646.     inc : qui contient tous les fichiers include .h, qui possΦdent en grande partie
  647.        les dΘfinitions des classes.
  648.      src : qui contient les fichiers sources .cc. Ils possΦdent les sources des mΘthodes
  649.        des classes, et vont donc de paire avec les fichiers du rΘpertoire inc..
  650.     Pour chaque classe dΘfinie, il existe, un ou plusieurs fichiers ôincludeö et un fichier
  651. source. Par exemple pour la dΘfinition dans SCOOP du protocole UDP, il existe un fichier
  652. udp.cc qui contient uniquement la dΘfinition des mΘthodes, un fichier udp.h pour la
  653. dΘfinition de la classe UDPaddr, et un fichier udp_i.h pour la dΘfinition des classes internes
  654. α la classe UDPaddr.
  655. Les autres rΘpertoires sont :
  656.     ò RCS : contient les versions de lÆensemble des fichiers.
  657.     ò tmp : pour les fichiers temporaires.
  658. Les autres fichiers sont :
  659.     ò bmakeobj : fichier makefile pour la gΘnΘration de fichiers objets de compilation.
  660.     ò bmakebin : fichier makefile pour la gΘnΘration de fichiers binaires de
  661.         compilation.
  662.     ò mkc : lance une compilation totale de SCOOP.
  663.     ò mkr : lance un archivage RCS des fichiers modifiΘs.
  664.     ò version : script kshell de gestion des versions de lÆensemble des fichiers.
  665.     Pour compiler en mode ôdebugö, et obtenir la trace de lÆexΘcution du programme il
  666. suffit de lancer la compilation avec le script mkc et lÆoption -g.
  667.     > mkc -g
  668.     Une fois lÆexΘcutable, nommΘ main, crΘΘ, il suffit de le lancer soit en mode client soit
  669. en mode serveur. Pour cette exΘcution on considΦre quÆune application est attachΘe α
  670. SCOOP pour le bon fonctionnement de lÆexΘcutable. La classe User dΘfinit dans les fichiers
  671. user.h et user.cc est un exemple dÆutilisation.
  672.     > main -s -p <numero_de_port >        # en mode serveur.
  673.     > main -c <serveur> -p <numero_de_port>    # en mode client.
  674.     Dans la crΘation dÆun systΦme de communication orientΘ objet pour protocoles, un
  675. nouveau concept est apportΘ aux techniques de communication entre machines distantes.
  676. La maniΦre de vΘhiculer les messages nÆΘvolue que trΦs peu, lÆatout principal se trouve
  677. dans la modularitΘ dÆun tel systΦme, seuls les protocoles UDP/IP ont ΘtΘ implΘmentΘs, mais
  678. le principe de base est lα, pouvoir suffisamment modulariser des protocoles pour les
  679. interconnecter entre eux, ou les faire coexister, dans un minimum dÆeffort de gestion.
  680.     Si un tel systΦme peut Ωtre dΘveloppΘ plus profondΘment, et gΘnΘralisΘ, la venue dÆun
  681. nouveau protocole ne serait plus un problΦme, mais reviendrait α une factorisation dans une
  682. hiΘrarchie dΘjα existante. De plus lÆΘvolution dÆun des protocoles nÆaffecterait pas
  683. lÆimplΘmentation des autres.
  684.     Si on regarde S.C.O.O.P. avec du recul, nÆassistons nous pas α lÆΘmergence dÆune
  685. nouvelle norme ?, une de plus ?. Une norme dictant la maniΦre dÆimplΘmenter un protocole
  686. dans un systΦme qui superviserait la coordination de tous les protocoles.
  687.     A partir du moment ou lÆon dΘsire un systΦme regroupant une compatibilitΘ la plus
  688. gΘnΘrale, il est nΘcessaire dÆΘdifier une base qui devra Ωtre respectΘe, ce minima, qui est
  689. commun α tous, pourra rΘunir les diffΘrents protocoles de communication. La notion
  690. dÆorientΘ objet aide α gΘnΘraliser un tel concept, puisquÆil est α la base mΩme du mode de
  691. programmation, la hiΘrarchisation et la rΘutilisation du code existant sont lα pour le
  692. rappeler.
  693. Forme dÆadressage dispersΘ, sur une table de taille limitΘe au nombre de clΘs utilisΘs. Une mΘthode
  694. permet dÆassocier α toute clΘ une valeur dans un interval donnΘ.
  695.