WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

La tolérance aux pannes des algorithmes de partage de ressources dans les systèmes répartis et les réseaux Ad Hoc (simulation par ns-2)

( Télécharger le fichier original )
par Sami et Abdelmadjid Oubbati et Benarfa
Université Amar Telidji Laghouat - Ingénieur d'état en informatique 2010
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

REpuBLiQuE ALGERiENNE DEMocRATiQuE ET PopuLAiRE
MiNisTERE DE L'ENsEiGNEMENT SupERiEuR ET DE LA REcHERcHE SciENTiFiQuE

UNivERsiTI AMMAR TELiDji

LAGHouAT

FAcuLTE DEs SciENcEs ET SciENcEs DE L'INGENiERiE
DEpARTEMENT DE GENiE INFoRMATiQuE

PRojET DE FiN DTuDE

PouR L'OBTENTioN Du DipLoME

D'INGÉNIEUR D'ÉTAT EN INFORMATIQUE

OpTioNs : INTELLiGENcE ARTiFiciELLE

Thème:

LA ToLERANcE AuX pANNEs DEs

ALGoRiTHMEs DE pARTAGE DE

REssouRcEs DANs LEs sysTEMEs

RépARTis ET LEs RésEAuX AD HOC

(SiMuLATioN pAR NS-2)

Réalisé par :

BENARFA ABDELMADjiD ET OuBBATi OMAR SAMi

Encadré par :

MR ALLAoui TAHAR.

D'ORDRE : / 2010-PFE / DGI

Nous dédions ce mémoire
à
nos parents
qui ont tant participés à l'aboutissement de ce travail
à
tous les membres de la famille
à
nos meilleurs amis de l'École Coranique (Chikh Mohamed Azoz)

REMERciEMENTs

N

ous remercions Dieu de nous avoir donné la force physique et intellectuelle pour accomplir ce travail, et pour les richesses dont il nous comble.

Ces quelques lignes ne pourront jamais exprimer la reconnaissance que nous éprouvons envers tous ceux qui, de près ou de loin, ont contribué par leurs conseils, leurs encouragements ou leurs amitiés à l'aboutissement de ce travail.

Nos vifs remerciements accompagnés de toute nos gratitudes vont tout d'abord à notre encadreur Mr Allaoui Tahar, pour nous avoir proposé cet intéressant sujet et pour les précieux conseils et orientations qu'il nous a prodigués. Nous le remercions pour sa disponibilité, son aide, ses précieux conseils, ses critiques constructives, ses explications et suggestions pertinentes et enfin, pour avoir apporté tant de soins à la réalisation de ce projet de fin d'études.

Nous remercions tous les membres du jury pour l'immense honneur qu'ils nous font en acceptant d'évaluer ce modeste travail.

RéSUMé

L

E problème de la K-exclusion mutuelle est un heritage important du problème de l'exclusion mutuelle dans les systèmes repartis et dans les reseaux AD HOC, ce problème a connu une evolution sans cesse dans un contexte où plusieurs algorithmes ont ete proposes afin de resoudre ce problème.

Dans ce memoire nous allons d'abord introduire le concept des systèmes repartis et les reseaux AD HOC, ce qui va nous permettre de mettre l'accent sur le problème de l'exclusion mutuelle et sa generalisation en K ressources d'un cote, et d'expliquer la notion de la tolerance aux pannes qui permet d'augmenter la performance des algorithmes d'un autre cote.

Nous presentons egalement des algorithmes traitant le problème de la K-exclusion mutuelle, et assurant la tolerance aux pannes dans les systèmes repartis et dans les reseaux AD HOC.

Nous avons utilise l'outil de simulation NS-2 afin d'etudier la performance des algorithmes proposes et pour specifier les paramètres ayant une influence sur la performance de ces algorithmes.

Mots-clés : Système reparti, Reseau AD HOC, Algorithmique reparti, Exclusion mutuelle, K-exclusion mutuelle, Simulation, NS-2.

ABSTRACT

T

HE K-mutual exclusion problem is an important legacy of the mutual exclusion problem in distributed systems and in the AD HOC networks, this problem has known a constantly evolution in context where many algorithms have been proposed to solve this problem.

In this thesis, we will first introduce the concept of distributed systems and the AD HOC networks, which will allow us to focus on the mutual exclusion problem and its generalization to K resources on the one hand, and explain the concept of the fault tolerance which can increase the performance of algorithms on the other hand.

We also present algorithms that treat the K-mutual exclusion problem, and ensuring the fault tolerance in distributed systems and the AD HOC networks.

We used the NS-2 simulation tool, to study the performance of proposed algorithms and to specify the parameters that influence the performance of these algorithms.

Key-words : Distributed systems, Mobile AD HOC Network (MANET), Distributed algorithm, Mutual exclusion, K-mutual exclusion, Simulation, NS-2.

TABLE DEs mATièREs

TABLE DEs mATièREs vi

LisTE DEs FiGuREs x

INTRoDucTioN GéNéRALE 1

1

2

NoTioNs GéNéRALEs

1.1 SysTèmE RépARTi

1.1.1 Introduction

1.1.2 Définition d'un système réparti

1.1.3 Les caractéristiques d'un système réparti

1.1.4 Les avantages et les inconvénients

1.1.4.1 Avantages

1.1.4.2 Inconvénients

1.1.5 Problèmes liés aux systèmes répartis

1.1.6 Conclusion

1.2 LEs RésEAux AD HOC

1.2.1 Introduction

1.2.2 Réseaux mobiles sans fil

1.2.2.1 Les réseaux mobiles avec infrastructure

1.2.2.2 Les réseaux mobiles sans infrastructure

1.2.3 Les réseaux mobiles AD HOC

1.2.3.1 Les caractéristiques des réseaux AD HOC

1.2.3.2 Les avantages des réseaux AD HOC

1.2.3.3 Les inconvénients des réseaux AD HOC

1.2.3.4 Applications des réseaux AD HOC

1.2.3.5 Problèmes liés aux réseaux AD HOC

1.2.4 Problème de routage dans les réseaux AD HOC

1.2.4.1 Définition du routage

1.2.4.2 Classification des protocoles de routage

1.2.4.2.a Les protocoles de routage proactifs

1.2.4.2.b Les protocoles de routage réactifs (à la demande) .

1.2.4.2.c Les protocoles de routage hybrides

CoNcLusioN

LE pRoBLèmE DE L'ExcLusioN muTuELLE ET LA ToLéRANcE Aux pANNEs

2.1 LE pRoBLèmE DE L'ExcLusioN muTuELLE

2.1.1 Introduction

2.1.2 L'exclusion mutuelle en réparti

3

4

4

4

5

5

5

6

7

7

8

8
8
8

9

9

10

11
11

12
14

14

14

14

15

15

15

16

17

18
18
18

2.1.2.1 La notion de l'exclusion mutuelle 18

2.1.2.2 Les états d'un processus 19

2.1.2.3 Notions de base 19

2.1.2.4 Propriétés d'un algorithme d'exclusion mutuelle 19

2.1.3 Bref historique 20

2.1.4 Les classes de solutions d'exclusion mutuelle 20

2.1.4.1 Les algorithmes à permissions 21

2.1.4.1.a Permissions individuelles 21

2.1.4.1.b Permissions d'arbitres 21

2.1.4.1.c Permissions mixtes 22

2.1.4.2 Les algorithmes à jeton 22

2.1.4.2.a Les algorithmes à diffusion (non structuré) 23

2.1.4.2.b Les algorithmes à structure logique (Structuré) . . . 23

2.1.5 Synthèse et conclusion 23

2.2 LE pRobLèME DE LA K-ExcLusioN MuTuELLE 25

2.2.1 Description du problème 25

2.2.2 Résolution du problème 25

2.3 LE pRobLèME DE L'ExcLusioN MuTuELLE DANs LEs RésEAux AD HOC 25

2.4 LE pRobLèME DE LA K-ExcLusioN MuTuELLE DANs LEs RésEAux AD HOC . 26

2.5 LA ToLéRANcE Aux pANNEs 26

2.5.1 Solutions 26

2.5.2 Les types de la tolérance aux pannes 26

2.5.2.1 Tolérance aux pannes par mémoire stable 27

2.5.2.2 Tolérance aux pannes par duplication 27

CoNcLusioN 28

3 SiMuLATioN DE L'ALgoRiThME DANs LEs sysTèMEs RépARTis 29

3.1 INTRoDucTioN 31

3.2 L'ALgoRiThME 31

3.2.1 Objectif de l'algorithme 31

3.2.2 Structure logique utilisée 31

3.2.3 Principe de fonctionnement 33

3.2.4 Hypothèses 34

3.2.5 Description de l'algorithme 34

3.2.5.1 Variables locales 34

3.2.5.2 Les messages utilisés 35

3.2.5.3 Les procédures de l'algorithme 35

3.2.6 Preuve de l'algorithme 40

3.2.6.1 La K-exclusion mutuelle 40

3.2.6.2 Absence d'interblocage 40

3.2.6.3 Absence de la famine 41

3.2.7 Complexité de l'algorithme en nombre de messages 41

3.3 RésuLTATs DE siMuLATioN 42

3.3.1 Les paramètres de simulation 42

3.3.2 Evaluation de performance 43

3.3.3 Les étapes d'un scénario 43

3.3.4 Résultats et interprétations 44

3.3.4.1 Variation du nombre de requêtes 44

3.3.4.2 Variation du nombre de ressources 44

3.3.4.3 Variation du nombre de sites 45

3.4 AMéLIoRATIoN 1 (LE MESSAGE RECHERCHE) 46

3.4.1 Résultats et interprétations 47

3.4.1.1 Variation du nombre de requêtes 47

3.4.1.2 Variation du nombre de ressources 47

3.4.1.3 Variation du nombre de sites 48

3.5 AMéLIoRATIoN 2 (ANNULER LA MéTHoDE {UTILISER LE PLUS CoURT CHEMIN}) 48

3.5.1 Résultats et interprétations 51

3.5.1.1 Variation du nombre de requêtes 51

3.5.1.2 Variation du nombre de ressources 51

3.5.1.3 Variation du nombre de sites 51

3.6 AMéLIoRATIoN 3 (ARRêT DES MoUVEMENTS INUTILES) 52

3.6.1 Résultats et interprétations 53

3.6.1.1 Variation du nombre de requêtes 53

3.6.1.2 Variation du nombre de ressources 53

3.6.1.3 Variation du nombre de sites 54

3.7 LES CoURBES FINALE ET CoMPARAISoN 54

3.7.1 Variation du nombre de requêtes 54

3.7.2 Variation du nombre de ressources 55

3.7.3 Variation du nombre de sites 55

3.8 CoNCLUSIoN 55

3.9 LA ToLéRANCE AUX PANNES 56

3.9.1 L'idée de base 56

3.9.2 Description de l'algorithme 56

3.9.2.1 Les variables locales 56

3.9.2.2 Les messages utilisés 56

3.9.2.3 Les procédures de l'algorithme 57

3.9.3 Résultats et interprétations 58

3.9.3.1 Variation du nombre de requêtes 58

3.9.3.2 Variation du nombre de ressources 58

3.9.3.3 Variation du nombre de sites 58

3.10 AMéLIoRATIoN (ALGoRITHME ToLéRANT AUX PANNES AMéLIoRé) 59

3.10.1 Résultats et interprétations 60

3.10.1.1 Variation du nombre de requêtes 60

3.10.1.2 Variation du nombre de ressources 60

3.10.1.3 Variation du nombre de sites 60

CoNCLUSIoN 62

4 SIMULATIoN DE L'ALGoRITHME DANS LES RéSEAUX AD HOC 63

4.1 INTRoDUCTIoN 64

4.2 L'ALGoRITHME 64

4.2.1 Hypothèses du Système 64

4.2.2 Les procédures de l'algorithme 64

4.2.3 Paramètres de simulation 69

4.2.3.1 Les paramètres fixes 69

4.2.3.2 Les paramètres variables 69

4.2.4 Résultats et interprétations 70

4.2.4.1 Variation du nombre de demandeurs 70

4.2.4.2 Variation de la portée de communication 71

4.2.4.3 Variation de la vitesse de mouvement 71

4.2.4.4 Variation du nombre de noeuds 72

4.2.5 Conclusion 72

4.3 ToLéRANcE AuX pANNEs 72

4.3.1 Résultats et interprétations 73

4.3.1.1 Variation du nombre de demandeurs 73

4.3.1.2 Variation de la portée de communication 73

4.3.1.3 Variation de la vitesse de mouvement 73

4.3.1.4 Variation du nombre de noeuds 74

CoNcLusioN 74

CoNcLusioN ET PERspEcTivEs 75

BibLiogRAphiE 76

A ANNEXE ETuDE DE L'ouTiL DE siMuLATioN NS-2 79

A.1 PREuvE Du ThéoRèME TRuc 80

B ANNEXE LEs scRipTs DE Nos siMuLATioNs 81

B.1 LE scRipT TCL (sysTèME RépARTi) 82

B.2 LE ScRipT TCL AD HOC 85

AcRoNyMEs 91

LISTE DES FIGURES

1.1 Structure d'un système réparti 4

1.2 Le modèle des réseaux mobiles avec infrastructure.[Bou07] 9

1.3 Le modèle des réseaux mobiles sans infrastructure. 10

1.4 Un réseau AD HOC. 10

1.5 Topologie dynamique dans un réseau AD HOC 10

1.6 Application de secours des réseaux AD HOC. 12

1.7 Application collaborative des réseaux AD HOC 13

1.8 Applications commerciales des réseaux AD HOC 13

1.9 Le chemin utilisé dans le routage entre la source et la destination. 14

1.10 Figure qui montre la classification des protocoles de routage. 15

2.1 Les états d'un processus.[All07] 19

2.2 Les catégories des solutions d'exclusion mutuelle 21

2.3 Arbre des catégories de solution d'exclusion mutuelle. 24

3.1 La structure des arbres statiques 32

3.2 La structure logique finale. 33

3.3 La complexité de notre algorithme. 41

3.4 Variation des paramètres de simulation 42

3.5 Les étapes de réalisation d'un scénario. 43

3.6 Influence du nombre de requête sur le NMM et TAM. 44

3.7 Influence du nombre de ressource sur le NMM et TAM. 44

3.8 Influence du nombre de site sur le NMM et TAM 45

3.9 Influence du nombre de requête sur le NMM et TAM. 47

3.10 Influence du nombre de ressource sur le NMM et TAM. 47

3.11 Influence du nombre de site sur le NMM et TAM 48

3.12 Influence du nombre de requête sur le NMM et TAM. 51

3.13 Influence du nombre de ressource sur le NMM et TAM. 51

3.14 Influence du nombre de site sur le NMM et TAM 51

3.15 Influence du nombre de requête sur le NMM et TAM. 53

3.16 Influence du nombre de ressource sur le NMM et TAM. 54

3.17 Influence du nombre de site sur le NMM et TAM 54

3.18 Influence du nombre de requête sur le NMM et TAM. 54

3.19 Influence du nombre de ressource sur le NMM et TAM. 55

3.20 Influence du nombre de site sur le NMM et TAM 55

3.21 Influence du nombre de requête sur le NMM et TAM. 58

3.22 Influence du nombre de ressource sur le NMM et TAM. 58

3.23 Influence du nombre de site sur le NMM et TAM 59

3.24 Influence du nombre de requête sur le NMM et TAM. 60

3.25 Influence du nombre de ressource sur le NMM et TAM. 60

3.26 Influence du nombre de site sur le NMM et TAM 60

4.1 Variation des paramètres de simulation 70

4.2 Influence du nombre de demandeurs sur le NMM et le TAM 70

4.3 Influence de la portée de communication sur le NMM et le TAM 71

4.4 Influence de la vitesse de mouvement sur le NMM et le TAM 71

4.5 Influence du nombre de noeuds sur le TAM et NMM 72

4.6 Influence du nombre de demandeurs sur le NMM et le TAM 73

4.7 Influence de la portée de communication sur le NMM et le TAM 73

4.8 Influence de la vitesse de mouvement sur le NMM et le TAM .. 73

4.9 Influence du nombre de noeuds sur le TAM et NMM 74

INTRoDucTioN aNéRALE

D

Epuis l'apparition des réseaux informatiques, ce domaine a connu une évolution sans cesse notamment sur le plan physique et artistique qui ont participés à la naissance

de l'informatique dite Répartie. Cette informatique ne se limite pas aux réseaux filaires, les réseaux sans fil offrent une flexibilité qui permet la mise en réseau des sites mobiles. L'ensemble des sites (fixes ou mobiles) et les réseaux de communication (filaire ou sans fil) peuvent être considérés comme une seule entité appelée un Système Réparti.

Un système réparti ou distribué (Distributed System) est si important qu'on peut le rencontrer dans la vie de tous les jours sans se rendre compte, par exemple : lorsqu'on visite notre courrier électronique ou lorsqu'on utilise notre téléphone portable, il facilite la communication entre les utilisateurs tout en respectant le partage des ressources de manière optimale et équitable mais également d'une façon exclusive donnant naissance au problème de l'exclusion mutuelle.

L'exclusion mutuelle assure le partage d'une ressource en prenant en considération la cohérence de celle-ci, c'est-à-dire partager cette ressource sans arriver à un état de conflit. Un conflit se produit lorsque plusieurs sites désirent acquérir simultanément une ressource alors que l'utilisation de cette dernière n'est autorisée qu'à un seul site à la fois. Pour résoudre ce problème plusieurs algorithmes ont été proposés.

Avec des systèmes informatiques de plus en plus gourmands de ressources, le problème de l'exclusion mutuelle se généralise au problème de la K-exclusion mutuelle qui consiste à partager plusieurs ressources à la fois, ce problème est devenu un axe intéressant de recherche oil plusieurs solutions ont montrées leurs efficacités.

Les algorithmes proposés dans ces cadres doivent être bien conçus de façon qu'ils garantissent une fiabilité très élevée, mais malheureusement on ne peut pas prévoir des éventuelles pannes, alors les chercheurs sont penchés sur ce sérieux problème afin de garantir que le système continu à fonctionner même en présence de pannes, donnant naissance à la notion de tolérance aux pannes.

L'évaluation des algorithmes dans des réseaux réels est considéré trop difficile ou même impossible vue les difficultés de réalisation et les conditions économiques, c'est la raison pour laquelle on utilise des outils de simulation permettant d'évaluer et de tester les algorithmes proposés dans des conditions très proches de la réalité.

Dans ce mémoire, nous avons étudié et simulé un algorithme de la K-exclusion mutuelle dans les systèmes répartis, les résultats de simulation nous ont permis d'améliorer cet algorithme jusqu'à l'intégration d'un mécanisme de tolérance aux pannes à cet algorithme. La performance acceptable de notre algorithme nous a motivé à adapter son

Introduction générale

principe dans les réseaux mobiles AD HOC.

Dans le premier chapitre, nous présentons des notions générales sur les systèmes répartis et les réseaux mobiles AD HOC.

Dans le deuxième chapitre, on va expliquer les problèmes qui font l'objet de ce travail: - l'exclusion mutuelle.

- sa généralisation à la K-exclusion mutuelle.

- la notion de la tolérance aux pannes.

Le chapitre trois est consacré à l'étude d'un algorithme de la K-exclusion mutuelle dans les systèmes répartis, où nous présentons la réalisation de simulation et les différentes améliorations qui ont permis de rendre cet algorithme tolérant aux pannes.

Dans le chapitre suivant, l'algorithme de la K-exclusion mutuelle tolérant aux pannes dans les réseaux AD HOC qui est basé sur l'algorithme déjà étudié, sera présenté et validé par une simulation.

La conclusion de ce mémoire résume les travaux faits durant toutes nos études ainsi que des possibles améliorations futures.

À la fin de ce mémoire, on met à la disposition du lecteur deux annexes contenant les détails de notre travail, dans la première annexe nous introduisons NS-2, l'outil de simulation que nous avons utilisé dans ce travail, cette annexe nous permet de suivre et comprendre toutes les étapes de simulation, la deuxième annexe représente un exemple des scripts utilisés par l'outil de simulation.

NoTioNs géNérales 1

Sommaire

1.1 SysTème RéparTi 4

1.1.1 Introduction 4

