Algorithme de Naimi-Trehel
L'algorithme de Naimi-Tréhel assure l'exclusion mutuelle dans les systÚmes distribués. Cet algorithme réduit le nombre moyen de messages à en introduisant une structure arborescente logique et un jeton. L'algorithme initial a été présenté par Naimi et Tréhel.
Exclusion mutuelle
Le problĂšme de lâExclusion mutuelle consiste Ă sâassurer quâau plus un site, Ă un moment donnĂ©, peut accĂ©der Ă une ressource, gĂ©nĂ©ralement appelĂ©e section critique. LâĂ©noncĂ© du problĂšme a Ă©tĂ© donnĂ© par Dijkstra en 1965 dans un systĂšme centralisĂ©. Nous nous plaçons dans le contexte dâun rĂ©seau distribuĂ©, ce qui signifie que les processus de chaque site interagissent seulement en se transmettant des messages. Les algorithmes cherchent Ă diminuer le nombre de messages entre les sites. Pour Lamport, si n est le nombre de sites, le nombre de messages atteint 3(n-1) En 1985, Maekawa dĂ©finit un algorithme pour lequel le nombre de messages est de lâordre de 2*racine(n). Cet algorithme rĂ©duit le nombre moyen de messages Ă .
ModÚle général
Chaque processus a une mĂ©moire locale et peut envoyer des messages Ă n'importe quel autre en utilisant un identificateur unique comme adresse. La communication entre les processus est supposĂ©e ĂȘtre parfaite (pas de pertes ni duplications ni modifications de messages).
Description
L'algorithme que nous prĂ©sentons ici est basĂ© sur le fait qu'un processus envoie sa requĂȘte Ă seulement un autre processus et attend sa permission. Ce serait un algorithme centralisĂ© si le processus qui reçoit Ă©tait toujours le mĂȘme, mais il changera en fonction de l'Ă©volution des demandes
- Description simplifiée
La permission d'entrer en section critique est matérialisée par un jeton; Un et seulement un processus a le jeton. Le processus qui possÚde ce jeton peut entrer en section critique. Il y a deux structures de données:
- La premiĂšre est une file d'attente.
Chaque processus connaĂźt le processus suivant dans la file d'attente sauf quand il n'y a pas de suivant. La tĂȘte est le processus qui possĂšde le jeton. La queue est le dernier processus qui a demandĂ© la file d'attente, (sauf s'il y a un seul processus dans cette file). Un chemin est organisĂ© de sorte que, quand un processus demande la section critique, sa demande est transmise Ă la queue. Quand elle y arrive, il y a deux cas:
- si le processus qui est à la queue a le jeton et n'est pas en section critique, il envoie le jeton au demandeur, qui est alors autorisé à entrer en section critique.
- si le processus qui est Ă la queue soit a le jeton et est en section critique soit l'attend, le demandeur devient le suivant de cette queue et devient la nouvelle queue.
- Quand le processus en tĂȘte de la file d'attente quitte la section critique, il donne le jeton Ă son suivant, s'il y a un suivant.
- La seconde structure de donnĂ©es donne le chemin pour aller Ă la queue de la file d'attente. C'est une arborescence logique. Un processus qui demande Ă entrer en section critique envoie la requĂȘte au site pĂšre. De pĂšre en pĂšre, une requĂȘte est transmise Ă la racine (processus pour lequel pĂšre= nil), qui est aussi la queue de la file d'attente. C'est une structure distribuĂ©e, chaque processus connaĂźt seulement son pĂšre.
De plus, si le processus demandeur n'est pas la racine, l'arborescence est transformée : le processus demandeur devient la nouvelle racine et les processus situés entre le demandeur et la racine auront la nouvelle racine comme pÚre.
- Prise en compte des temps de transfert des messages
L'arborescence est modifiĂ©e comme suit : le demandeur transmet la requĂȘte Ă son pĂšre et se considĂšre comme la nouvelle racine. L'arborescence est donc coupĂ©e en deux : une associĂ©e Ă l'ancienne racine, l'autre associĂ©e Ă la nouvelle. Plus gĂ©nĂ©ralement, s'il y a plusieurs demandes en transit en mĂȘme temps, il y a plusieurs arborescences. Quand tous ces messages en transit sont arrivĂ©s, ces arborescences sont regroupĂ©es pour n'en former plus qu'une. La transformation de l'arborescence a cette consĂ©quence : si la demande de i est envoyĂ©e en direction de la racine j et si la demande de k arrive Ă j avant la demande de i, la demande de i sera transmise Ă k.
Spécification de l'algorithme
- variables de chaque processus :
- jeton-présent est un booléen qui indique si le processus a le jeton
- demande est un booléen qui indique si le processus est demandeur et reste vrai tant qu'il n'a pas obtenu puis quitté la section critique
- suivant et pĂšre sont soit des entiers entre 1 et n oĂč n est le nombre de processus soit ont la valeur "nil"
- Messages utilisés
- Req(k) : demande envoyée par le processus k en direction de la racine
- Token : transmission du jeton
- Algorithme de chaque processus
- Initialisation
pÚre := 1 suivant := nil demande := faux si pÚre = i alors debut jeton-présent := vrai;pÚre := nil fin sinon jeton-présent :=faux finsi
- Demande de la section critique par le processus i
demande := vrai si pÚre = nil alors entrée en section critique sinon début envoyer Req(i) à pÚre; pÚre := nil fin finsi
- Procédure de fin d'utilisation de la section critique
demande := faux; si suivant not= nil alors début envoyer token à suivant; jeton-présent := faux; suivant := nil fin finsi
- RĂ©ception du message Req (k)(k est le demandeur)
si pÚre = nil alors si demande alors suivant := k sinon début jeton-présent := faux; envoyer token à k fin finsi sinon envoyer req(k) à pÚre finsi; pÚre := k
- RĂ©ception du message Token
jeton-présent := vrai
Performance
- Le nombre moyen de messages Ă©changĂ©s est de l'ordre O(Log(n)) oĂč n est le nombre de processus du systĂšme distribuĂ©. La dĂ©monstration est complexe, mais on voit intuitivement qu'on n'a Ă parcourir qu'un chemin d'un site jusqu'Ă la racine d'une arborescence.
Prolongements
1) TolĂ©rance aux fautes DiffĂ©rents travaux ont Ă©tĂ© faits pour rendre lâalgorithme tolĂ©rant aux fautes. Il y a dâabord eu des travaux rĂ©alisĂ©s par les auteurs de lâalgorithme. http://lifc.univ-fcomte.fr/lifc/presentation/
Citons en outre lâapport de Julien Sopena, Luciana Arantes, Pierre Sens Un algorithme Ă©quitable dâexclusion mutuelle tolĂ©rant les fautes Lip6, UniversitĂ© de Paris 6 http://www.lip6.fr/recherche/index.php
2) Application en tĂ©lĂ©confĂ©rence Mohammed OUZZIF â ENSIAS, Maroc http://www.ensias.ma/ Pr. Mohammed Erradi â ENSIAS, Maroc Pr. Jean-Pierre Courtiat - LAAS, France http://www.laas.fr/ Gestion Dynamique de Groupe dans un Environnement de ContrĂŽle de VisioconfĂ©rence
Bibliographie
- M. Naimi, M. Tréhel, A. Arnold, "A Log(N) Distributed Mutual Exclusion Algorithm Based on the Path Reversal", Journal of Parallel and Distributed Computing, 34, 1-13 (1996).
- M.TrĂ©hel, M.Naimi: "Un algorithme distribuĂ© d'exclusion mutuelle", TSI Vol 6, no 2, p. 141â150, (1987).
- M.Naimi, M. Tréhel : "How to detect a failure and regenerate the token in the Log(n) distributed algorithm for mutual exclusion" , 2nd International Workshop on Distributed Algorithms, Amsterdam, (Juill. 1987), paru dans Lecture Notes in Computer Science, no 312, p. 149-158, édité par J. Van Leeween.
Articles connexes
Voir aussi
- Algorithme de la boulangerie
- Algorithme de Maekawa
- Algorithme de Suzuki-Kasami
- Algorithme de Raymond