AccueilđŸ‡«đŸ‡·Chercher

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

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.