1.1.2 Définition d'un système réparti 4

1.1.3 Les caractéristiques d'un système réparti 5

1.1.4 Les avantages et les inconvénients 5

1.1.4.1 Avantages 5

1.1.4.2 Inconvénients 6

1.1.5 Problèmes liés aux systèmes répartis 7

1.1.6 Conclusion 7

1.2 Les réseaux AD HOC 8

1.2.1 Introduction 8

1.2.2 Réseaux mobiles sans fil 8

1.2.2.1 Les réseaux mobiles avec infrastructure 8

1.2.2.2 Les réseaux mobiles sans infrastructure 9

1.2.3 Les réseaux mobiles AD HOC 9

1.2.3.1 Les caractéristiques des réseaux AD HOC 10

1.2.3.2 Les avantages des réseaux AD HOC 11

1.2.3.3 Les inconvénients des réseaux AD HOC 11

1.2.3.4 Applications des réseaux AD HOC 12

1.2.3.5 Problèmes liés aux réseaux AD HOC 14

1.2.4 Problème de routage dans les réseaux AD HOC 14

1.2.4.1 Définition du routage 14

1.2.4.2 Classification des protocoles de routage 14

CoNclusioN 16

D

aNs ce chapitre nous essayons de présenter un aspect général des systèmes répartis et des réseaux mobiles AD HOC, nous définissons aussi des notions de base concernant ces systèmes, ainsi que leurs applications dans le monde informatique actuel.

1.1 Système Réparti 1.1.1 Introduction

Depuis l'apparition des réseaux informatiques, nos besoins en termes de calcul et de communication augmentent de jour en jour. Alors un système appelé centralisé, basé sur une seule machine fait son apparition et qui a résolu beaucoup de problèmes, mais l'augmentation journalière des besoins a contribué à l'émergence de l'informatique dite répartie, pour répondre à ce problème.

L'informatique répartie est l'un des enjeux majeurs de l'informatique à l'heure actuelle et dans le futur. Nous sommes en train de passer d'une architecture où une machine fournissait des services à un ensemble de machines (système centralisé), à une architecture où un ensemble de machines reliées par un réseau, compose un système qui fournit des services (système réparti).

1.1.2 Définition d'un système réparti

Ils existent plusieurs définitions d'un système réparti qui se diffèrent d'un auteur à un autre.

Tanenbaum [Tan94] a défini un système réparti comme un système qui s'exécute sur un ensemble de machines sans mémoire partagée, mais l'utilisateur les voit comme une seule et unique machine.

Dans une autre définition, un système réparti est défini comme étant un ensemble de sites autonomes connectés par un réseau de communication, et équipés d'un logiciel dédié à la coordination des activités du système ainsi qu'au partage de ressources [Cou94].

Nous pouvons dire donc qu'un système réparti est un système composé de plusieurs machines autonomes qui communiquent à l'intermédiaire d'un réseau quelconque (filaire ou sans fil), par l'échange de messages.

Figure 1.1 - Structure d'un système réparti

Comme il est montré dans la figure 1.1, chaque ordinateur (dit aussi site), est une entité

autonome capable de réaliser des tâches indépendamment des autres entités.

Au niveau de chaque site qui a une mémoire propre et une horloge locale, un ensemble de processus s'exécute soit en collaboration soit en compétition. Pour des raisons de simplicité, on suppose qu'il y a un seul processus au niveau de chaque site, donc, dans tout ce qui suit, les termes : site, noeud et processus seront confondus, et ils représenteront la même chose.

1.1.3 Les caractéristiques d'un système réparti

Un système réparti est caractérisé par:

- L'absence d'une mémoire commune et d'un état global, cela signifier que chaque processus n'a qu'une vue partielle du système.

- L'ensemble des machines doit posséder un mécanisme de communication interprocessus unique et global. Cette caractéristique permet à n'importe quel processus, de dialoguer avec n'importe quel autre processus.

- Les noyaux de ces machines doivent avoir une interface commune afin de permettre la portabilité des programmes mais aussi pour donner l'illusion de la machine unique.

- Les composants défectueux peuvent se relancer et de rejoindre le système, après que la cause de l'échec a été réparée.

- Le système peut fonctionner correctement alors même que certains aspects du système sont réduits. Par exemple, nous pourrions augmenter la taille du réseau sur lequel le système est en marche. Cela augmente la fréquence des pannes du réseau. De même, on pourrait augmenter le nombre d'utilisateurs ou de serveurs, ou de la charge globale sur le système.

- La performance s'obtient en réduisant le nombre des messages transmis et en augmentant le parallélisme. On peut dire que la performance s'obtient en réglant le grain de parallélisme, c'est-à-dire l'intervalle de temps séparant deux communications successives.[Eve04]

1.1.4 Les avantages et les inconvénients

1.1.4.1 Avantages

La répartition des applications informatiques fait l'objet d'un fort développement depuis une vingtaine d'années. Cet essor s'est accentué avec les progrès technologiques des réseaux de télécommunication. C'est pourquoi les systèmes répartis sont tant utilisés et offrent un ensemble d'avantages par rapport aux systèmes centralisés.

- Sécurité : les applications sont conçues selon une approche modulaire permettant d'isoler les données, et donc protéger les accès.

- Accélération des calculs : un calcul peut être découpé en sous calculs réalisables en même temps (en parallèle), le système réparti permet alors de répartir les calculs sur les différents processus afin de les exécuter simultanément. Lorsqu'un site est surchargé, certaines tâches peuvent être déplacées ou allouées à un site moins chargé (la répartition des charges).

- Transparence : l'utilisation des ressources n'influe pas sur leurs états.

- Flexibilité : l'ajout ou la suppression d'un site est une opération simple, et n'influe pas sur le fonctionnement total du système.

- Fiabilité : un des buts des systèmes répartis est d'obtenir des systèmes plus fiables que les monoprocesseurs. Si une machine tombe en panne, une autre machine devrait prendre la relève, cette situation entraîne généralement la duplication des données partagées pour accroître la robustesse du système.

- Accès distant : un même service peut être utilisé par plusieurs sites, situés à des endroits différents.

- Redondance : des systèmes redondants permettent de palier une faute matérielle, où de choisir le service équivalent avec le temps de réponse le plus court.[All04]

1.1.4.2 Inconvénients

Les inconvénients des systèmes répartis sont des (pseudos) inconvénients, en effet ce sont des problèmes concernant surtout la communication, les avantages offerts par les systèmes répartis nous aident à exploiter le matériel et à concevoir des systèmes informatiques larges et performants, mais ces systèmes ont toujours des problèmes à résoudre.

- L'absence d'une horloge globale : chaque noeud possède sa propre horloge pour dater les événements qui lui sont locaux. Par conséquent, si les horloges indépendantes de chaque noeud ne sont pas parfaitement synchronisées, l'ordre des événements n'est pas déductible à partir des datations locales. Cette difficulté conduira à définir des datations logiques qui permettent de corriger ce problème.

- La lenteur de la communication : malgré le degré de fiabilité offert par les réseaux de communication, et les vitesses de transmission qu'ils proposent(avec l'arrivée des fibres optiques), les réseaux restent relativement, et on dit bien relativement lents par rapport à la vitesse de calcul sur les machines, ce qui implique un grand temps d'attente dans le cas d'un travail coopératif entre les processus, et donc on obtient une perte concernant la performance du système.

- La perte des messages : parfois, les réseaux de communication ne sont pas fiables,

quelques messages transportés par ces réseaux peuvent être perdus, et donc on doit réémettre ces messages, les protocoles de détection, de perte, et la génération des nouveaux messages reste jusqu' à maintenant un des domaines de recherche dans les systèmes répartis.[All04]

1.1.5 Problèmes liés aux systèmes répartis

- L'absence des états globaux : le système peut être bloqué, ou des parties peuvent se liguer et bloquer d'autres parties, la consistance du système global doit être assurée.

- Fiabilité des calculs et des communications : les communications sont mises en oeuvre par des medias plus ou moins fiables, les algorithmes mis en place ont pour rôle de fiabiliser les moyens de communication, cette fiabilité doit être vérifiée ou validée, les calculs doivent être corrects, c'est-à-dire conformes aux spécifications, et les communications doivent garantir l'intégrité des données transmises et respecter un certain nombre de propriétés liées à l'acheminement des données.

- L'élection : Certaines applications réparties imposent qu'un site donné parmi les sites du système joue un rôle particulier, ce site est appelé le coordinateur, et il assure la communication entre tous les sites. La panne du site coordinateur entraîne la fin de l'application utilisant ce coordinateur, les autres sites doivent désigner un autre site pour remplacer le coordinateur, ce nouveau site est choisi après une opération d'élection.

- Détection de terminaison : Les sites d'un système réparti peuvent réaliser des calculs répartis, le problème de terminaison est celui de détection de la fin de ce calcul réparti. On dit qu'un calcul est terminé si tous les sites qui ont participé dans ce calcul ont terminé le calcul, et il n y a aucun message en transit entre ces sites.

- Partage des ressources : la répartition des ressources conduit nécessairement à la compétition pour l'obtention de celles-ci, si elles sont disponibles mais sous forme exclusive, une compétition doit être gérée de manière algorithmique par une mise en oeuvre d'une politique de gestion des ressources partagées.[All07]

1.1.6 Conclusion

Les systèmes répartis ont résolus beaucoup de problèmes, et avec l'évolution de la technologie du monde actuel, un nouveau mode de communication sans fil a fait son apparition, facilitant la mobilité des sites et rendant la mise en oeuvre des réseaux plus facile sans utilisation du câblage. Les réseaux AD HOC viennent de montrer leur efficacité.

1.2 LES RéSEAUX AD HOC 1.2.1 Introduction

Au cours de ces dernières années le monde des réseaux sans fil est devenu l'axe de recherche le plus important en réseaux. L'évolution récente des moyens de communication sans fil a permis la manipulation de l'information à travers des unités de calcul mobiles.

Les environnements mobiles offrent aujourd'hui une grande flexibilité d'emploi. En particulier, ils permettent la mise en réseau des sites dont le câblage serait trop onéreux à réaliser dans leur totalité, voire même impossible.

1.2.2 Réseaux mobiles sans fil

Un environnement mobile est un système composé de sites mobiles et qui permet à ses utilisateurs d'accéder à l'information indépendamment de leurs positions géographiques, en utilisant les ondes radio pour communiquer plutôt qu'une infrastructure câblée.

Les réseaux mobiles ou sans fil, peuvent être divisés en deux classes:

- Les réseaux avec infrastructure. - Les réseaux sans infrastructure.

1.2.2.1 Les réseaux mobiles avec infrastructure

Dans cette classe de réseaux, nous avons des unités fixes appelées station de base (SB), (en anglais Base Station), ces stations, sont reliées entre elles par un réseau filaire. Chaque station de base est munie d'une interface de communication sans fil, et elle couvre une zone géographique limitée appelée cellule, c'est la raison pour laquelle on appelle ces réseaux les réseaux cellulaires.

Les autres unités dans ce réseau sont des unités mobiles (UM), (en anglais Mobile Unit) ayant des liens sans fil avec les stations de base, une unité mobile n'appartient qu'à une seule SB à un moment donné, cette station offre tous les services de communication tant que l'UM est à l'intérieur de sa zone de couverture.

Une SB est aussi le point de passage de la transmission d'une UM à une autre. Si les deux UM appartiennent à la même SB, l'échange des informations est simplement relayé par la SB. Si les deux UM appartiennent à deux SB différentes, les informations échangées entre elles doivent être relayées par le réseau filaire qui relie les deux points d'accès.[Lem00] (Voir la figure 1.2).

Figure 1.2 - Le modèle des réseaux mobiles avec infrastructure.[Bou07] 1.2.2.2 Les réseaux mobiles sans infrastructure

Ce modèle est représenté par les réseaux Ad Hoc et étend les notions de mobilité à tous les éléments composant le réseau.

1.2.3 Les réseaux mobiles AD HOC

Les réseaux AD HOC (en latin :" qui va vers ce vers quoi il doit aller ", c'est-à-dire " formé dans un but précis ", telle qu'une commission AD-HOC, formée pour régler un problème particulier) sont des réseaux sans fil capables de s'organiser sans infrastructure définie préalablement.

Les réseaux ad hoc, dans leur configuration mobile, sont connus sous le nom de MA-NET (Mobile Ad-hoc NETworks).

Un réseau mobile AD HOC est un environnement mobile sans infrastructure, ce réseau est composé d'unités mobiles qui se déplacent dans un territoire quelconque et dont le seul moyen de communication est l'utilisation des interfaces sans fil, sans avoir besoin d'une infrastructure préexistante ou d'une administration centralisée.

L'absence de l'infrastructure rend le comportement des unités mobiles à se comporter comme des noeuds intermédiaires (Routeur) qui participent à la découverte et à la maintenance des chemins pour les autres noeuds du réseau.

Pour assurer la communication entre les noeuds, ces derniers utilisent les signaux radio, le signal s'atténue au fur et à mesure qu'il s'éloigne de son émetteur, le rayon de couverture du signal est dit porté de communication. Un noeud ne peut communiquer directement qu'avec les noeuds qui sont situés à l'intérieur de sa portée de communication, ces noeuds forment alors l'ensemble des voisins immédiats de ce noeud.[LK09]

comme il est illustré dans la figure 1.3

Figure 1.3 - Le modèle des réseaux mobiles sans infrastructure.

La figure 1.4 représente un réseau AD HOC de 7 unités mobiles et leurs liens de communication.

Figure 1.4 - Un réseau AD HOC. 1.2.3.1 Les caractéristiques des réseaux AD HOC

Les réseaux AD HOC en tant que nouveau paradigme des réseaux sans fil, présentent de nombreuses caractéristiques dont certaines leur sont bien spécifiques et les différencient des réseaux mobiles classiques.

- Une topologie dynamique : les unités mobiles du réseau, se déplacent d'une façon libre et arbitraire. Par conséquent, la topologie du réseau peut changer, à des instants imprévisibles, d'une manière rapide et aléatoire (voir figure 1.5).

Figure 1.5 - Topologie dynamique dans un réseau AD HOC.

- L'absence d'infrastructure : les réseaux AD HOC se distinguent des autres réseaux mobiles par l'absence d'infrastructure préexistante et de tout genre d'administration centralisée. Les hôtes mobiles sont responsables d'établir et de maintenir la connectivité du réseau d'une manière continue.

- Equivalence des noeuds du réseau : dans un réseau classique, il existe une distinction nette entre les noeuds terminaux (stations, hôtes) qui supportent les applications et les noeuds internes (routeurs par exemple) du réseau, en charge de l'acheminement des données. Cette différence n'existe pas dans les réseaux AD HOC car tous les noeuds peuvent être amenés à assurer des fonctions de routage.

- Rapidité de déploiement : les réseaux AD HOC peuvent être facilement installés dans les endroits difficiles à câbler, ce qui élimine une bonne part du travail et du coût, généralement liés à l'installation, et réduit d'autant le temps nécessaire à la mise en route.

- Communication par lien radio : les communications entre les noeuds se font par l'utilisation d'une interface radio. Il est alors important d'adopter un protocole d'accès au médium qui permet de bien distribuer les ressources radio, et ceci en évitant le plus possible les collisions, et en réduisant les interférences.[Mes98]

1.2.3.2 Les avantages des réseaux AD HOC

- Faciles à déployer : il suffit de mettre en place plusieurs machines pour que le réseau existe. Ceci rend la construction d'un réseau AD HOC rapide et peu onéreuse.

- Les noeuds sont mobiles : l'absence de câblages autorise les noeuds à se déplacer l'un par rapport aux autres au cours du temps.

- Évolutifs : pour ajouter un noeud à un réseau AD HOC préexistant, il suffit d'approcher le nouveau venu d'au moins l'un des membres du réseau. De même il suffit de l'en éloigner pour le retirer du réseau.[Man07]

1.2.3.3 Les inconvénients des réseaux AD HOC

- Une bande passante limitée : une des caractéristiques primordiales des réseaux basés sur la communication sans fil est l'utilisation d'un médium de communication partagé. Ce partage fait que la bande passante réservée à un hôte soit modeste.

- Des contraintes d'énergie : les hôtes mobiles sont alimentés par des sources d'énergie autonomes donc restreintes, comme les batteries, par conséquent la durée de traitement est réduite. Donc le paramètre d'énergie doit être pris en considération dans tout contrôle fait par le système.

- Une sécurité physique limitée : les réseaux mobiles AD HOC sont plus touchés par le paramètre de sécurité, que les réseaux filaires classiques. Cela se justifie entre

autres par les vulnérabilités des liens radio aux attaques, ainsi que les contraintes et limitations physiques qui font que le contrôle des données transférées doit être minimisé.[Mes98]

1.2.3.4 Applications des réseaux AD HOC

Bien que les projets relatifs aux réseaux sans fil en général et aux réseaux AD HOC en particulier aient débuté dans un cadre militaire pur, leurs domaines d'applications s'étendent bien au-delà du cadre militaire. Les réseaux mobiles AD HOC sont en fait plus faciles à déployer dans des bâtiments où il est impossible d'installer des câbles convenablement tels que les vieux bâtiments ou les sites classés (châteaux et monuments historiques).

D'une façon générale, les réseaux AD HOC sont utilisés dans toute application où le déploiement d'une infrastructure réseau filaire est trop contraignant, soit parce que il est difficile à mettre en place, soit parce que la durée d'installation du réseau ne justifie pas de câblage à demeure.[Man07]

Parmi les domaines d'applications des réseaux AD HOC:

- Services d'urgence : opération de recherche et de secours des personnes, tremblement de terre, Incendies, dans le but de remplacer l'infrastructure filaire.

Figure 1.6 - Application de secours des réseaux AD HOC.

- Travail collaboratif et les communications dans des entreprises ou bâtiments : dans le cadre d'une réunion ou d'une conférence par exemple (voir la figure 1.7).

- Applications commerciales : pour un paiement électronique distant (restaurant, aéroport, hôtel) ou pour l'accès mobile à Internet, ou service de guide en fonction de la position de l'utilisateur.(voir la figure 1.8)

Figure 1.7 - Application collaborative des réseaux AD HOC.

Figure 1.8 - Applications commerciales des réseaux AD HOC.

1.2.3.5 Problèmes liés aux réseaux AD HOC

Les réseaux AD HOC sont des systèmes répartis dont le support de communication est un réseau sans fil, il est évident de rencontrer les problèmes classiques des systèmes répartis tels que la datation des événements, l'élection, la détection de terminaison et le partage de ressources dans les réseaux AD HOC. Et à cause de la mobilité, on trouve également des problèmes propres aux réseaux AD HOC tels que la bande passante limitée, la perte de données et le problème de routage.

1.2.4 Problème de routage dans les réseaux AD HOC

1.2.4.1 Définition du routage

Le routage est une méthode d'acheminement des informations à la bonne destination à travers un réseau de connexion donné. Le problème de routage consiste à déterminer un acheminement optimal des paquets à travers le réseau au sens d'un certain critère de performance. Le problème consiste à trouver l'investissement de moindre coût en capacités nominales et de réserves qui assure le routage du trafic nominal et garantit sa serviabilité en cas de n'importe quelle panne d'arc ou de noeud.[Lem00]

Figure 1.9 - Le chemin utilisé dans le routage entre la source et la destination. 1.2.4.2 Classification des protocoles de routage

Suivant la manière de création et de maintenance de routes lors de l'acheminement des données, les protocoles de routage peuvent être séparés en trois catégories, les protocoles proactifs, les protocoles réactifs et les protocoles hybrides.[Lem00]

Comme il est illustré dans la figure 1.10.

Figure 1.10 - Figure qui montre la classification des protocoles de routage. 1.2.4.2.a Les protocoles de routage proactifs

Les protocoles de routage proactifs pour les réseaux mobiles AD HOC, sont basés sur la même philosophie des protocoles de routage utilisés dans les réseaux filaires conventionnels. Les méthodes utilisées exigent une mise à jour périodique des données de routage qui doit être diffusée par les différents noeuds de routage du réseau.

Un des protocoles qui appartient à cette classe est OLSR (Optimized link state routing protocol).

1.2.4.2.b Les protocoles de routage réactifs (à la demande)

Les protocoles de routage appartenant à cette catégorie, créent et maintiennent les routes selon les besoins. Lorsque le réseau a besoin d'une route, une procédure de découverte globale de routes est lancée, et cela dans le but d'obtenir une information spécifiée, inconnue au préalable.

AODV (Ad hoc On-demand Distance Vector), DSR (Dynamic Source Routing), sont les plus connus dans cette classe.

1.2.4.2.c Les protocoles de routage hybrides

Dans ce type de protocole, on peut garder la connaissance locale de la topologie jusqu'à un nombre prédéfini (à priori petit) de sauts par un échange périodique de trame de contrôle, autrement dit par une technique proactive. Les routes vers des noeuds plus lointains sont obtenues par schéma réactif, c'est-à-dire par l'utilisation de paquets, et de requêtes en diffusion.[Lem00]

Le protocole ZRP (Zone Routinier Protocol) est le plus connu dans cette classe.

CONCLUSION

Dans ce chapitre, nous avons présenté une vue générale sur les systèmes répartis et les réseaux AD HOC, ainsi que les problèmes les plus connus dans ces deux environnements.

Dans le chapitre suivant, nous allons expliquer en détail le problème de l'exclusion mutuelle et la K-exclusion mutuelle ainsi que la notion de la tolérance aux pannes dans les systèmes repartis et dans les réseaux AD HOC.

LE probLèmE DE L'ExcLusioN muTuELLE 2

ET LA ToLérANcE Aux pANNEs

SommAirE

2.1 LE probLèmE DE L'ExcLusioN muTuELLE

2.1.1 Introduction

18

18

2.1.2 L'exclusion mutuelle en réparti

18

2.1.2.1 La notion de l'exclusion mutuelle

18

2.1.2.2 Les états d'un processus

19

2.1.2.3 Notions de base

19

2.1.2.4 Propriétés d'un algorithme d'exclusion mutuelle

19

2.1.3 Bref historique

20

2.1.4 Les classes de solutions d'exclusion mutuelle

20

2.1.4.1 Les algorithmes à permissions

21

2.1.4.2 Les algorithmes à jeton

22

2.1.5 Synthèse et conclusion

23

2.2 LE probLèmE DE LA K-ExcLusioN muTuELLE

25

2.2.1 Description du problème

25

2.2.2 Résolution du problème

25

2.3 LE probLèmE DE L'ExcLusioN muTuELLE DANs LEs résEAux AD HOC

25

2.4 LE probLèmE DE LA K-ExcLusioN muTuELLE DANs LEs résEAux AD HOC . . .

26

2.5 LA ToLérANcE Aux pANNEs

26

2.5.1 Solutions

26

2.5.2 Les types de la tolérance aux pannes

26

2.5.2.1 Tolérance aux pannes par mémoire stable

27

2.5.2.2 Tolérance aux pannes par duplication

27

CoNcLusioN

28

L

'exclusion mutuelle et sa généralisation à K-ressources sont des problèmes classiques dans les systèmes répartis. Dans ce chapitre, nous présentons des notions de base de ces problèmes et les différentes catégories des solutions apportées. On va étudier également la tolérance aux pannes dans les algorithmes d'exclusion mutuelle.

2.1 LE pRoBLEME DE L'EXcLusioN MuTuELLE 2.1.1 Introduction

Dans les systèmes répartis nous avons rencontré plusieurs problèmes qui sont encore des axes de recherche telle que le problème de partage de ressources.

Le problème de l'exclusion mutuelle, est un problème d'allocation en exclusivité d'une seule donnée (appelée ressource), Il s'agit d'un problème de compétition dont l'énoncé est très simple : une entité, appelée ressource non partageable ou critique, ne peut être octroyée à un instant donné qu'à un seul processus parmi N processus du système. L'utilisation simultanée de cette ressource peut poser un problème d'incohérence, Pour cette raison plusieurs solutions ont été proposées, qui sont sous forme d'algorithmes afin de garantir le contrôle et la cohérence de la ressource partagée, ces algorithmes sont appelé les algorithmes répartis de l'exclusion mutuelle.

Les réseaux AD HOC (en tant que système réparti un peu particulier) ont hérité ce problème, dans ce cas, les unités mobiles peuvent partager les ressources du système. Les solutions apportées au problème de l'exclusion mutuelle dans les systèmes répartis peuvent aussi être utile dans les réseaux AD HOC, tout en prenant en considération les problèmes des MANETs tel que la mobilité.

Dans les systèmes distribués, le contrôle, le calcul et les données sont distribués sur différents noeuds du système. Il devient important et nécessaire que le système soit fiable pour garantir l'échange de données sans erreur et sans perte. Ces erreurs peuvent se produire à cause de la défaillance d'un ou de plusieurs noeuds du système.

2.1.2 L'exclusion mutuelle en réparti

2.1.2.1 La notion de l'exclusion mutuelle

Etant donné un système réparti de N processus partageant une ressource physique (une imprimante par exemple) ou logique (un fichier). Afin d'éviter des situations incohérentes, la ressource partagée ne peut être utilisée que par un seul processus à la fois, en d'autres termes, la ressource doit être utilisée en exclusion mutuelle (EM).

Une telle ressource est dite ressource critique, et les processus utilisant cette ressource exécutent une section du code appelée section critique (SC) qui manipule la ressource partagée. Pour garantir l'accès exclusif à la ressource critique, on doit gérer cet accès par un protocole d'acquisition et un protocole de libération. Un processus désirant entrer en SC doit appeler le protocole d'acquisition, ce protocole permet de retarder l'accès de ce processus à la SC si elle est utilisée par un autre site. À la fin de la SC, le processus exécute le protocole de libération pour informer les sites qui peuvent être en attente que la SC est libre.[All07]. La forme générale d'un processus utilisant une ressource critique est :

Protocole d'acquisition

< Section Critique>

Protocole de libération

2.1.2.2 Les états d'un processus

L'appel des protocoles d'acquisition et de libération fait changer l'état d'un processus. En effet, un processus Pi appartenant au système réparti est doté d'une variable locale Etati qui désigne son état, tel que :

Etati = {Dehors, Demandeur, Dedans}.

Initialement, Etati = Dehors. Le protocole d'acquisition fait passer Etati de l'état Dehors vers l'état Demandeur, et le protocole de libération fait passer cet état de Dedans vers Dehors. Le passage de l'état Demandeur vers l'état Dedans et défini par le système.[All07] Comme il est montré dans la figure 2.1

Figure 2.1 - Les états d'un processus.[All07]

2.1.2.3 Notions de base

1. Ressource critique

C'est une ressource partagée qui ne doit être accessible que par un seul site à la fois.

2. Section critique

Les sites utilisant les ressources critiques exécutent une section du code manipulant la ressource appelée section critique (SC) : un seul processus au plus doit être en section critique afin de garantir une utilisation correcte de la ressource.

2.1.2.4 Propriétés d'un algorithme d'exclusion mutuelle

Une solution n'est considérée correcte que si elle respecte les propriétés suivantes :

- Propriété de sûreté (safety) : à tout instant, un seul site au plus exécute la SC.

- Propriété de vivacité (liveness) : tout site demandeur de la ressource critique doit pouvoir l'acquérir au bout d'un temps fini.

Un algorithme qui assure ces deux propriétés assure également l'absence de deux problèmes, l'interblocage et la famine:

- Interblocage (Deadlock) : est une situation du système où il y a plusieurs sites à l'état Demandeur et aucun ne peut accéder à la SC.

- Famine (Starvation) : aura lieu si un site qui se trouve à l'état Demandeur ne passe jamais à l'état Dedans.[LK09]

2.1.3 Bref historique

Le problème de l'exclusion mutuelle était très bien traité dans les systèmes informatiques centralisés, plusieurs algorithmes et mécanismes assurant l'exclusion mutuelle ont été proposés, on peut citer par exemple les sémaphores de Dijkstra [Dij65] et les moniteurs. Par ailleurs, avec l'évolution des systèmes informatiques on a vue ce problème se transformé de point de vue centralisé à un point de vue réparti.

La première définition du problème de l'exclusion mutuelle a été donnée par Dijkstra [Dij65]. On peut résumer son propos dans les cinq assertions suivantes :

1. A tout moment, il n'y a qu'un site du système qui puisse exécuter la section critique.

2. La solution doit être symétrique, c'est-à-dire que l'on ne "peut pas introduire de priorité statique".

3. On ne peut pas faire d'hypothèse sur la vitesse des participants.

4. En dehors de la section critique, tout site peut quitter le système sans pour autant bloquer les autres.

5. Si plus d'un site désire entrer en section critique, on doit pouvoir décider en un temps fini de l'identité du site qui accédera à celle-ci.

Cette définition n'a pas évolué jusqu'à aujourd'hui, et on la retrouve dans les principales propriétés des algorithmes d'exclusion mutuelle.

2.1.4 Les classes de solutions d'exclusion mutuelle

C'est en 1977 avec l'algorithme de Le Lann [Lan77] et en 1978 avec celui de Lamport [Lam78] que l'on a commencé à considérer pour l'exclusion mutuelle dans des systèmes répartis. Dans ces systèmes les processus s'exécutent sur des sites distants et ne peuvent communiquer entre eux que par envoi de messages.

Les algorithmes d'exclusion mutuelle se classent usuellement en deux grandes familles : les algorithmes basés sur les permissions et ceux basés sur l'utilisation des jetons. Cette

classification a été introduite en 1991 par Raynal [Ray91]. On peut illustré cette classification dans la figure 2.2

Figure 2.2 - Les catégories des solutions d'exclusion mutuelle. 2.1.4.1 Les algorithmes à permissions

Les algorithmes à permissions reposent sur une idée simple et naturelle : chaque site demande aux autres, s'il le désire, l'autorisation d'entrer en SC. Il ne pourra alors entrer en SC qu'à la seule condition d'avoir bien reçu toutes les permissions nécessaires.

Dans ce type d'algorithmes, la propriété de sûreté de l'exclusion mutuelle est assurée par l'invariant suivant : "À tout moment au plus un site possède toutes les permissions nécessaires".

Pour garantir cet invariant, chaque algorithme à permissions définit les conditions nécessaires à l'envoi d'une permission à un autre site du système.

On peut diviser les algorithmes à permissions en trois groupes selon le type de permission, la permission individuelle, la permission d'arbitre et la permission mixtes.[Sop08]

2.1.4.1.a Permissions individuelles

Dans ce type, un site peut donner sa permission à plusieurs autres sites simultanément. S'il n'est pas demandeur, il envoie son autorisation à tous les sites demandeurs, dans le cas contraire, c'est-à-dire s'il est demandeur, il ne donnera son autorisation qu'aux sites dont les requêtes sont plus anciennes. (quelques algorithmes : [Lam78], [RA81], [CR83], [CM84]).

2.1.4.1.b Permissions d'arbitres

Contrairement aux algorithmes à permissions individuelles où un site finissait par recevoir l'accord explicite ou tacite de tous les sites pour chaque entrée en SC, un site i n'attend plus qu'un ensemble réduit de permissions.

Cet ensemble de sites Ri est propre à chaque site i.

La deuxième différence des permissions d'arbitres par rapport aux permissions individuelles, est qu'un site n'envoie qu'une permission à la fois. Cet envoi n'est plus seulement conditionné par l'état de l'application vis-à-vis de la SC, mais aussi des permissions déjà émises par le site. (exemple :[Mae85]).

Pour assurer la propriété de sûreté il faut et il suffit que tous ces ensembles de diffusion soient en intersection deux à deux, autrement dit :

V(i, j), Ri n Rj =6 Ø

2.1.4.1.c Permissions mixtes

Cette dernière sous-classe d'algorithme utilise, comme pour les permissions d'arbitres, des sous-ensembles Ri pour diffuser ses requêtes diminuant ainsi la complexité en nombre de messages. Mais, à l'instar des algorithmes à permissions individuelles, les processus peuvent ici émettre plusieurs permissions simultanément, ce qui écarte tout risque d'interblocage.[Sop08]

La vivacité étant ainsi naturellement assurée, ils peuvent s'affranchir du coûteux mécanisme de reprise d'une permission. Le prix de cette économie est une contrainte plus forte sur les ensembles Ri pour garantir la propriété de sûreté :

V(i, j),i E Rj V j E Ri

Ce type d'algorithme a été introduit par Mukesh Singhal en 1991 dans [Sin91]. Il a noté que certaines taxonomies le classe comme un algorithme à permissions d'arbitres "sans interblocage". C'est d'ailleurs le titre de l'article. Le terme de permissions mixtes, utilisé ici, a été introduit par Michel Raynal [CM92].

2.1.4.2 Les algorithmes à jeton

Étudions maintenant la deuxième grande famille que constituent les algorithmes à jeton. En considérant un historique global des accès à la section critique, le problème de l'exclusion mutuelle apparaît comme celui de la séquentialisation de ces accès. Comme dans une course de relais, la section critique passe de site en site. L'idée des algorithmes de cette famille est alors de considérer un témoin appelé "jeton" (token). Il peut être vu comme une super permission dont la seule possession permet d'exécuter une section critique. Cette abstraction de l'exclusion mutuelle permet d'obtenir facilement la propriété de sûreté. Il suffit pour cela de maintenir l'invariant suivant " A tout moment il n'y a dans le système qu'au plus un jeton ". Reste à assurer la vivacité, c'est-à-dire la circulation du jeton ainsi que celle des requêtes vers ce dernier.

Pour retrouver le jeton on distingue deux stratégies : la première utilise des mécanismes de diffusion, tandis que la deuxième repose sur l'utilisation des propriétés de topologie particulière.

2.1.4.2.a Les algorithmes à diffusion (non structuré)

Dans ce groupe d'algorithmes, un processus qui veut demander la SC peut envoyer sa requête en parallèle à tous les autres sites.

Ces algorithmes basés sur la diffusion de la demande peuvent être aussi divisés en deux groupes :

- Les algorithmes statiques : un site qui a besoin du jeton pour entrer en SC adresse sa demande à tous les autres sites.[SK85], [HPR88].

- Les algorithmes dynamiques : le site qui veut exécuter la SC doit envoyer sa requête de demande uniquement au site qui a le jeton ou qui va l'avoir incessamment.[Sin89], [CSL91].

2.1.4.2.b Les algorithmes à structure logique (Structuré)

Dans ce groupe, les sites forment une configuration logique grâce à leurs variables locales. Ces algorithmes peuvent être aussi statiques ou dynamiques.

- Les algorithmes statiques : la structure logique demeure inchangée et c'est uniquement le sens des arêtes qui change. Les algorithmes statiques utilisent des graphes fixes qui n'évoluent pas avec le système tels que l'arbre, l'anneau et d'autres graphes.[Lan78], [Mar85], [Ray89], [NM91], [vdS87]... etc.

- Les algorithmes dynamiques : la configuration logique adoptée au réseau change lorsqu'un processus demande et exécute la SC. Grâce à cette structure logique dynamique, on peut remonter l'historique des exécutions de la ressource critique. Le fait de connaître celui qui détient le jeton ou celui qui va le détenir nous permet de gagner beaucoup en nombre de messages et par conséquent améliorer les performances de l'algorithme.[NT87], [BAA89].

- Les algorithmes hybrides : D'après Hilary et mostfaoui [HM94] ils proposent un algorithme hybride basé sur une structure en "open-cube". Cet algorithme per-met de s'adapter dynamiquement aux requêtes, tout en maintenant les propriétés de symétries de cette structure arborescente particulière. L'idée est ensuite d'utiliser ces propriétés structurelles pour faciliter la mise en oeuvre de la tolérance aux pannes.

2.1.5 Synthèse et conclusion

Cette taxonomie, résumée dans l'arbre de la figure 2.3, nous a permis de mettre en évidence la diversité des algorithmes. Les différentes stratégies mises en oeuvre par ces

algorithmes présentent chacune des avantages et des inconvénients. Il n'existe donc pas une classe d'algorithme meilleure que les autres mais plutôt des classes adaptées à un contexte et des objectifs de performances précis.

Figure 2.3 - Arbre des catégories de solution d'exclusion mutuelle.

2.2 LE probLèmE DE LA K-EXcLusioN mutuELLE

2.2.1 Description du problème

Le problème de la K-exclusion mutuelle est une généralisation du problème de l'exclusion mutuelle simple, dans ce cas les sites partagent non seulement une ressource mais K exemplaires de la même ressource.

Cette disponibilité de ressources n'autorise pas l'accès simultané à une ressource, il faut toujours assurer l'accès exclusif à chaque exemplaire.

2.2.2 Résolution du problème

Les solutions du problème de la K-exclusion mutuelle sont basées sur les solutions utilisées pour résoudre le problème de l'exclusion mutuelle simple, on peut donc avoir deux types de solutions:

- Solution utilisant des permissions : le processus désirant entrer en SC doit demander des permissions à un ensemble de processus, la réception d'un nombre suffisant de ces permissions permet au processus d'utiliser la ressource.

L'algorithme de Raymond est la première solution pour la K-exclusion mutuelle basée sur les permissions [Ray88].

- Solutions utilisant des jetons : dans ce cas, il n'existe pas un seul jeton mais k jetons (k étant le nombre de ressources), seule la possession d'un jeton permet à un site demandeur l'accès à la SC.

Parmi les solutions apportées basées sur les jetons on distingue l'algorithme de Srimani et Reddy [Sri89].

2.3 LE probLèmE DE L'EXcLusioN mutuELLE DANs LEs résEAuX AD HOC

Dans un environnement mobile, les unités mobiles peuvent partager les ressources présentes dans le système, tout en respectant l'exclusion mutuelle.

Les solutions proposées au problème de l'exclusion mutuelle dans les réseaux mobiles AD HOC peuvent être classées en deux grandes familles, les solutions utilisant des permissions [Wei08] et celles utilisant un jeton [WW01], ces solutions devront prendre en compte les caractéristiques des réseaux mobiles AD HOC.

2.4 LE pRoBLEME DE LA K-EXcLusioN MuTuELLE DANs LEs RtsEAuX AD

HOC

Dans ce cas, nous avons K exemplaires d'une ressource critique, un processus ne peut utiliser qu'une seul ressource à un moment donne.

Quelques algorithmes sont proposes dans ce cadre comme [WK97].

2.5 LA ToLERANcE AuX pANNEs

Il se peut que dans un système qui fonctionne correctement, d'avoir à un moment donne un problème qui va influencer negativement sur son comportement, c'est le problème de panne d'un site dans le système. Il existe plusieurs types de solutions permettant de resoudre ce problème.

2.5.1 Solutions

Les solutions suivantes sont plus adequates à un système centralise qu'a un système reparti.

- La prévention des fautes : qui s'attache aux moyens permettant d'eviter l'occurrence de fautes dans le système.

- L'élimination des fautes : qui se focalise sur les techniques permettant de reduire la presence de fautes ou leurs impacts.

- La prévision des fautes : qui predit l'occurrence des fautes (temps, nombre, impact) et leurs consequences.

Cependant dans un système reparti, ils existent plusieurs sites qui sont reliees par un reseau de communication, cela va permettre à un site de prendre les tâches d'un autre site qui a subit une faute ou une panne :

- La tolérance aux pannes ou aux fautes : le système peut fonctionner en depit des fautes.[AK08]

2.5.2 Les types de la tolérance aux pannes

La tolerance aux pannes permet l'assurance de la sûrete de fonctionnement, il existe deux types de tolerance : par memoire stable, et par duplication.

2.5.2.1 Tolérance aux pannes par mémoire stable

Une mémoire stable est considérée comme étant un support persistant de stockage, dont le rôle principal est d'assurer une accessibilité et une protection des données contre les pannes pouvant affecter le système. Ainsi, suite à une panne, un état correct ayant été stocké antérieurement à cette panne sur la mémoire stable reste accessible, cela permet au système un retour à un état antérieur.

La tolérance aux fautes par sauvegarde périodique de points de reprise sur mémoire stable est très aisément mise en oeuvre dans le cas d'une application séquentielle (et donc non-répartie).[Abd07]

Cependant, la répartition d'une application sur plusieurs processeurs ajoute une dimension supplémentaire au problème car il faut éviter que la reprise de l'exécution par un processus introduise des incohérences dans les exécutions effectuées par les autres processus. Le problème de la tolérance aux fautes par recouvrement arrière consiste à assurer que, malgré la reprise d'un processus, l'état global du système de processus reste cohérent.[CL85]

2.5.2.2 Tolérance aux pannes par duplication

La tolérance aux pannes par duplication consiste à la création de copies multiples des composants sur des processeurs différents. Cette technique fournit un moyen de traiter les erreurs et de masquer ainsi le fait que des répliques ont défailli. Cependant, afin de restaurer le niveau de redondance des processus et d'être ainsi capables de tolérer d'autres défaillances, cette technique doit être complétée par un traitement de faute, qui consiste, entre autres, à la réallocation et l'initialisation de nouvelles réplique. [AK08]

CONCLUSION

Dans ce chapitre nous avons présenté des notions de base concernant le problème de l'exclusion mutuelle et son extension à K-ressources, nous avons cité également les catégories de solutions apportées à ces problèmes. Le problème de la tolérance aux pannes a aussi fait l'objet de ce chapitre.

Dans le chapitre suivant, nous allons décrire notre algorithme, proposé dans le cadre de la K-exclusion mutuelle, afin de le simuler par un outil de simulation.

SiMuLATioN DE L'ALGoRiTHME DANs 3

LEs sysTèMEs RépARTis

SoMMAiRE

3.1
3.2

INTRoDucTioN

L'ALGoRiTHME

31
31

 

3.2.1

Objectif de l'algorithme

31

 

3.2.2

Structure logique utilisée

31

 

3.2.3

Principe de fonctionnement

33

 

3.2.4

Hypothèses

34

 

3.2.5

Description de l'algorithme

34

 
 

3.2.5.1 Variables locales

34

 
 

3.2.5.2 Les messages utilisés

35

 
 

3.2.5.3 Les procédures de l'algorithme

35

 

3.2.6

Preuve de l'algorithme

40

 
 

3.2.6.1 La K-exclusion mutuelle

40

 
 

3.2.6.2 Absence d'interblocage

40

 
 

3.2.6.3 Absence de la famine

41

 

3.2.7

Complexité de l'algorithme en nombre de messages

41

3.3

RésuLTATs DE siMuLATioN

42

 

3.3.1

Les paramètres de simulation

42

 

3.3.2

Evaluation de performance

43

 

3.3.3

Les étapes d'un scénario

43

 

3.3.4

Résultats et interprétations

44

 
 

3.3.4.1 Variation du nombre de requêtes

44

 
 

3.3.4.2 Variation du nombre de ressources

44

 
 

3.3.4.3 Variation du nombre de sites

45

3.4

AMéLioRATioN 1 (LE MEssAGE REcHERcHE)

46

 

3.4.1

Résultats et interprétations

47

 
 

3.4.1.1 Variation du nombre de requêtes

47

 
 

3.4.1.2 Variation du nombre de ressources

47

 
 

3.4.1.3 Variation du nombre de sites

48

3.5

AMéLioRATioN 2 (ANNuLER LA MéTHoDE {UTiLisER LE pLus couRT cHEMiN}) 48

 

3.5.1

Résultats et interprétations

51

 
 

3.5.1.1 Variation du nombre de requêtes

51

 
 

3.5.1.2 Variation du nombre de ressources

51

 
 

3.5.1.3 Variation du nombre de sites

51

3.6

AMéLioRATioN 3 (ARRêT DEs MouvEMENTs iNuTiLEs)

52

 

3.6.1 Résultats et interprétations 53

3.6.1.1 Variation du nombre de requêtes 53

3.6.1.2 Variation du nombre de ressources 53

3.6.1.3 Variation du nombre de sites 54

3.7 LES COURBES FINALE ET COMPARAISON 54

3.7.1 Variation du nombre de requêtes 54

3.7.2 Variation du nombre de ressources 55

3.7.3 Variation du nombre de sites 55

3.8 CONCLUSION 55

3.9 LA TOLéRANCE AUX PANNES 56

3.9.1 L'idée de base 56

3.9.2 Description de l'algorithme 56

3.9.2.1 Les variables locales 56

3.9.2.2 Les messages utilisés 56

3.9.2.3 Les procédures de l'algorithme 57

3.9.3 Résultats et interprétations 58

3.9.3.1 Variation du nombre de requêtes 58

3.9.3.2 Variation du nombre de ressources 58

3.9.3.3 Variation du nombre de sites 58

3.10 AMéLIORATION (ALGORITHME TOLéRANT AUX PANNES AMéLIORé) 59

3.10.1 Résultats et interprétations 60

3.10.1.1 Variation du nombre de requêtes 60

3.10.1.2 Variation du nombre de ressources 60

3.10.1.3 Variation du nombre de sites 60

CONCLUSION 62

L

'objectif de ce chapitre est d'étudier un algorithme de la K-exclusion mutuelle dans les systèmes répartis, cet algorithme sera simulé et amélioré pour le rendre tolérant aux pannes.

3.1 INTRODUCTiON

Notre travail consiste à réaliser une simulation d'un algorithme proposé dans le cadre de la K-exclusion mutuelle dans les systèmes répartis [All07] afin d'étudier ses performances.

Des améliorations seront apportées au fur et à mesure, afin d'obtenir les performances les plus acceptable.

Dans ce chapitre, nous décrivons le principe de fonctionnement de l'algorithme tout en expliquant les procédures et les messages utilisés, et nous présentons sa complexité en terme de nombre de messages, on va interpréter également les courbes obtenues à partir des scénarios proposés pour chaque amélioration apportée.

3.2 L'ALGORiTHME

3.2.1 Objectif de l'algorithme

Les sites dans un système réparti communiquent entre eux par des échanges de messages seulement, c'est pourquoi cet échange à une grande influence sur la performance du système, en effet la performance d'un algorithme dépends de ces messages échangés, alors on doit essayer de minimiser le nombre de messages échangés afin d'assurer un degré acceptable de performance.

Dans le problème de la K-exclusion mutuelle, les N sites du système partagent K exemplaires de la même ressource, généralement la complexité des solutions de ce problème est exprimée en fonction de N, cela va rendre la complexité très élevé et qui influe négativement sur la performance du système, d'une autre part, la valeur de K est largement inférieur à N, donc on a essayé de proposer un algorithme dont la complexité est exprimé en fonction de K, cela va certainement influencer positivement sur la performance du système.

3.2.2 Structure logique utilisée

Afin de minimiser la complexité de notre algorithme, nous avons créé une nouvelle structure logique permettant d'assurer la K-exclusion mutuelle par l'échange de minimum de messages.

Cette structure logique consiste à diviser les sites en K groupes, chaque groupe à un site appelé Racine qui joue le rôle d'un coordinateur, tous les sites d'un groupe adressent leur requêtes à cette racine, chaque racine détient initialement un jeton, et toutes les racines sont reliées entre elles par un anneau bidirectionnel qui permet l'échange des jetons entre les différents sites.

La création de cette structure passe par deux étapes :

- 1er étape : créer des arbres statiques tels que, pour 1 < i < K, le site i est la racine d'un arbre noté Arbrei, et pour le reste des sites : K+1, K+2, . . ., N, chaque site doit appartenir à un arbre selon son identité en utilisant la fonction suivante :

si i = 1 mod k, ce site E Arbre1 si i 2 mod k, ce site E Arbre2 si i 3 mod k, ce site E Arbre3 . . .

si i k-1 mod k, ce site E Arbrek_1 si i 0 mod k, ce site E Arbrek

On obtient K arbres statiques ayant les caractéristiques suivantes :

1. V i / 1 < i < k, le site i est la racine de Arbrei.

2. Vi/iEArbrei,ijmod k.

3. V i,j < k, Arbrei fl Arbrej = 0.

- 2ème étape : consiste à connecter les arbres entre eux, pour cela, seules les K racines seront reliées entre elles par un anneau bidirectionnel tel que, pour un site i, le voisin gauche de ce site est le site i-1, et le voisin droit est le site i+1. (Pour les sites 1 et K, nous avons : voisin gauche du site 1 est le site K, et voisin droit du site K est le site 1).

- Exemple : On suppose qu'on a un système composé de 17 sites et 4 ressources, on a donc 4 arbres : Arbre1, Arbre2, Arbre3 et Arbre4, oil les racines respectives sont les sites 1, 2, 3 et 4, les autres sites vont constituer les arbres selon leurs identités, on obtient les arbres suivants :

Arbre1 =

{1,

5,

9, 13, 17}

Arbre2 =

{2,

6,

10,

14}

Arbre3 =

{3,

7,

11,

15}

Arbre4 =

{4,

8,

12,

16}

Ces arbres sont illustrés dans la figure 3.1 ci dessous :

Figure 3.1 - La structure des arbres statiques.

Afin d'obtenir la structure logique final de notre algorithme suivant la figure 3.2 :

Figure 3.2 - La structure logique finale.

3.2.3 Principe de fonctionnement

Pour assurer la K-exclusion mutuelle, nous utilisons autant de jetons que de ressources disponibles, initialement, chaque racine détient un jeton libre et les racines peuvent échanger les jetons entre elles, une racine peut détenir jusqu'à K jetons libres à la fois.

Lorsqu'un site demandeur désire entrer en SC, il envoie une requête vers la racine de son arbre, cette racine va satisfaire la requête par l'envoi d'un jeton si elle détient des jetons libres, dans le cas contraire, la requête sera sauvegardée, et la racine va demander un jeton supplémentaire à ses voisins via l'anneau.

Si la racine qui reçoit la demande d'un voisin détient des jetons libres, elle va répondre favorablement à cette demande par l'envoi d'un jeton, sinon elle va propager cette demande vers un autre voisin.

La réception d'un jeton par une racine permet de servir la première requête en attente, le site demandeur qui reçoit un jeton passe donc à la SC, et il envoie le jeton à sa racine après la libération de la SC.

Afin d'éviter l'échange coûteux des jetons entre les racines, nous utilisons une méthode judicieuse qui permet d'envoyer les jetons via le plus court chemin entre le site envoyeur et le site récepteur, cette méthode permet donc de minimiser le nombre de messages échangés pour chaque entrée en SC.

3.2.4 Hypothèses

Pour assurer le bon fonctionnement de notre algorithme, on suppose que :

- Le nombre N des noeuds et le K des racines sont connus.

- Le réseau physique est un réseau complet.

- Les sites du système ne tombent pas en panne.

- Les canaux de communication sont fiables, et il n'y a pas de perte de messages.

3.2.5 Description de l'algorithme

Dans cette partie nous allons décrire les variables et les messages utilisés, et on va détailler les procédures de notre algorithme.

3.2.5.1 Variables locales

Cet algorithme possède deux types de noeud, les sites racines et les sites simples. - Au niveau d'un Site i simple:

Etati : Désigne l'état du site, cet état appartient à {Dehors, Demandeur, En SC}, qui est initialisé à Dehors.

Racinei : L'identité de la racine d'arbre contenant ce site. - Au niveau d'une Racine i :

Etati : Désigne l'état du site, cet état appartient à {Dehors, Demandeur, En SC}, et qui est initialisé à Dehors.

Racinei : au début est initialisée à Nil.

voisin_droiti : l'identité du voisin droit dans l'anneau. voisin_gauchei : l'identité du voisin gauche dans l'anneau.

Jetons_libresi : un entier qui donne le nombre de jetons libres détenus par la racine, qui est initialisé à 1.

Jetons_presentsi : un entier qui donne le nombre de jetons qui se trouvent dans l'arbre, qui est initialisé à 1.

Demandeursi : une file d'attente pour stocker les requêtes, initialement vide.

Longueuri : la longueur de la file d'attente, et puisque la file d'attente est vide initialement, donc il est initialisé à 0.

Distance : une variable permettant de calculer la distance entre deux sites dans l'anneau, qui est initialisé à 0.

3.2.5.2 Les messages utilisés

Dans cet algorithme, on utilise cinq types de messages:

- Demande (Jeton, i) : envoyé par le site i vers sa racine lors de la demande de la SC. - Libération (Jeton) : envoyé par le site i vers sa racine après la libération de sa SC.

- Accord (Jeton) : envoyé par une racine à un site demandeur pour lui permettre d'utiliser la ressource critique demandée.

- Requête (Jeton, i) : envoyé par une racine i pour demander un jeton supplémentaire d'un voisin.

- Aide (Jeton, i) : Réponse favorable à une requête d'un voisin.

3.2.5.3 Les procédures de l'algorithme

Procédure 1: Demander la Section Critique

1 Début

2

3

Etati ?-Demandeur;

Envoyer Demande (Jeton, i) à Racinei;

4 Fin

Cette procédure est utilisée lorsqu'un site simple appartenant à un arbre donné, désire d'entrer en section critique.

Procédure 2: Réception de Accord (Jeton)

1 Début

2

3

Etati ?-En SC;

< Entrer en Section Critique>

4 Fin

Lorsqu'un site de l'arbre a déjà envoyé une demande d'entrer en section critique, il va

recevoir un message de type Accord si sa racine possède au moins un jeton libre, lors de la réception de ce message, le site va mettre son état EN SC, et entre à la section critique.

Finsi

Procédure 3: Libérer la Section Critique

1 Début

Etati ?-Dehors;

Envoyer Libération (Jeton) à Racinei;

4 Fin

Cette procédure est utilisée si un site veut libérer la section critique.

Procédure 4: Réception de Libération (Jeton)

1 Début

2

Si Longueuri > 0 alors

3

Jeton Reçu ();

4

Sinon

5

Jetons_libresi ?- Jetons_libresi + 1;

6

Finsi

7 Fin

lorsque la racine reçoit une libération du jeton, elle va voir si sa file d'attente elle est vide, si c'est le cas elle va incrémenter son compteur de jetons libres, sinon elle va appeler la procédure Jeton_Reçu().

Procédure 5: Réception de Demande (Jeton, j)

1 Début

Si Jetons_libresi > 0 alors

Envoyer Accord (Jeton) à j;

Jetons_libresi ?- Jetons_libresi - 1;

2

3

Sinon

Si Jetons_presentsi = Longueuri alors

Envoyer Requête (Jeton, i) à voisin_droiti;

Finsi

Demandeursi ?- Demandeursi + {j}; Longueuri ?- Longueuri + 1;

2

3

4

5

6

7

8

9

10

11

12 Fin

Le site racine qui reçoit une demande d'un site dans l'arbre, il va accorder cette demande en envoyant un jeton, s'il détient des jetons libres. Dans le cas contraire, on a deux situations : si le nombre de jetons utilisés dans l'arbre permet de satisfaire les requêtes reçues au bout d'un temps fini, la racine va attendre la libération d'un jeton, si non, le site racine va demander un jeton supplémentaire d'un voisin dans l'anneau par l'envoi d'un message de type Requête, dans les deux cas, la demande sera ajoutée à la file d'attente.

Procédure 6: Réception de Requête (Jeton, j)

1 Début

Si Jetons_libresi > 0 alors

Utiliser le plus court chemin (j);

Jetons_libresi +- Jetons_libresi - 1; Jetons_presentsi +- Jetons_presentsi - 1;

Sinon

Si Jetons_presentsi > Longueuri alors

Demandeursi +- Demandeursi + {j}; Longueuri +- Longueuri + 1;

Sinon

Envoyer Requête (Jeton, j) à voisin_droiti;

Finsi

Finsi

14 Fin

Lorsqu'un site racine reçoit une requête d'un voisin, et il détient des jetons libres, il envoie un jeton vers le voisin demandeur via le plus court chemin pour minimiser le nombre de messages échangés. Si ce site ne détient pas des jetons libres, mais le nombre de jetons dans l'arbre est suffisant pour satisfaire toutes les requêtes au bout d'un temps fini, alors, la requête sera ajoutée à la file d'attente. Si non, le site va simplement propager la requête vers son voisin droit.

Procédure 7: Utiliser le plus court chemin(x : noeud)

1 Début

Distance +- i - x;

Si Distance < 0 alors

Si Distance ~ -K / 2 alors

Envoyer Aide (Jeton, j) à voisin_droiti;

2

3

4

5

6

7

8

9

10

11

12

13

Sinon

Envoyer Aide (Jeton, j) à voisin_gauchei;

Finsi

Sinon

Si Distance > K / 2 alors

Envoyer Aide (Jeton, j) à voisin_droiti;

Sinon

Envoyer Aide (Jeton, j) à voisin_gauchei;

Finsi

Finsi

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16 Fin

Cette procédure représente la stratégie qui nous permet d'améliorer la complexité en nombre de messages, cette procédure est utilisée pour envoyer le jeton via le plus court chemin, le site racine qui va répondre favorablement à la requête de son voisin, doit calculer

la distance, qui est le nombre d'arêtes qui les séparent, si cette distance est inférieure à K/2, le jeton sera donc envoyé vers le voisin gauche (retour en arrière), si non, le jeton sera envoyé vers le voisin droit.

2

3

4

5

6

7

8

9

10

11

12

13

14

Procédure 8: Réception de Aide (Jeton, j)

1 Début

2

Si i =6 j alors

3

Utiliser le plus court chemin (j);

4

Sinon

5

 

Si Longueuri > 0 alors

6

 
 

Jetons_presentsi +- Jetons_presentsi + 1;

7

 
 

Jeton Reçu ();

8

 

Sinon

9

 
 

Jetons_libresi +- Jetons_libresi + 1;

10

 
 

Jetons_presentsi +- Jetons_presentsi + 1;

11

 

Finsi

12

Finsi

13 Fin

Après l'envoi d'un jeton vers un voisin, le jeton peut passer par plusieurs sites avant d'atteindre sa destination, ces sites peuvent être aussi des sites demandeurs, pour cela, on doit garantir que chaque jeton doit être utilisé par son demandeur. Le message Aide désigne l'identité du demandeur, le site qui reçoit ce message va comparer son identité avec celle de demandeur qui se trouve dans le message, dans le cas où les identités sont différentes, le site doit propager le jeton vers le voisin adéquat en utilisant le plus court chemin.

Procédure 9: Jeton Reçu ()

1 Début

Q +- la_tete_de_la_file_d'attente; Supprimer la tête de la file d'attente; Longueuri +- Longueuri - 1;

Si Q = Site_Racine alors

Utiliser le plus court chemin (Q); Jetons_presentsi +- Jetons_presentsi - 1;

Finsi

Si Q = Site_Simple alors

Envoyer Accord (Jeton) à Q;

Finsi

Si Q = i alors

Etati +-En SC;

< Entrer en Section Critique>

Finsi

15

16 Fin

Lorsqu'un site racine reçoit un jeton à partir d'un voisin ou d'un site de l'arbre, il doit mettre à jour ses variables locales. Si la file d'attente des sites demandeurs n'est pas vide, on doit donc satisfaire la plus ancienne requête dans cette file en appliquant la procédure Jeton_Reçu.

- 1er cas : la tête de la file est un site racine, le site doit donc envoyer le jeton vers le site demandeur et doit encore mettre à jour les deux variables : Jetons libres et Jetons présents.

- 2ème cas : la tête de la file d'attente est un site régulier dans l'arbre, la racine va envoyer le jeton et mettre à jour la variable Jetons_libres.

- 3ème cas : le site demandeur est la racine elle-même, cette situation nous amène à décrire le comportement d'un site racine lorsqu'il désire entrer en SC, donc il passe directement en SC.

2

3

4

5

6

7

8

9

10

11

Procédure 10: Demande de la Section Critique par une racine

1 Début

Si Jetons_libresi > 0 alors

Jetons_libresi ?- Jetons_libresi - 1; Etati ?-En SC;

< Entrer en Section Critique>

Sinon

Si Jetons_presentsi = Longueuri alors

Envoyer Requête (Jeton, i) à voisin_droiti; Finsi

Demandeursi ?- Demandeursi + {i}; Longueuri ?- Longueuri + 1;

Finsi

12

13 Fin

Lorsqu'une racine veut entrer en SC.

Finsi

Procédure 11: Libération de la Section Critique par une racine

1 Début

Etati +-Dehors;

Si Longueuri > 0 alors

Q +- la_tete_de_la_file_d'attente;

Supprimer la tête de la file d'attente;

Longueuri +- Longueuri - 1;

Si Q = Site_Racine alors

Utiliser le plus court chemin (Q);

Jetons_presentsi +- Jetons_presentsi - 1;

Finsi

Si Q = Site_Simple alors

Envoyer Accord (Jeton) à Q;

Finsi

Sinon

Jetons_libresi +- Jetons_libresi + 1;

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17 Fin

Si un site racine veut libérer la SC. 3.2.6 Preuve de l'algorithme

3.2.6.1 La K-exclusion mutuelle

Pour prouver que cet algorithme assure la K-exclusion mutuelle, on doit assurer que K sites au plus exécutent la SC simultanément : dans les algorithmes utilisant les jetons, seule la possession d'un jeton permet à un site l'exécution de la SC, puisqu'on a K jetons dans l'algorithme, alors au plus K sites peuvent entrer en SC. la K-exclusion mutuelle est donc assurée.

3.2.6.2 Absence d'interblocage

Nous allons montrer l'absence d'interblocage par l'absurde, on suppose que le système est en interblocage, il existe donc un cycle des sites x1, x2, ..., xn, tel que x1 attend un jeton de x2, x2 attend un jeton de x3, ..., et xn attend un jeton de x1 [Lai02].

Dans l'algorithme, seules les racines peuvent demander des jetons via l'anneau, un site racine ne demande un jeton que s'il ne peut pas satisfaire ses requêtes locales, avant de satisfaire ses requêtes, cette racine n'a pas le droit de stocker de nouvelles requêtes, si ce site reçoit une requête, il va la propager vers un voisin, le cycle donné ci-dessus ne peut jamais apparaître dans notre algorithme. Cet algorithme est donc exempt de l'interblocage.

3.2.6.3 Absence de la famine

Un site demandeur i sera ajouté à la file d'attente, toutes les requêtes qui arrivent après cette requête seront ajoutées à la fin de la file d'attente. La famine aura lieu si ces requêtes obtiennent un jeton avant le site i, c'est à dire, une décision injuste est faite au niveau du site racine. Dans notre algorithme, le site racine ajoute les requêtes dans la file d'attente selon leur ordre d'arrivée, la tête de la file est toujours la requête la plus ancienne. Si un jeton libre est disponible, le site racine va l'envoyer vers la tête de la file, les autres requêtes doivent attendre la libération de ce jeton ou la disponibilité d'un autre. Notre algorithme n'a pas de problèmes de famine.

3.2.7 Complexité de l'algorithme en nombre de messages

On peut distinguer deux situations selon la nature du site demandeur, si le site demandeur est une racine et il détient un jeton libre, il passe directement à la SC, le nombre de message nécessaire dans ce cas est 0, si non, il va demander à ses voisins un jeton, le nombre de message nécessaire dans ce cas est K messages au maximum. Pour un site dans un arbre, l'entrée en SC nécessite au minimum deux messages : un message de demande est un autre message de réponse si la racine détient un jeton libre, si non, le site racine doit demander un jeton supplémentaire où on a besoin de K messages au pire des cas, donc au maximum K+2 messages seront échangés pour répondre à la demande d'un site.

En conclusion, notre algorithme nécessite entre 0 et K+2 messages par entrée en SC, ce qui représente une grande amélioration par rapport aux algorithmes proposés dans ce cadre, la complexité est donnée en fonction de K. La figure 3.3 résume la complexité de notre algorithme :

Figure 3.3 - La complexité de notre algorithme.

Dans notre algorithme, on peut assurer la K-exclusion mutuelle sans aucun échange de messages dans le meilleur cas, la K-EM est assurée en échangeant K+2 messages seulement dans le cas défavorable. On remarque que la valeur de N est absente dans la complexité de notre algorithme.

3.3 RéSULTATS DE SIMULATION

Pour résoudre les problèmes liés à un système donné, on fait appel à des algorithmes ou des protocoles, ces algorithmes doivent être testés et évalués pour les valider, et pour satisfaire leurs insuffisances.

Vue à la difficulté de l'implémentation réelle de notre algorithme, nous avons fait appel à l'outil de simulation NS-2 qui a montré sa puissance dans la simulation des systèmes répartis.

3.3.1 Les paramètres de simulation

Afin de tirer des résultats par une simulation on doit identifier des paramètres pouvant influencer sur le comportement de l'algorithme, la variation de ces paramètres peut montrer son effet sur les performances de notre algorithme.

Dans notre simulation nous avons fixé la durée de la SC à une seconde et nous avons varié d'autres paramètres ce qui nous permet d'obtenir les scénarios suivants :

- Scénario 1 : Variation du nombre de requêtes.

Nous avons varié le nombre de requêtes entre 5 et 40 requêtes.

- Scénario 2 : Variation du nombre de ressources.

Nous avons varié le nombre de ressources entre 3 et 12 ressources.

- Scénario 3 : Variation du nombre de sites

Nous avons varié le nombre de sites entre 10 et 55 sites.

Les scénarios sont illustrés dans la figure 3.4 ci-dessous :

Figure 3.4 - Variation des paramètres de simulation.

3.3.2 Evaluation de performance

Le but des différents scénarios était d'identifier les paramètres ayant une influence sur la performance de l'algorithme, cette performance est exprimée par deux valeurs importantes :

- Le nombre de messages moyen (NMM) : Chaque entrée en section critique nécessite un échange d'un ensemble de messages, le nombre moyen de messages échangés par entrée en section critique est calculé par la formule suivante :

Nombre de messages total

NMM = Nombre d'entrée en Section Critique

Cette valeur est considérée comme un facteur important de performance des algorithmes de l'exclusion mutuelle.

- Le temps d'attente moyen (TAM) : Un site qui demande une section critique doit attendre un intervalle de temps appelé le temps d'attente, le temps d'attente moyen est calculé par la formule suivante :

?i Temps d'attentei

TAM =

Nombre d'entrée en Section Critique

Comme le nombre moyen de messages, le temps d'attente moyen est également l'un des facteurs importants pour l'évaluation de la performance des algorithmes.

3.3.3 Les étapes d'un scénario

Pour réaliser un scénario donné, nous devons introduire les différentes informations nécessaires pour la simulation dans l'ordre suivant :

Figure 3.5 - Les étapes de réalisation d'un scénario.

3.3.4 Résultats et interprétations

3.3.4.1 Variation du nombre de requêtes

(a)

(b)

Figure 3.6 - Influence du nombre de requête sur le NMM et TAM.

Dans la courbe (a) on remarque une augmentation du NMM avec l'augmentation des requêtes, cette augmentation est justifiée, car l'entrée en SC nécessite un échange de messages, avec l'augmentation des demandes, les ressources deviennent indisponibles, les messages de demande des autres sites tournent dans l'anneau jusqu'à l'obtention d'une ressource, c'est la raison pour laquelle on remarque cette augmentation.

Dans la courbe (b) on constate deux parties : une augmentation ensuite une diminution : l'augmentation dans la courbe est justifiée par la charge du système, les dates des demandes sont très proches, donc plusieurs sites restent en attente. Dans la deuxième partie, la diminution est justifiée par la sortie des sites de leur section critique, donc les nouveaux sites demandeurs restent moins de temps en attente.

3.3.4.2 Variation du nombre de ressources

(a) (b)

Figure 3.7 - Influence du nombre de ressource sur le NMM et TAM.

Dans la courbe (a) on remarque une diminution du nombre de messages moyen avec l'augmentation de nombre de ressources, et on remarque la même chose avec le temps d'attente moyen dans la courbe (b), cela est justifié par la disponibilité des ressources (qui dépasse même le nombre de demandes dans certains cas) qui permet des entrées en SC avec le minimum d'échanges de messages et donc le minimum de temps d'attente.

3.3.4.3 Variation du nombre de sites

 
 
 
 
 
 

(a)

(b)

Figure 3.8 - Influence du nombre de site sur le NMM et TAM.

Le NMM dans la courbe (a), et le TAM dans la courbe (b) sont presque stable même avec l'augmentation du nombre de sites, une chose qui est naturelle car les sites qui ne sont pas demandeurs n'ont pas une influence sur le comportement de l'algorithme, on peut dire que l'augmentation du nombre de sites n'a pas une influence sur les valeurs étudiées.

D'après cette simulation on peut dire que le NMM et le TAM dépendent proportionnellement de nombre de requêtes, dépendent disproportionnellement de nombre de ressources, et l'augmentation de nombre de sites n'a aucune influence sur le comportement de l'algorithme.

Un problème : (le temps d'attente moyen)

Dans notre algorithme nous avons constaté une insuffisance concernant le TAM, ce temps augmente avec l'augmentation de requêtes, cela est justifié par le mécanisme de l'algorithme : lorsqu'un site racine reçoit une demande, il la sauvegarde dans sa file d'attente en attendant la libération d'un jeton (voir la procédure Demander SC), alors qu'il peut exister un jeton libre au niveau d'autre site racine, si on arrive à utiliser ce jeton libre, on pourra minimiser le temps d'attente.

Une solution proposée

Au lieu d'attendre la libération d'un jeton utilisé, on va améliorer notre algorithme par l'utilisation d'un nouveau message de type Recherche qui va rechercher un éventuel jeton libre détenu par un voisin, l'utilisation de ce jeton va certainement minimiser le temps d'attente.

3.4 AMéLIORATION N°1 (LE MESSAGE RECHERCHE)

La forme de ce message est Recherche (Jeton, i), il sera envoyé par une racine i pour demander un jeton supplémentaire d'un voisin.

Pour utiliser ce message, on applique des modifications sur la procédure Réception de Demande (Jeton,j) et l'ajout de la procédure (Réception de Recherche (Jeton, j)) :

2

3

4

5

6

7

8

9

10

11

12

Procédure : Réception de Demande (Jeton, j)

Amélioration N° : 1

1 Début

Si Jetons_libresi > 0 alors

Envoyer Accord (Jeton) à j;

Jetons_libresi ?- Jetons_libresi - 1;

Sinon

Si Jetons_presentsi = Longueuri alors

Envoyer Requête (Jeton, i) à voisin_droiti; Sinon

Envoyer Recherche (Jeton, i) à voisin_droiti; Finsi

Demandeursi ?- Demandeursi + {j}; Longueuri ?- Longueuri + 1;

Finsi

13

2

3

4

5

6

7

8

14 Fin

La réception du message Recherche par une racine fait appel à la procédure suivante :

Procédure : Réception de Recherche (Jeton, j)

Amélioration N° : 1

1 Début

Si Jetons_libresi > 0 alors

Utiliser le plus court chemin (j);

Jetons_libresi ?- Jetons_libresi - 1; Jetons_presentsi ?- Jetons_presentsi - 1;

Sinon

Envoyer Recherche (Jeton, j) à voisin_droiti; Finsi

9 Fin

3.4.1 Résultats et interprétations

Après l'amélioration de notre algorithme nous avons réalisé une nouvelle simulation par les mêmes paramètres afin de cerner l'influence de cette amélioration sur la performance de l'algorithme.

Remarque : le nouvel algorithme est appelé A1. 3.4.1.1 Variation du nombre de requêtes

(a)

(b)

Figure 3.9 - Influence du nombre de requête sur le NMM et TAM.

Dans la courbe (a), on remarque que le NMM de l'algorithme amélioré dépasse le NMM du premier algorithme, cela est justifié par l'utilisation de message Recherche.

Cependant dans la courbe (b), nous avons réussi à diminuer le TAM par rapport à la version précédente car les sites demandeurs n'attendent pas la libération des jetons utilisés mais ils vont compter sur le message Recherche pour trouver des jetons libres au niveau des autres sites voisins.

3.4.1.2 Variation du nombre de ressources

(a)

(b)

Figure 3.10 - Influence du nombre de ressource sur le NMM et TAM.

La courbe (a) montre que le nombre de messages échangés NMM-A1 est nettement meilleurs que la version précédente cela est du à l'utilisation du nouveau message Recherche qui a permis d'éviter le mouvement infini des messages Requête, car les jetons

libres sont très rapidement localisés.

On remarque dans la courbe (b) que le TAM-A1 est meilleur que le TAM grâce au message Recherche.

3.4.1.3 Variation du nombre de sites

(a) (b)

Figure 3.11 - Influence du nombre de site sur le NMM et TAM.

Nous savons que la variation du nombre des sites n'a pas une influence sur l'algorithme, malgré ça on remarque une diminution du TAM-A1 dans la courbe (b), l'augmentation du NMM-A1 dans la courbe (a) est justifié par l'utilisation du message Recherche.

Avec l'utilisation du nouveau message Recherche, on remarque bien qu'on a pu minimiser le temps d'attente moyen.

Un problème : (nombre moyen de messages)

Dans le premier algorithme étudié nous avons constaté que le NMM à une valeur un peu élevée car la réponse à une demande doit passer par le plus court chemin dans l'anneau, si le nombre de racines augmente on aura une nette augmentation de NMM, d'une autre part nous savons que le réseau du système est complet, il vaut mieux donc exploiter cette caractéristique afin de minimiser le NMM.

Une solution proposée

Au lieu de passer par plusieurs éléments dans l'anneau le message Aide sera envoyé directement vers le site demandeur, cela peut minimiser le NMM.

3.5 AMéLIORATION N°2 (ANNULER LA MéTHODE {UTILISER LE PLUS COURT CHEMIN})

Pour mettre en place cette amélioration, on applique les modifications suivantes :

2

3

4

5

6

7

8

Procédure : Réception de Requête (Jeton, j)

2

Amélioration

1 Début

N° 2

Si Jetons_libresi > 0 alors

3

 

Envoyer Aide (Jeton, j) à j;

4

 

Jetons_libresi ?- Jetons_libresi - 1;

5

 

Jetons_presentsi ?- Jetons_presentsi - 1;

6

Sinon

7

 

Si Jetons_presentsi > Longueuri alors

8

 
 

Demandeursi ?- Demandeursi + {j};

9

 
 

Longueuri ?- Longueuri + 1;

10

 

Sinon

11

 

Envoyer Requête (Jeton, j) à voisin_droiti;

12

 

Finsi

13

Finsi

14 Fin

Procédure : Réception de Recherche (Jeton, j)

Amélioration N° 2

1 Début

Si Jetons_libresi > 0 alors

Envoyer Aide (Jeton, j) à j;

Jetons_libresi ?- Jetons_libresi - 1; Jetons_presentsi ?- Jetons_presentsi - 1;

Sinon

Envoyer Recherche (Jeton, j) à voisin_droiti; Finsi

2

3

4

5

6

7

8

9 Fin

Procédure : Réception de Aide (Jeton, j)

Amélioration N° 2

1 Début

Si Longueuri > 0 alors

Jetons_presentsi ?- Jetons_presentsi + 1; Jeton Reçu ();

Sinon

Jetons_libresi ?- Jetons_libresi + 1; Jetons_presentsi ?- Jetons_presentsi + 1;

Finsi

9 Fin

2

3

4

5

6

7

8

9

10

11

12

13

14

Procédure : Jeton Reçu ()

Amélioration N° 2

1 Début

Q ?- la_tete_de_la_file_d'attente;

Supprimer la tête de la file d'attente; Longueuri ?- Longueuri - 1;

Si Q = Site_Racine alors

Envoyer Aide (Jeton, j) Q;

Jetons_presentsi ?- Jetons_presentsi - 1;

Finsi

Si Q = Site_Simple alors

Envoyer Accord (Jeton) à Q;

Finsi

Si Q = i alors

Etati ?-En SC;

< Entrer en Section Critique>

Finsi

15

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16 Fin

Procédure : Libération de la Section Critique par une racine

Amélioration N° 2

1 Début

Etati ?-Dehors;

Si Longueuri > 0 alors

Q ?- la_tete_de_la_file_d'attente;

Supprimer la tête de la file d'attente; Longueuri ?- Longueuri - 1;

Si Q = Site_Racine alors

Envoyer Aide (Jeton, j) Q;

Jetons_presentsi ?- Jetons_presentsi - 1;

Finsi

Si Q = Site_Simple alors

Envoyer Accord (Jeton) à Q;

Finsi

Sinon

Jetons_libresi ?- Jetons_libresi + 1;

Finsi

16

17 Fin

3.5.1 Résultats et interprétations

Cette nouvelle amélioration a été validée par une simulation qui nous a permis d'obtenir les résultats suivants :

3.5.1.1 Variation du nombre de requêtes

(a)

(b)

Figure 3.12 - Influence du nombre de requête sur le NMM et TAM. 3.5.1.2 Variation du nombre de ressources

(a)

(b)

Figure 3.13 - Influence du nombre de ressource sur le NMM et TAM. 3.5.1.3 Variation du nombre de sites

(b)

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

(a)

 
 
 
 
 
 

Figure 3.14 - Influence du nombre de site sur le NMM et TAM.

L'utilisation de cette amélioration a donnée des résultats presque identiques avec les autres algorithmes, cela peut être justifié par la taille limitée de l'anneau, l'avantage de cette amélioration peut apparaître avec plusieurs racines et plusieurs demandes à la fois. Par conséquent il nous reste toujours à résoudre le problème de NMM élevé.

Un problème : (nombre moyen de messages)

Puisque l'amélioration précédente n'avait pas une grande influence sur la performance de notre algorithme, nous devons penser à une nouvelle amélioration permettant de minimiser le NMM.

Lorsqu'on remarque le comportement de notre algorithme on constate que le NMM élevé est causé par le mouvement perpétuel et inutile des messages Requête et Recherche surtout lorsqu'il y a plusieurs demandes, si on arrive à éviter ce mouvement perpétuel on pourra minimiser le NMM.

Une solution proposée

Puisque les demandes sont sauvegardées au niveau des racines, il est inutile de continuer à tourner dans l'anneau car le jeton ne sera envoyé qu'après sa libération, pour cela le message Requête et Recherche seront arrêtés s'ils arrivent à la racine qui les a initié.

3.6 AMéLIORATION N°3 (ARRêT DES MOUVEMENTS INUTILES)

Cette amélioration nécessite des changements au niveau de la procédure Réception de Requête (Jeton, j) (ligne 11) et la procédure Réception de Recherche (Jeton, j) (ligne 7).

Procédure : Réception de Requête (Jeton, j)

Amélioration N° : 3 1 Début

2

Si Jetons_libresi > 0 alors

3

 

Envoyer Aide (Jeton, j) à j;

4

 

Jetons_libresi ?- Jetons_libresi - 1;

5

 

Jetons_presentsi ?- Jetons_presentsi - 1;

6

Sinon

7

 

Si Jetons_presentsi > Longueuri alors

8

 
 

Demandeursi ?- Demandeursi + {j};

9

 
 

Longueuri ?- Longueuri + 1;

10

 

Sinon

11

 
 

Si i =6 j alors

12

 
 

Envoyer Requête (Jeton, j) à voisin_droiti;

13

 
 

Finsi

14

 

Finsi

15

Finsi

16 Fin

Procédure : Réception de Recherche (Jeton, j)

Amélioration N° : 3

1 Début

Si Jetons_libresi > 0 alors

Envoyer Aide (Jeton, j) à j;

Jetons_libresi +- Jetons_libresi - 1; Jetons_presentsi +- Jetons_presentsi - 1;

Sinon

Si i =6 j alors

Envoyer Recherche (Jeton, j) à voisin_droiti;

Finsi

Finsi

2

3

4

5

6

7

8

9

10

11 Fin

3.6.1 Résultats et interprétations

Cette nouvelle amélioration a été validée par une simulation et a donnée les résultats suivants.

3.6.1.1 Variation du nombre de requêtes

(a)

(b)

Figure 3.15 - Influence du nombre de requête sur le NMM et TAM.

Dans la courbe (a) il est clair que le nombre de messages échangés a été amélioré de façon considérable dans NMM-A3, grâce à la nouvelle amélioration.

Cependant dans la courbe (b) le TAM A3 est presque identique aux autres temps car le but de l'amélioration était de réduire le nombre de messages échangés et cela n'accélère pas l'échange des jetons.

3.6.1.2 Variation du nombre de ressources

(a) (b)

Figure 3.16 - Influence du nombre de ressource sur le NMM et TAM.

On remarque que le résultat obtenu est identique aux résultats précédents car la disponibilité des ressources permet de satisfaire les demandes sans avoir besoin de propager inutilement les messages Requête et Recherche.

3.6.1.3 Variation du nombre de sites

(a) (b)

Figure 3.17 - Influence du nombre de site sur le NMM et TAM.

Puisque la variation du nombre de sites n'a pas une influence sur le comportement du système nous avons obtenu les mêmes résultats avec cette simulation.

3.7 LES COURBES FINALE ET COMPARAISON

3.7.1 Variation du nombre de requêtes

(a)

(b)

Figure 3.18 - Influence du nombre de requête sur le NMM et TAM.

3.7.2 Variation du nombre de ressources

(a)

(b)

Figure 3.19 - Influence du nombre de ressource sur le NMM et TAM.

3.7.3 Variation du nombre de sites

(a)

(b)

Figure 3.20 - Influence du nombre de site sur le NMM et TAM.

3.8 CONCLUSION

D'après ces courbes on peut dire qu'on a arrivé à une performance très acceptable en utilisant toutes ces amélioration, il est clair que les résultats obtenus avec l'amélioration 3 sont les meilleurs car cette dernière amélioration utilise les améliorations précédentes.

3.9 LA TOLéRANCE AUX PANNES

La simulation réalisée montre bien la performance de notre algorithme, dans cet algorithme nous avons supposé que les sites ne tombent pas en panne, mais dans la réalité le système peut souffrir des éventuelles pannes, c'est la raison pour laquelle nous avons pensé à intégrer la tolérance aux pannes dans l'algorithme A3 qui a donné les meilleurs résultats afin d'exploité sa performance.

3.9.1 L'idée de base

Dans notre algorithme nous avons deux types de sites, les sites simples et les sites racines, les informations nécessaires pour la gestion des accès à la section critique se trouvent au niveau des racines. Donc la panne qui peut poser un problème est la panne de l'une des racines, les sites simples n'auront pas une influence sur le comportement du système s'ils tombent en panne, il nous faut donc d'avoir un moyen permettant de préserver les informations détenus par les racines pour pouvoir les récupérer en cas de panne.

L'idée de base de notre algorithme consiste à désigner un site particulier dans l'arbre appelé Sous_Racine. Le rôle de ce site consiste à stocker une copie dupliquée des informations qui se trouvent au niveau de sa racine, ces informations sont envoyées par la racine vers son Sous_Racine après chaque mise à jour, en cas de panne d'une racine, les informations stockées au niveau du Sous_Racine lui permettent de prendre la place de la racine sans aucun problème et donc le système continue à fonctionner normalement.

Le choix du Sous_Racine se fait en utilisant les identités, on va choisir le site ayant la plus petite identité dans l'arbre.

Si un Sous_Racine tombe en panne, la racine va désigner tout simplement un nouveau Sous_Racine.

3.9.2 Description de l'algorithme

3.9.2.1 Les variables locales

Les sites vont utilisés les mêmes variables locales sauf la racine qui va utiliser une nouvelle variable locale (Sous_racine), tel que pour une Racinei, Sous_Racinei = i+K. Si le Sous_Racine tombe en panne, Sous_Racinei devient i+2K.

3.9.2.2 Les messages utilisés

Dans cette version on utilise les mêmes messages de l'ancien algorithme et on ajoute deux nouveaux messages.

- Information : ce message contient les valeurs des variables locales de la racine qui permettent au Sous_Racine de prendre la relève en cas de panne de la racine, ces

informations sont : les identités des voisins gauche et droit, le nombre de jetons libres et présents, ainsi que la file d'attente Demandeursi.

- Nouveau_Racine (i, j) : envoyé par le Sous_Racine j en cas d'une panne de la racine pour informer ces fils de l'arbre ainsi que ces voisins qu'il va prendre la place de leur racine originale.

3.9.2.3 Les procédures de l'algorithme

- Chaque racine va envoyer un message Information à son Sous_Racine après chaque mise à jour de ses variables locales.

- Le Sous_Racinei doit mettre à jour toutes ces variables après chaque réception d'un message Information.

- La panne d'un site simple ne provoque aucune action sauf si ce dernier détient un jeton, dans ce cas le site racine doit générer un nouveau jeton.

- Lorsque le Sous_Racinei tombe en panne, la racine doit désigner un nouveau Sous_Racinej dont l'identité sera i + 2*K, ensuite la racine envoie un message de type Information à ce nouveau Sous_Racinej.

- Lorsque la racine tombe en panne, le Sous_Racinej détecte cette panne, et doit prendre sa place en exécutant la procédure suivante :

Racinej +- Nil.

voisin_droitj +- voisin_droiti.

voisin_gauchej +- voisin_gauchei.

Envoyer Nouveau_Racine (i, j) à voisin_droitj.

Envoyer Nouveau_Racine (i, j) à voisin_gauchej.

Envoyer Nouveau_Racine (i, j) à tous les éléments de l'arbre.

- Lorsque les membres de l'arbre reçoivent le message de type Nouveau_Racine (i, j), ils doivent modifier l'identité de leur racine.

Racinep +- j.

- Lorsque les voisins reçoivent le message de type Nouveau_Racine (i, j), ils doivent mettre à jour leur nouveau voisin.

- Au niveau du voisin gauche: voisin_droiti +- j.

- Au niveau du voisin droit : voisin_gauchei +- j.

- Lorsque la racine revient d'une panne, le Sous_Racine va informer les voisins ainsi que tous les membres de l'arbre que la racine va prendre sa place initiale en réalisant les taches suivantes :

Envoyer Nouveau_Racine (j, i) à voisin_droitj.

Envoyer Nouveau_Racine (j, i) à voisin_gauchej.

Envoyer Nouveau_Racine (j, i) à tous les éléments de l'arbre.

3.9.3 Résultats et interprétations

Afin d'étudier la performance de ce nouvel algorithme, nous avons réalisé une simulation par les mêmes paramètres précédents et on a fixé le nombre de pannes à trois pannes dans chaque scénario.

3.9.3.1 Variation du nombre de requêtes

(a) (b)

Figure 3.21 - Influence du nombre de requête sur le NMM et TAM. 3.9.3.2 Variation du nombre de ressources

(a)

(b)

Figure 3.22 - Influence du nombre de ressource sur le NMM et TAM.

3.9.3.3 Variation du nombre de sites

(a)

(b)

Figure 3.23 - Influence du nombre de site sur le NMM et TAM.

D'après les courbes obtenues on remarque que le nouvel algorithme propose a respecte le même comportement avec l'algorithme initial, on peut dire donc que la tolerance aux pannes n'a pas influence sur la performance de notre algorithme.

Il faut comme même dire qu'il y a une faible augmentation dans le NMM, cela est justifie par l'echange continu des messages Information et Nouveau_Racine.

Un problème : (Nombre de messages un peu élevé)

Malgre que la solution precedente a rendu notre algorithme tolerant aux pannes, nous avons remarque que le nombre de message echanges de cet algorithme depasse celui de l'algorithme initial, cela est justifie par les messages Information et Nouveau_Racine qui sont important pour assurer la tolerance aux pannes, et par les autres messages echanges lorsqu'une racine revient de son etat de panne.

Une solution proposée

Puisque le Sous_Racine peut remplacer son racine en cas de panne sans aucun problème, il parait inutile que la racine defaillante reprends sa place lorsqu'elle revient de l'etat de panne, donc on peut eviter l'echange eleve de messages en respectant la même racine et en considerant l'ancien racine comme un site simple. Cette amelioration va nous permettre de minimiser le NMM, tout en gardant la performance de l'algorithme A3.

3.10 AMtLioRATioN (ALGoRiTHME ToLtRANT AuX pANNEs AMtLioRt) Nous allons effectuer le changement suivant :

- Lorsque la racine revient de son etat de panne, elle sera consideree comme un site simple, ses prochaines requêtes seront demandees de la racine de son arbre.

3.10.1 Résultats et interprétations

3.10.1.1 Variation du nombre de requêtes

(a) (b)

Figure 3.24 - Influence du nombre de requête sur le NMM et TAM.

3.10.1.2 Variation du nombre de ressources

(a)

(b)

Figure 3.25 - Influence du nombre de ressource sur le NMM et TAM.

3.10.1.3 Variation du nombre de sites

(a) (b)

Figure 3.26 - Influence du nombre de site sur le NMM et TAM.

Le but de notre amélioration était de minimiser le NMM, une chose qui a été atteinte comme on remarque dans toutes les courbes, on constate que le NMM de l'algorithme amélioré est meilleur que celui du 1er algorithme tolérant aux pannes.

Il est clair que le TAM est pratiquement identique car le but de l'amélioration vise de minimiser le NMM sans avoir besoin de changer le comportement de l'algorithme.

CONCLUSION

À travers notre étude comparative mener dans ce chapitre, nous avons pu améliorer notre algorithme initial d'une façon incrémentale jusqu'à l'obtention d'une version très performante en nombre de messages échangés et en temps d'attente.

La performance prouvée de notre algorithme nous a motivé à introduire un nouveau concept dans l'algorithme pour le rendre tolérant aux pannes, cette amélioration a permis au système de continuer à fonctionner même en présence de pannes tout en gardant la performance de notre algorithme.

D'après l'étude réalisée on peut conclure que :

- Le NMM et le TAM dépendent proportionnellement du nombre de requêtes.

- Le NMM et le TAM dépendent disproportionnellement du nombre de ressources. - La variation du nombre de sites n'a pas une influence sur le NMM et le TAM.

SIMULATION DE L'ALGORITHME DANS 4

LES RéSEAUX AD HOC

SOMMAIRE

4.1 INTRODUCTION

4.2 L'ALGORITHME

64
64

4.2.1 Hypothèses du Système

64

4.2.2 Les procédures de l'algorithme

64

4.2.3 Paramètres de simulation

69

4.2.3.1 Les paramètres fixes

69

4.2.3.2 Les paramètres variables

69

4.2.4 Résultats et interprétations

70

4.2.4.1 Variation du nombre de demandeurs

70

4.2.4.2 Variation de la portée de communication

71

4.2.4.3 Variation de la vitesse de mouvement

71

4.2.4.4 Variation du nombre de noeuds

72

4.2.5 Conclusion

72

4.3 TOLéRANCE AUX PANNES

72

4.3.1 Résultats et interprétations

73

4.3.1.1 Variation du nombre de demandeurs

73

4.3.1.2 Variation de la portée de communication

73

4.3.1.3 Variation de la vitesse de mouvement

73

4.3.1.4 Variation du nombre de noeuds

74

CONCLUSION

74

D

ANS ce chapitre, nous présentons les résultats obtenus par la simulation d'un algorithme de la K-exclusion mutuelle tolérant aux pannes dans les réseaux AD HOC.

4.1 INTRODUCTiON

Le problème de la K-exclusion mutuelle n'est pas bien traité dans les réseaux mobiles AD HOC, c'est pourquoi il n y a pas beaucoup d'algorithmes qui sont proposé pour résoudre ce problème dans un tel environnement.

Dans ce chapitre, nous allons simuler la dernière version améliorée de notre algorithme de la K-exclusion mutuelle ainsi que la version améliorée tolérante aux fautes dans le milieu des réseaux mobiles AD HOC afin de mieux connaître les facteurs influent sur ces performances dans cet environnement, enfin nous allons interpréter les courbes obtenues à partir de ces simulations.

4.2 L'ALGORiTHME

La 3ème version améliorée de notre algorithme dans les réseaux filaires possède pas mal d'avantages, ces avantages nous a encouragé à utiliser son principe afin de résoudre le problème de la K-exclusion mutuelle dans les réseaux AD HOC.

On va utiliser le même principe de l'algorithme mais on va respecter les caractéristiques des réseaux AD HOC tels que la mobilité des noeuds, la communication sans fil... etc.

4.2.1 Hypothèses du Système

Pour assurer le bon fonctionnement de notre algorithme, on suppose que :

- Le nombre N des noeuds et le K des racines sont connus. - Chaque noeud connaît ses voisins immédiats.

- La communication est fiable.

- Les noeuds ne tombent pas en panne.

- Le réseau n'est pas partitionné.

4.2.2 Les procédures de l'algorithme

Procédure : Demander la Section Critique

Environnement : AD HOC

1 Début

2

3

Etati ?-Demandeur;

Envoyer Demande (Jeton, i) à Racinei; 4 Fin

2

3

2

3

Finsi

Procédure : Réception de Accord (Jeton)

Environnement : AD HOC

1 Début

Etati ?-En SC;

< Entrer en Section Critique>

4 Fin

Procédure : Libérer la Section Critique

Environnement : AD HOC 1 Début

Etati ?-Dehors;

Envoyer Libération (Jeton) à Racinei;

4 Fin

Procédure : Réception de Demande (Jeton, j)

Environnement : AD HOC

1 Début

Si Jetons_libresi > 0 alors

Envoyer Accord (Jeton) à j;

Jetons_libresi ?- Jetons_libresi - 1;

Sinon

Si Jetons_presentsi = Longueuri alors

Envoyer Requête (Jeton, i) à voisin_droiti;

Sinon

Envoyer Recherche (Jeton, i) à voisin_droiti;

Finsi

Demandeursi ?- Demandeursi + {j};

Longueuri ?- Longueuri + 1;

2

3

4

5

6

7

8

9

10

11

12

13

14 Fin

Procédure : Réception la Recherche (Jeton, j)

Environnement : AD HOC

1 Début

Si Jetons_libresi > 0 alors

Envoyer Aide (Jeton, j) à j;

Jetons_libresi ?- Jetons_libresi - 1; Jetons_presentsi ?- Jetons_presentsi - 1;

2

3

4

5

6

7

8

9

10

Sinon

Si i =6 j alors

Envoyer Recherche (Jeton, j) à voisin_droiti; Finsi

Finsi

11 Fin

Procédure : Réception de Requête (Jeton, j)

Environnement : AD HOC 1 Début

2

Si Jetons_libresi > 0 alors

3

 

Envoyer Aide (Jeton, j) à j;

4

 

Jetons_libresi ?- Jetons_libresi - 1;

5

 

Jetons_presentsi ?- Jetons_presentsi - 1;

6

Sinon

7

 

Si Jetons_presentsi > Longueuri alors

8

 
 

Demandeursi ?- Demandeursi + {j};

9

 
 

Longueuri ?- Longueuri + 1;

10

 

Sinon

11

 
 

Si i =6 j alors

12

 
 

Envoyer Requête (Jeton, j) à voisin_droiti;

13

 
 

Finsi

14

 

Finsi

15

Finsi

16 Fin

2

3

4

5

6

7

8

Procédure : Réception de Aide (Jeton, j)

Environnement : AD HOC

1 Début

Si Longueuri > 0 alors

Jetons_presentsi +- Jetons_presentsi + 1; Jeton Reçu ();

Sinon

Jetons_libresi +- Jetons_libresi + 1; Jetons_presentsi +- Jetons_presentsi + 1;

Finsi

2

3

4

5

6

9 Fin

Procédure : Réception de Libération (Jeton)

Environnement : AD HOC

1 Début

Si Longueuri > 0 alors Jeton Reçu ();

Sinon

Jetons_libresi +- Jetons_libresi + 1;

Finsi

2

3

4

5

6

7

8

9

10

11

12

13

14

7 Fin

Procédure : Jeton Reçu ()

Environnement : AD HOC

1 Début

Q +- la_tete_de_la_file_d'attente;

Supprimer la tête de la file d'attente; Longueuri +- Longueuri - 1;

Si Q = Site_Racine alors

Envoyer Aide (Jeton, j) à Q;

Jetons_presentsi +- Jetons_presentsi - 1;

Finsi

Si Q = Site_Simple alors

Envoyer Accord (Jeton) à Q;

Finsi

Si Q = i alors

Etati +-En SC;

< Entrer en Section Critique>

Finsi

15

16 Fin

Finsi

Finsi

Procédure : Demande de la Section Critique par une racine

Environnement : AD HOC

1 Début

Si Jetons_libresi > 0 alors

Jetons_libresi ?- Jetons_libresi - 1;

Etati ?-En SC;

< Entrer en Section Critique>

Sinon

Si Jetons_presentsi = Longueuri alors

Envoyer Requête (Jeton, i) à voisin_droiti;

Finsi

Demandeursi ?- Demandeursi + {i};

Longueuri ?- Longueuri + 1;

13 Fin

Procédure : Libération de la Section Critique par une racine

Environnement : AD HOC

1 Début

Etati ?-Dehors;

Si Longueuri > 0 alors

Q ?- la_tete_de_la_file_d'attente;

Supprimer la tête de la file d'attente;

Longueuri ?- Longueuri - 1;

Si Q = Site_Racine alors

Envoyer Aide (Jeton, j) à Q;

Jetons_presentsi ?- Jetons_presentsi - 1;

2

3

4

5

6

7

8

9

10

11

12

Finsi

Si Q = Site_Simple alors

Envoyer Accord (Jeton) à Q;

Finsi

Sinon

Jetons_libresi ?- Jetons_libresi + 1;

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17 Fin

4.2.3 Paramètres de simulation

Pour réaliser une simulation, plusieurs paramètres doivent être définis, certains paramètres sont fixes et ne changent pas durant toute la simulation, d'autre sont variables et leur changement permet d'obtenir un nouveau scénario de simulation à chaque fois.

La variation des paramètres nous permet d'identifier ceux ayant une influence sur la performance de notre algorithme.

4.2.3.1 Les paramètres fixes

- Surface de réseau : c'est l'intervalle maximal utilisé par les noeuds pendant leurs mouvements, nous avons choisi une surface de 500m*500m.

- La durée de la SC : c'est la durée d'exécution d'une SC par un site, nous avons fixé cette valeur à 1 seconde.

- Protocole de routage : le protocole de routage permet de définir les chemins entre les noeuds pour échanger des messages. Nous pouvons choisir un protocole déjà implémenté sur NS-2, ce protocole peut être proactif ou réactif, les protocoles proactifs ne sont pas adéquats pour notre simulation car ils nécessitent la création de la table de routage avant de lancer la communication, nous devrons alors choisir un protocole réactif. Parmi les protocoles implanté sur NS-2, on a AODV et DSR .nous avons choisi Le protocole DSR car il nous a permis de déterminer automatiquement les routes nécessaires à la communication entre les noeuds, et permet également d'assurer la correction des routes tout au long de leur utilisation.

- Modèle de propagation: Dans NS-2, trois modèles de propagation sont implémentés : Free Space, Shadowing, Two-ray-ground. Dans notre simulation, le modèle two-ray-ground est choisi comme modèle de propagation, car ce modèle est devenu un standard dans la recherche sur les réseaux mobiles.

- Modèle de mobilité : NS-2 offre quelques modèles de mobilité basés sur la génération aléatoire des positions des noeuds. Parmi ces modèles, on peut citer Random WayPoint, Random Walk, Random Direction model, nous avons choisi le modèle Random WayPoint, car dans ce modèle, les noeuds sont distribués uniformément dans l'espace de simulation, leurs positions initiales sont aléatoire ainsi que leurs déplacements.

4.2.3.2 Les paramètres variables

Nous avons changé à chaque fois le nombre de noeuds, le nombre de demandeurs, la portée de communication ainsi que la vitesse de déplacement, ces changements permettent d'avoir différents scénarios.

- Scénario 1 : Variation du nombre de demandeurs

Dans ce scénario nous avons varié le nombre de demandeurs entre 3 et 18.

- Scénario 2 : Variation de la portée de communication

Nous avons varié la portée de communication entre 200 et 500 mètres.

- Scénario 3 : Variation de la vitesse de mouvement

Dans ce cas la vitesse de mouvement est variable entre 1 et 8 m/s.

- Scénario 4 : Variation du nombre de noeuds

Ce scénario a connu la variation du nombre de noeuds entre 30 et 90.

Nous pouvons illustrer les quatre scénarios dans la figure 4.1 ci dessous.

Figure 4.1 - Variation des paramètres de simulation.

4.2.4 Résultats et interprétations

Notre algorithme a été validé par une simulation qui a utilisée les scénarios précédents. Cette simulation nous a permis de tirer un ensemble de résultats intéressants.

4.2.4.1 Variation du nombre de demandeurs

 
 
 
 
 
 
 

(a)

(b)

Figure 4.2 - Influence du nombre de demandeurs sur le NMM et le TAM.

Dans la courbe (a) on remarque que le nombre de message échangés est fixe, cela est justifié par un échange constant de message pour chaque entrée en section critique, il faut mentionner que le nombre de messages compté est le nombre de messages logique, c'est-à-dire on considère tous les sauts entre la source et la destination comme étant un seul message.

Par contre dans la courbe (b), la variation du TAM est justifiée par les positions des noeuds, lorsque le noeud demandeur est loin de sa racine, le jeton nécessite plus de temps pour atteindre sa destination par contre lorsqu'un noeud est proche de sa racine la requête sera satisfaite dans un temps limité.

4.2.4.2 Variation de la portée de communication

(a)

(b)

Figure 4.3 - Influence de la portée de communication sur le NMM et le TAM.

Après la variation de la portée de communication nous constatons bien que dans la courbe (a), rien n'est changé, le NMM reste fixe, car on s'intéresse au nombre de messages logiques.

Par contre dans la courbe (b), le résultat est clair, une diminution du temps d'attente après chaque augmentation de la portée de communication, cela est dû à l'augmentation du nombre de voisins immédiats par l'augmentation de la portée.

4.2.4.3 Variation de la vitesse de mouvement

(a)

(b)

Figure 4.4 - Influence de la vitesse de mouvement sur le NMM et le TAM.

Il est clair que dans la courbe (a), le NMM est stable malgré la variation de la vitesse de déplacement et cela peut être justifié par le mécanisme utilisé par l'algorithme, donc le NMM n'a pas de relation avec la vitesse.

Dans la courbe (b), nous remarquons que le TAM n'a pas une relation clair avec la variation de la vitesse, mais on peut dire qu'il est presque stable (varie entre 0,15 et 0,25).

4.2.4.4 Variation du nombre de noeuds

(a)

(b)

Figure 4.5 - Influence du nombre de noeuds sur le TAM et NMM.

On voit dans la courbe (a) que le NMM est fixe dans la plupart du temps.

Par contre dans la courbe (b) le résultat est sans appel, une augmentation du TAM avec l'augmentation de noeuds, cela est justifié par le nombre de sauts important effectué par le jeton qui va retarder son arrivée à la destination.

4.2.5 Conclusion

D'après les courbes obtenues, nous avons remarqué que notre algorithme a gardé pratiquement la performance de sa version des réseaux filaire malgré les caractéristiques des réseaux AD HOC telles que la mobilité, la portée, ou la communication sans fil, ce n'est pas étonnant car les réseaux AD HOC ne sont qu'un type particulier des systèmes répartis.

4.3 TOLéRANCE AUX PANNES

La version améliorée de notre algorithme tolérant aux pannes dans les systèmes répartis a donnée la meilleure performance dans les tests effectués et cela nous a motivés à utiliser son principe pour résoudre le problème de la tolérance aux pannes dans les réseaux AD HOC.

Le même principe de l'algorithme amélioré tolérant aux pannes sera utilisé, cependant on va respecter les caractéristiques des réseaux AD HOC.

4.3.1 Résultats et interprétations

L'algorithme est validé par une simulation avec les mêmes paramètres précédents et on a fixé le nombre de pannes à trois dans chaque scénario.

4.3.1.1 Variation du nombre de demandeurs

(a)

(b)

Figure 4.6 - Influence du nombre de demandeurs sur le NMM et le TAM. 4.3.1.2 Variation de la portée de communication

(a)

(b)

Figure 4.7 - Influence de la portée de communication sur le NMM et le TAM.

4.3.1.3 Variation de la vitesse de mouvement

(a)

(b)

Figure 4.8 - Influence de la vitesse de mouvement sur le NMM et le TAM.

4.3.1.4 Variation du nombre de noeuds

(a)

(b)

Figure 4.9 - Influence du nombre de noeuds sur le TAM et NMM.

En générale l'algorithme tolérant aux pannes a respecté le même comportement que l'algorithme initial.

Cependant il ne faut pas négliger l'augmentation du NMM dans certains courbes, tels que la variation du nombre de noeuds ou la variation du nombre de demandeurs, cette augmentation est justifiée par l'utilisation des messages Information et Nouveau_Racine.

CONCLUSION

La simulation de notre algorithme dans les réseaux mobile nous a permis d'identifier les paramètres ayant une influence sur la performance de notre algorithme, nous avons pu tirer les résultats suivants :

- La variation du nombre de demandeurs n'a pas une influence sur le NMM et le TAM.

- Le TAM dépends disproportionnellement de la portée de communication.

- La vitesse de mouvement n'a pas une relation claire avec le NMM et le TAM. - La variation du nombre de noeuds a une relation proportionnelle avec le TAM.

- La variation de la portée ou du nombre de noeuds n'a pas d'influence sur le NMM.

CONCLUSION ET PERSPECTIVES

À

Travers notre étude menée dans ce mémoire, qui avait pour but l'évaluation et l'amélioration des algorithmes proposés dans le cadre de la K-exclusion mutuelle dans les systèmes répartis et dans les réseaux AD HOC.

Nous avons mets l'accent sur les notions de base de ce problème, et nous avons également expliqué les algorithmes proposés ainsi que les améliorations apportées.

L'évaluation de cet algorithme a été réalisée par NS-2, l'outil de simulation qui permet de valider les algorithmes dans les conditions les plus réelles.

Ce travail nous a permis de :

- Comprendre le problème de l'exclusion mutuelle et son extension en K-ressources ainsi que la notion de la tolérance aux pannes.

- Faire une recherche bibliographique pour recenser les différentes solutions apportées à ces problèmes.

- Identifier les facteurs influant sur le comportement des algorithmes simulés.

- Comparer par simulation les performances des différentes améliorations afin de juger la meilleure d'entre elles.

- Maitriser l'outil de simulation NS-2.

Il est évident qu'il n'existe pas un travail parfait, nous pouvons penser toujours à des améliorations et des perspectives futures, nous avons pensé à :

1. Minimiser encore le nombre de messages échangés en utilisant une nouvelle structure de données pour obtenir le minimum possible.

2. Réduire en plus le temps d'attente en utilisant des nouvelles stratégies d'échanges de messages.

3. Enrichir le mécanisme de tolérance aux pannes pour pouvoir faire face à la panne de plusieurs sites.

4. Utiliser le principe de notre algorithme pour résoudre ce problème dans d'autres systèmes tels que : les réseaux de capteurs, les VANETs ... etc.

BIBLIOGRAPHIE

[Abd07] Z. Abdelhafidi. Points de reprise dans les systèmes répartis etude basée sur la simulation des protocoles cic assurant la propriété rdt. Thèse Magistère de l'université Amar Telidji-Laghouat Spécialité informatique, pages 11-27, 2007. (Cité page 27.)

[AK08] A. Alliliche and M. Kebir. Etude comparative des protocoles de points de reprise de type cic. Projet de fin d'étude, Université de Laghouat, 2008. (Cité pages 26 et 27.)

[All04] Krouba M. Allaoui, T. Etude des systèmes répartis et réalisation d'un simulateur des algorithmes répartis d'exclusion mutuelle. Projet de fin d'étude, Université de Laghouat, 2004. (Cité pages 6 et 7.)

[All07] T. Allaoui. Une nouvelle solution du problème de la k-exclusion mutuelle dans les systèmes répartis. Mémoire de Magister, Université de Laghouat, 2007. (Cité pages x, 7, 18, 19 et 31.)

[BAA89] .J Bernabéu, M. Auban, and M. Ahamad. Applying a path-compression technique to obtain an eficient distributed mutual exclusion algorithm. In Proceedings of the 3rd International Workshop on Distributed Algorithms London, UK, pages 33-44, 1989. (Cité page 23.)

[Bou07] A. Boukhalkhal. Étude par simulation des performances des protocoles de routage dans les réseaux ad hoc sans fil. Mémoire de fin d'étude, Université de Laghouat, 2007. (Cité pages x et 9.)

[CL85] K-M. Chandy and L. Lamport. Distributed snapshots : Determining global states of distributed systems. ACM Transactions on Computer Systems, pages 63-75, 1985. (Cité page 27.)

[CM84] K.M. Chandy and J. Misra. The drinking philosopher's problem. ACM Transactions on Programming Languages and Systems, pages 632-646, 1984. (Cité page 21.)

[CM92] M. Chandy and .J Misra. Synchronisation et état global dans les systèmes répartis. Eyrolles, 1992. (Cité page 22.)

[Cou94] G. Coulouris. Distributed systems. Concept and Design, 2nd Ed Addison Wesley Pubishers Ltd., 1994. (Cité page 4.)

[CR83] S.F. Carvalho and G. Roucairol. On mutual exclusion in computer networks. Communications of ACM, pages 146-147, 1983. (Cité page 21.)

[CSL91] Y. Chang, M. Singhal, and M.T Liu. A dynamic token-based distributed mutual exclusion algorithm. Computers and Communications, Conference Proceedings, Tenth Annual International Phoenix Conference, pages 240-246, 1991. (Cité page 23.)

[Dij65] W. Dijkstra. Solution of a problem in concurrent programming control. Communications of the ACM, 1965. (Cité page 20.)

[Eve04] C. Evequoz. Programmation répartie. Ecole d'ingénieur du Canton de Vaud, 2004. (Cité page 5.)

[HM94] J.M. Hélary and M. Mostefaoui. fault-tolerant distributed mutual exclusion algorithm based on open-cube structure. 14th International Conference on Distributed Computing Systems (ICDCS), pages 89-96, 1994. (Cité page 23.)

[HPR88] J-M. Hélary, N. Plouzeau, and M. Raynal. A distributed algorithm for mutual exclusion in an arbitrary network. Computer journal, pages 289-295, 1988. (Cité page 23.)

[Lai02] T.H. Lai. On distributed dynamic channel allocation in mobile cellular networks. IEEE Transactions on Parallel and Distributed Systems, pages 1024-1037, 2002. (Cité page 40.)

[Lam78] L. Lamport. Time, clocks, and the ordering of events in a distributed system. Communications of ACM, pages 558-565, 1978. (Cité pages 20 et 21.)

[Lan77] G. Lann. Distributed systems - towards a formal approach. International Federation for Information Processing(IFIP)Congress, pages 155-160, 1977. (Cité page 20.)

[Lan78] G. Lann. Algorithms for distributed data-sharing systems which use tickets. Proceedings of the Third Berkeley Workshop on Distributed Data Management and Computer Networks, pages 259-272, 1978. (Cité page 23.)

[Lem00] T. Lemlouma. Le routage dans les réseaux mobiles ad hoc. Mini projet, Université d'Alger USTHB, 2000. (Cité pages 8, 14 et 15.)

[LK09] A. Lahag and Kouidri. Etude des performances des algorithmes de l'exclusion mutuelle dans les réseaux ad hoc {Simulation par NS2}. Projet de fin d'étude, Université de Laghouat, 2009. (Cité pages 9 et 20.)

[Mae85] M. Maekawa. A square root n algorithm for mutual exclusion in decentralized systems. ACM Transactions on Computer Systems(TOCS), 1985. (Cité page 22.)

[Man07] N. Mansouri. Protocole de routage multi chemin avec équilibrage de charge dans les réseaux mobiles ad hoc. Projet de fin d'étude, Ecole supérieur des communications de Tunis, Tunisie, 2007. (Cité pages 11 et 12.)

[Mar85] A.J. Martin. Distributed mutual exclusion on a ring of processes. Science of Computer Programming, pages 265-276, 1985. (Cité page 23.)

[Mes98] P. Meskauskas. Mobile ad hoc networking. Seminar on Telecommunications Technology, Helsinki, 1998. (Cité pages 11 et 12.)

[NM91] M.L. Neilsen and M. Mizuno. A dag-based algorithm for distributed mutual exclusion. In International Conference on Distributed Computing Systems (ICDCS), pages 354-360, 1991. (Cité page 23.)

[NT87] N. Naimi and M. Trehel. An improvement of the log(n) distributed algorithm for mutual exclusion. IEEE 7th international Conf. On Distributed Systems, Berlin, Germany, 1987. (Cité page 23.)

[RA81] G. Ricart and K. Agrawala. An optimal algorithm for mutual exclusion in computer networks. Communications of ACM, pages 9-17, 1981. (Cité page 21.)

[Ray88] K. Raymond. A distributed algorithm for multiple entries to a critical section. Information Processing Letters 30, pages 189-193, 1988. (Cité page 25.)

[Ray89] K. Raymond. A tree-based algorithm for distributed mutual exclusion. ACM Transactions on Computer Systems, pages 61-77, 1989. (Cité page 23.)

[Ray91] M. Raynal. A simple taxonomy for distributed mutual exclusion algorithms. Operating Systems Review, 1991. (Cité page 21.)

[Sin89] M. Singhal. A heuristically-aided algorithm for mutual exclusion in distributed systems. IEEE Transactions on Computers, pages 651-662, 1989. (Cité page 23.)

[Sin91] M. Singhal. A class of deadlock-free meakawa-type algorithms for mutual exclusion in distributed systems. Distributed Computing, pages 131-138, 1991. (Cité page 22.)

[SK85] I. Suzuki and T. Kasami. A distributed mutual exclusion algorithm. ACM Trans.Computer Systems, pages 344-349, 1985. (Cité page 23.)

[Sop08] J. Sopena. Algorithmes d'exclusion mutuelle : tolérance aux fautes et adaptation aux grilles. Thèse de doctorat de l'Université Pierre et Marie Curie-Paris VI, 2008. (Cité pages 21 et 22.)

[Sri89] P.K. Srimani. Another distributed algorithm for multiple entries to a critical sec-
tion. Information Processing Letters 41, pages 51-57, 1989. (Cité page 25.)

[Tan94] S. Tanenbum. Distributed operating systems. Prentice Hall, 1994. (Cité page 4.)

[vdS87] J.L.A. van de Snepscheut. Fair mutual exclusion on a graph of processes. Distributed Computing, pages 113-115, 1987. (Cité page 23.)

[Wei08] W. Weigang. A fault tolerant mutual exclusion algorithm for mobile ad hoc networks. Department of Computing, The Hong Kong Polytechnic University, 2008. (Cité page 25.)

[WK97] J.E. Walter and S. Kini. Mutual exclusion on multihop, mobile wireless networks. Texas A and M University College Station, 1997. (Cité page 26.)

[WW01] J. WALTER and L. WELCH. A mutual exclusion algorithm for ad hoc mobile
networks. Department of Computer Science,Texas USA,
2001. (Cité page 25.)

ANNEXE : ETTuDE DE L'ouTiL DE A

siMuLATioN NS-2

SoMMAiRE

A.1 PREuvE Du TlgoREME TRuc 80

A. Annexe: Étude de l'outil de simulation NS-2

A.1 Preuve Du théorème truc

Ce théorème est un résultat classique donné, par exemple, par. . .

ANNEXE : LEs scRipTs DE Nos

simuLATioNs

SommAiRE

B.1 LE scRipT TCL (sysTèmE RépARTi) 82

B.2 LE ScRipT TCL AD HOC 85

DANs cette annexe nous présentons deux exmples parmi les scripts réalisés.

B

B.1 LE script TCL (systèmE réparti)

# =========================================================================
# Definition des options #
# =========================================================================

set ns [new Simulator] ;# Creation d'un nouveau Objet simulateur

set bw akemac.dat ;# Le ficher Trace

set nf [ open akemac.nam w] ;# Ouverture du Visualisateur NAM

set f0 [ open $bw w] ;# Declaration de f0 pour ecrire sur le fi c h ie r

$ns namtrace-all $nf ;# Afin de generer le fi c h ie r Trace

set bw nbr_msg_tps.txt ;# ficher . t x t qui contient les resultats

set mesure [ open $bw w] ;# mesure pour ecrire sur le . t x t

set val(stop) 10 ;# Temps de simulation ( ( Durree ) )

# ========================================================================= # Le Corps des Procedures #

# =========================================================================

# ========================================================================= # Procedure d' affichage concernant la simulation #

# ========================================================================= proc Affichage { } {

global mesure nbr nbrk nbrequete ;# Declaration de variables globales puts $mesure " "

puts $mesure " Les Resultats de la Simulation . "

puts $mesure " " puts $mesure "============ Informations de Simulation ===============" puts $mesure " . " puts $mesure "Le Nombre de Sites = $nbr "

puts $mesure "Le Nombre de Ressources K = $nbrk "

puts $mesure "Le Nombre de Requetes = $nbrequete "

puts $mesure " . "

puts $mesure "=======================================================" puts $mesure "================================="

puts $mesure " Resultats pour chaque site : "

puts $mesure "================================="

} ;# Ecriture dans le f i c hi e r des resultats

# ========================================================================= # Procedure de Terminaison de la simulation # # ========================================================================= proc finish { } {

;# Declaration de variables globales global ns nf f0 nbr nbrequete tpatt nmsg p mesure

for { set i 0} {$i < $nbr} { incr i} { ;# compter le nombre de message total set nmsg [ expr [$p($i) set nb_message_]+$nmsg]

} ;# la somme des messages de chaque noeud

puts $mesure "=========================================================" puts $mesure " Le NMM et le TAM . " puts $mesure "=========================================================" puts $mesure "Le nombre total des messages = $nmsg"

puts $mesure " "

puts $mesure "Le nombre de message moyen =

$nmsg/$nbrequete = [ expr $nmsg/$nbrequete ] " puts $mesure " "

set tpatt [ expr $tpatt/$nbrequete] ;# Calcul du temps moyen d' attente
puts
$mesure "Le temps d' attente moyen = $tpatt "

$ns flush-trace ;# Pour Confirmer l ' ecriture

close $f0 ;# Fermer le f ic hi er . t x t

puts " running nam... " ;# Affichage de "Running NAM ... "

exec nam akemac.nam & ; ;# lancer le NAM automatiquement

exit 0 ;# Sortie de la procedure

}

# ========================================================================= # Procedure d' enregistrement des temps d' attente dans le f ic hi er text # # ========================================================================= proc record {p n mutex hour} {

global f0 nbrequete tpatt mesure ;# Declaration des variables globales

set ns [Simulator instance] ;# Instancier la commande NS

set bw0 [$ns now] ;# bw0 est le temps actuelle

set bw0 [ expr $bw0- [$p set dem ] ] ;# bw0 := bw0 - Temps de la demande puts $mesure "Temps d' attente pour le site N° [$n node-addr] =

$bw0 ==> ( ( Date_Requete = $hour ** Duree SC = $mutex ) ) "

puts $mesure "-------------------------------------------------------"

set tpatt [ expr $tpatt+$bw0] ;# le temps d' attente

}

# ========================================================================= # Procedure de Diffusion des demandes d' entrer en Section Critique # # ========================================================================= proc diffusion {p n mutex hour} {

global nbr ;# Variables globales

set ns [Simulator instance] ;# Instancier la commande NS

set nowe [$ns now] ;# Le temps actuelle NOWE

set nbrk [$p set nbracine] ;# nbrk := nbracine ;

$ns at $nowe " tester $p $n $mutex $hour" ;# execution de tester

$ns at $nowe "$p demander-sc" ;# execution de demander-sc

$ns trace-annotate " [ $n node-addr] demande la SC "

$ns at $nowe "$n color limegreen " ;# Colorer noeud demandeur

}

# ========================================================================= # Procedure de test d' entrer et la liberation de la Section Critique # # ========================================================================= proc tester {p n mutex hour} {

global nbr mesure ;# Variables globales

set ns [Simulator instance] ;# definir commande ns

set time 0.01 ;# Temps de test pour SC

set now [$ns now] ;# Definir now

set a [$p set sc] ;# Affectation a := sc ;

set b [$p set racine] ;# b := racine ;

i f { $a == 1} { ;# Condition entrer en SC

$ns at $now " record $p $n $mutex $hour" ;# Record pour le TAM

$ns at $now "$n label \"<SC> \" " ;# l ib e le <SC> au noeud

$ns at [ expr $now+$mutex] "$n label \" \" " ;# Effacer <SC>

$ns at [ expr $now+$mutex] "$p liberation-sc";# Appel de liberation-sc

$ns at [ expr $now+$mutex] "$p set sc -1" ;# sc := -1 pour so r ti r

i f { $b == -1} { ;# racine devient rouge

$ns at [ expr $now+$mutex] "$n color red" ;# Colorer la racine } else { ;# Sinon

$ns at [ expr $now+$mutex] "$n color black";# Colorer noeud en noir

}

} else { ;# noeud veut entrer SC

$ns at [ expr $now+$time] "$p attendre " ;# attendre MAJ sc <- 1

$ns at $now "$n color blue" ;# Colorer BLEU

$ns at [ expr $now+$time] " tester $p $n $mutex $hour"

} ;# rappeler la procedure

} ;# TESTER ( ( Recursif ) )

# ========================================================================

# ========================================================================= # Le programme Principale # # ========================================================================= # ========================================================================= # ========================================================================= # Lecture des donnees a partir d'un f i c hi e r texte # # =========================================================================

set f [ open " les_demandes.txt " " r " ] ;# lire ( les_demandes.txt )

set nbr [ gets $f] ;# ( ( nbr ) ) <-- premier ligne

set nbrk [ gets $f] ;# ( ( nbrk ) )<-- deuxiemme ligne

set nbrequete [ gets $f] ;# ( nbrequete )<-- troisiemme ligne

for { set j 0} {$j < $nbrequete} { incr j} { ;# Boucle pour lire les Scenarios for { set k 0} {$k < 2} { incr k} {

set table($j,$k) [ gets $f] ;# Remplir par ( s i t e , heur, duree )

}

}

close $f ;# Enfin Fermer le f i c h i e r .

# =========================================================================
# Declaration des couleurs selon les numeros #
# =========================================================================

)

$ns

 

color 0 blue

;#

Le

0

est

la

Couleur

Bleu ( (

Demande ) )

$ns

color 1 red

;#

Le

1

est

la

Couleur

Rouge (

( Requete ) )

$ns

color 2 limegreen

;#

Le

2

est

la

Couleur

Vert ( (

Liberation )

$ns

color 3 brown

;#

Le

3

est

la

Couleur

Marron

( ( Accord ) )

$ns

color 4 magenta

;#

Le

4

est

la

Couleur

Violet

( ( Aide ) )

$ns

color 5 black

;#

Le

4

est

la

Couleur

Noir ( (

Recherche ) )

# =========================================================================
# Affichage des informations dans le f i c hi e r des resultats #
# =========================================================================

set now [$ns now] ;# Definir now --> le temps actuelle

$ns at $now " Affichage " ;# Afficher les informations dans . t x t

# =========================================================================
# Creation des noeuds et leurs connections aux agents " Akema " #
# =========================================================================

for { set i 0} {$i < $nbr} { incr i} { ;# i=0 a i=nbr--1 --> creer ( nbr ) noeuds

set n($i) [$ns node] ;# Creation d'un noeud

set p($i) [new Agent/Akemac] ;# Creation d'un Agent AKEMAC

$p($i) set nb_noeud_ $nbr ;# I n i t i a l i s e r ( nb_noeud_ ) par ( nbr )

$p($i) set nbracine $nbrk ;# I n i t i a l i s e r ( nbracine ) par ( nbrk )

$ns at 0.0 "$p ( $i ) initial" ;# i n i t i a l i s e r chaque agent AKEMAC

$ns attach-agent $n($i) $p($i) ;# attacher les noeuds aux agents

$p($i) set packetSize_ 400 ;# La t a i l l e du paquet a envoyer

}

# =========================================================================
# Creation des liens et la connection des agents #
# =========================================================================

for { set i 0} {$i < $nbrk} { incr i} { ;# Boucle pour les liens

$n($i) color " red " ;# Colorer chaque noeud racine

$ns duplex-link $n($i) $n ( [ expr ($i+1)%$nbrk ] ) 1Mb 10ms DropTail $ns connect $p($i) $p ( [ expr ($i+1)%$nbrk] ) ;# Creation d'un lien

} ;# Connecter les agents entre eux

for { set i 0} {$i < $nbrk} { incr i} { ;# Boucle pour les liens

for { set j [ expr ($i+1) ] } {$j < $nbrk} { incr j} {

$ns duplex-link $n($i) $n($j) 1Mb 10ms DropTail ;# Creation d'un lien

$ns connect $p($i) $p($j) ;# Connecter les agents entre eux

}

}

for { set i $nbrk} {$i < $nbr} { incr i} { ;# Boucle pour les liens

$ns duplex-link $n ( [ expr ($i)%$nbrk ] ) $n($i) 1Mb 10ms DropTail

$ns connect $p ( [ expr ($i)%$nbrk ] ) $p($i) ;# Creation d'un lien

} ;# Bi-directionnel Racine-Fils

# ========================================================================= # Initialisation des variables globaux #

# =========================================================================

set tpatt 0 ;# Initialisation de tpatt pour calculer le temps d' attente

set nmsg 0 ;# Initialisation de nmsg pour calculer le nombre de messages

set duree 1 ;# La durree de la Section Critique

# ========================================================================= # L' execution des scenarios de la simulation # # ========================================================================= for { set j 0} {$j < $nbrequete} { incr j} { ;# lire les Scenarios du tableau

set site $table($j,0) ;# lire l ' identificateur du site

set heur $table($j,1) ;# lire l ' heur de la demande

$ns at $heur "$p ( $site ) set dem $heur " ;# affe cte r la demande a l ' heur

$ns at $heur " diffusion $p ( $site ) $n ( $site ) $duree $heur "

} ;# Appel de diffusion

# ========================================================================= # Finalisation de la simulation et debut du RUN # # ========================================================================= $ns at [ expr $val(stop) + 0.1] " finish" ;# Finir la Simulation apres (STOP)

puts " debut de la simulation ... " ;# Ecrire "debut de la simulation.. "

$ns run ;# Debut de la Simulation NAM

le Script TCL (Système réparti)

B.2 LE SCRIPT TCL AD HOC

# =========================================================================
# Definition des options #
# =========================================================================

set val(chan) Channel/WirelessChannel ;# type de canal

set val(prop) Propagation/TwoRayGround ;# model de propagation

set val(netif) Phy/WirelessPhy ;# type d' interface reseau

set val(mac) Mac/802_11 ;# type de mac

set val(ifq) CMUPriQueue ;# type de file d' attente

set val(ll) LL ;# link layer type

set val(ant) Antenna/OmniAntenna ;# model d' antenne

set val(x) 500 ;# X dimension du topology

set val(y) 500 ;# Y dimension du topology

set val(ifqlen) 50 ;# Nbre max Packets-> file

set val(seed) 0.0 ;# grain random

set val(adhocRouting) DSR ;# protocole de routage

set val(sc) "/home/A/ns-allinone-2.32/ns-2.32/ t c l /mobility/scene/vitesse5 " set val(stop) 15 ;# temps de simulation ( duree ) #========================================================================== # Definition des procedures # # ========================================================================= # modification dans la portee de signal 300

Phy/WirelessPhy set RXThresh_ 1.76149e-10

# ========================================================================= # Creation d' instance de simulateur et topologie # # ========================================================================= set ns_ [new Simulator] ;# nouvelle simulation

$ns_ use-newtrace ;# nouveau f ic h i er trace

set topo [new Topography] ;# Nouvelle Topologie

# ========================================================================= # Creation des f i c hi e rs trace pour NS et NAM #

# =========================================================================

set tracefd [ open adhoc.tr w]

set namtrace [ open adhoc.nam w]

set bw nbr_msg_tps.txt ;# Ficher . t x t ( resultat simulation )

set mesure [ open $bw w]

$ns_ trace-all $tracefd

$ns_ namtrace-all-wireless $namtrace $val(x) $val(y)

# ========================================================================= # Procedure d' affichage concernant la simulation # # ========================================================================= proc Affichage { } {

global mesure nbr nbrk nbrequete ;# Declaration des variables globales puts $mesure " " puts $mesure " Les Resultats de la Simulation ( K--Exclusion Adhoc ) . " puts $mesure " " puts $mesure "============ Informations de Simulation ================" puts $mesure " . " puts $mesure "Le Nombre de Sites = $nbr "

puts $mesure "Le Nombre de Ressources K = $nbrk "

puts $mesure "Le Nombre de Requetes = $nbrequete "

puts $mesure " . "

puts $mesure "========================================================" puts $mesure "================================="

puts $mesure " Resultats pour chaque site : "

puts $mesure "================================="

}

#========================================================================== # Procedure de Terminaison de la simulation # # ========================================================================= proc finish { } {

global ns_ nf f0 nbr nbrequete tpatt nmsg p mesure ;# Variables globales

for { set i 0} {$i < $nbr} { incr i} {

set nmsg [ expr [$p($i) set nb_message_]+$nmsg] ;# Somme des messages

puts $mesure "================================= "

puts $mesure " Le NMM et le TAM.

}

"

puts $mesure "======================================================" puts $mesure " Messages total = $nmsg" ;# Calcul du nombre moyen

puts $mesure " "

puts $mesure "Le NMM = $nmsg/$nbrequete = [ expr $nmsg/$nbrequete ] " puts $mesure " "

set tpatt [ expr $tpatt/$nbrequete] ;# Calcul du TAM

puts $mesure "Le TAM = $tpatt " ;# Affichage du TAM

$ns_ flush-trace ;# Ecriture dans le f ic h i er TEXT

close $mesure ;# Fermer le f ic hi er des resultat

puts " running nam... " ;# Affichage de "Running NAM . . . "

exec nam adhoc.nam & ;# lancer le NAM automatiquement

exit 0 ;# Sortie de la procedure

}

#==========================================================================
# Procedure d' enregistrement des temps d' attente dans le f i c hi e r . t x t #

# ============================
proc
record {p n mutex hour} {

global f0 nbrequete tpatt mesure ;# Variables globales

set ns [Simulator instance] ;# Instancier la commande NS

set bw0 [$ns now] ;# bw0 est le temps actuelle

set bw0 [ expr $bw0- [$p set dem ] ] ;# bw0 := bw0 - Temps de la demande

puts $mesure "Temps d' attente pour le site N [ $n node-addr] =

$bw0 ==> ( ( Date_Requete = $hour ** Duree SC = $mutex ) ) "

puts$mesure "--------------------------------------------------------"

set tpatt [ expr $tpatt+$bw0] ;# Le temps d' attente

}

#========================================================================== # Procedure de Diffusion des demandes d' entrer en Section Critique # # ========================================================================= proc diffusion {p n mutex hour} {

global nbr ;# Variables globales

set ns_ [Simulator instance] ;# Instancier la commande NS

set nowe [$ns_ now] ;# Le temps actuelle

set nbrk [$p set nbracine] ;# nbrk := nbracine ;

$ns_ at $nowe " tester $p $n $mutex $hour" ;# execution de tester

$ns_ at $nowe "$p demander-sc" ;# execution de demander-sc

$ns_ trace-annotate " [ $n node-addr] demande la SC "

$ns_ at $nowe " colorLm $p $n" ;# Colorer noeud demandeur

}

#========================================================================== # Procedure de test d' entrer et la liberation de la Section Critique # # ========================================================================= proc tester {p n mutex hour} {

global nbr mesure ;# Variables globales

set ns_ [Simulator instance] ;# definir commande ns_

set time 0.01 ;# Temps de test pour SC

set now [$ns_ now] ;# Definir now

set a [$p set sc] ;# Affectation a := sc ;

set b [$p set racine] ;# b := racine ;

i f { $a == 1} { ;# Condition entrer en SC

$ns_ at $now " record $p $n $mutex $hour" ;# Record pour le TAM

$ns_ at $now " colorRd $p $n" ;# Colorer le noeud en SC

$ns_ at $now "$n label \"<SC> \" " ;# l ib el e <SC> au noeud

$ns_ at [ expr $now+$mutex] "$n label \" \" " ;# Effacer <SC>

$ns_ at [ expr $now+$mutex] "$p liberation-sc";# Appel de liberation-sc

$ns_ at [ expr $now+$mutex] "$p set sc -1" ;# sc := -1 pour so r ti r

i f { $b == -1} { ;# racine devient orange

$ns_ at [ expr $now+$mutex] " colorOr $p $n" ;# Colorer la racine } else { ;# Sinon

$ns_ at [ expr $now+$mutex] " colorBk $p $n" ;# Colorer noeud en noir

}

} else { ;# noeud veut entrer SC

$ns_ at [ expr $now+$time] "$p attendre " ;# attendre MAJ sc <- 1

$ns_ at [ expr $now+$time] " tester $p $n $mutex $hour"

}

}

# ========================================================================= # ========================================================================= # Le programme Principale # # =========================================================================

# ========================================================================= # ========================================================================= # Lecture des donnees a partir d'un f i c hi e r texte # # =========================================================================

set f [ open " les_demandes.txt " " r " ] ;# lire ( les_demandes.txt )

set nbr [ gets $f] ;# ( ( nbr ) ) <-- premier ligne

set nbrk [ gets $f] ;# ( ( nbrk ) )<-- deuxiemme ligne

set nbrequete [ gets $f] ;# ( nbrequete )<-- troisiemme ligne

for { set j 0} {$j < $nbrequete} { incr j} { ;# Boucle pour lire les Scenarios for { set k 0} {$k < 2} { incr k} {

set table($j,$k) [ gets $f] ;# Remplir par ( s i t e , heur, duree )

}

}

close $f ;# Enfin Fermer le f i c h i e r .

# ========================================================================= # Declaration des couleurs selon les numeros # # ========================================================================= $ns_ color 0 Blue ;# Le O est la Couleur Bleu ( tous messages) # ========================================================================= # Definition de la topologie # # ========================================================================= $topo load_flatgrid $val(x) $val(y)

# ========================================================================= # Creation du God ( voisinage ) # # ========================================================================= set god_ [create-god $nbr]

# =========================================================================
# Configuration globale d'un noeud #
# =========================================================================

$ns_ node-config -adhocRouting $val(adhocRouting) \

-llType $val(ll) \

-macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoInstance $topo \ -agentTrace ON \

-routerTrace ON \

-macTrace OFF

# ========================================================================= # Creation des noeuds # # ========================================================================= for { set i 0} {$i < $nbr} { incr i} { ;# i=0 a i=nbr--1 --> creer ( nbr ) noeuds

set node_($i) [$ns_ node] ;# Creation d'un noeud

$node_($i) random-motion 0 ;# desactiver mouvement aleatoire

$node_($i) color Black ;# Colorer chaque noeud en noir

$god_ new_node $node_($i) ;# chaque god associe au noeud

set p($i) [new Agent/Kradhoc] ;# Creation d'un Agent KRAD HOC

$p($i) set nb_noeud_ $nbr ;# I n i t i a l i s e r (nb_noeud_ ) par ( nbr )

$p($i) set nbracine $nbrk ;# I n i t i a l i s e r ( nbracine ) par ( nbrk )

$ns_ at 0.0 "$p ( $i ) initial" ;# i n i t i a l i s e r chaque agent KRAD HOC

$ns_ attach-agent $node_($i) $p($i) ;# attacher les noeuds aux agents $p($i) set packetSize_ 1024 ;# La t a i l l e du paquet a envoyer

}

#

# La connexion des agents pour permettre la communication #

# ========================================================================= for { set i 0} {$i < $nbr} { incr i} {

for { set j [ expr $i+1]} {$j < $nbr} { incr j} {

$ns_ connect $p($i) $p($j) ;# Connecter les agents entre eux

}

}

# ========================================================================= # Coloration des noeuds a chaque couleur associe # # ========================================================================= proc colorRd {p node_ } {

set ns_ [Simulator instance]

set nowe [$ns_ now]

$ns_ at $nowe "$node_ color red" ;# Coloration avec le rouge <SC>

}

proc colorBl {p node_ } {

set ns_ [Simulator instance]

set nowe [$ns_ now]

$ns_ at $nowe "$node_ color blue" ;# Coloration avec le Bleu

}

proc colorBk {p node_ } {

set ns_ [Simulator instance]

set nowe [$ns_ now]

$ns_ at $nowe "$node_ color black" ;# Coloration avec le noir <Dehors>

}

proc colorLm {p node_ } {

set ns_ [Simulator instance]

set nowe [$ns_ now]

$ns_ at $nowe "$node_ color limegreen " ;# Coloration avec le vert <Demande>

}

proc colorOr {p node_ } {

set ns_ [Simulator instance]

set nowe [$ns_ now]

$ns_ at $nowe "$node_ color Orange" ;# Coloration avec l ' orange<racine >

}

# ========================================================================= # Coloration des racines # # ========================================================================= for { set i 0} {$i < $nbrk} { incr i} { ;# Boucle de coloration

$ns_ at 0.0 " colorOr $p ( $i ) $node_ ( $i ) " ;# Colorer racines avec l ' orange } ;# des le debut de la simulation # ========================================================================= # Appel des f i c hi e rs de mouvement # # ========================================================================= i f { $val(sc) == " " } {

puts " *** NOTE: no connection pattern specified. "

set val(sc) "none"

} else {

puts " Loading connection pattern..."

source $val(sc)

}

# =========================================================================
# Initialisation des variables globaux #
# =========================================================================

set nmsg1 0 ;# Initialisation de nmsg1

set nmsg 0 ;# Initialisation de nmsg

set tpatt 0 ;# Initialisation de tpatt

# =========================================================================
# Fixation de la duree de la Section Critique #

# ========================================================================= set duree 1 ;# la duree de la SC

# ========================================================================= # Initialisation des positions des noeuds #

# ========================================================================= for { set i 0} {$i < $nbr} { incr i} {

$ns_ initial_node_pos $node_($i) 25 ;# se fait apres la definition

} ;# du modele de mobilite

# ========================================================================= # Affichage du Menu dans le f i c hi e r des resultats #

# ========================================================================= $ns_ at 0.0 " Affichage " ;# Appel a la procedure Affichage

# ========================================================================= # L' execution des scenarios de la simulation #

# ========================================================================= for { set j 0} {$j < $nbrequete} { incr j} { ;# lire les Scenarios de la table set site $table($j,0) ;# lire l ' identificateur du site

set heure $table($j,1) ;# lire l ' heur de la demande

$ns_ at $heure "$p ( $site ) set sc 0" ;# sc <-- 0

$ns_ at $heure "$p ( $site ) set dem $heure " ;# aff ec ter la demande a l ' heur $ns_ at $heure " diffusion $p ( $site ) $node_ ( $site ) $duree $heure "

puts " $site" ;# Appel de diffusion pour

} ;# executer les demandes

# ========================================================================= # Finalisation de la simulation et debut du RUN # # ========================================================================= $ns_ at [ expr $val(stop) + 0.01] " finish";# Finir la Simulation apres (STOP)

puts " debut de la simulation . . . " ;# Ecrire " debut de la simulation.. "

$ns_ run ;# Debut du NAM

le Script TCL (AD HOC)

ACRONYMES

AODV Ad hoc On-Demand Distance Vector

API Application Programming Interface

ATM Asynchronous Transfer Mode

CBQ Class Based Queuing

CBR Constant Bit Rate

DARPA The Defense Advanced Research Projects Agency

DSDV Dynamic Destination Sequenced Distance Vector

DSR Dynamic Source Routing

FIFO First In, First Out

FQ Fair Queuing

FSM Free Space Model

FTP File Transfer Protocol

GSR Global State Routing

IEEE Institute of Electrical and Electronics Engineers

IP Internet Protocol

MAC Medium Access Control

MANET Mobile Ad-hoc Networks

MRDM Modified Random Direction Model

NAM Network AniMator

NED NEtwork Description

NMM Nombre de Messages Moyen NS-2 Network Simulator 2

OMNET Optical Micro-Networks

OSI Open System Interconnexion

OTCL Object Tools Command Language

RDM Random Direction Model

RED Random Early Detection

RWM Random Waypoint Model

SB Station de Base

SC Section Critique

SFQ Stochastic Fair Queuing

SURAN SUrvivable RAdio Networks

TAM Temps d'Attente Moyen

TCL Tools Command Language

TCP Transport Control Protocol

Telnet Terminal Network

TORA Temporally Ordered Routing Algorithm

UDP User Datagram Protocol

UM Unités Mobiles

VINT Virtual InterNetwork Testbed ZRP Zone Routing Protocol






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Un démenti, si pauvre qu'il soit, rassure les sots et déroute les incrédules"   Talleyrand