0% ont trouvé ce document utile (0 vote)
13 vues5 pages

Algorithm Distribué

Le document présente un algorithme pour l'échange d'informations entre deux processus dans un réseau fiable et un autre pour un réseau peu fiable. Dans le premier cas, les messages sont envoyés sans vérification, tandis que dans le second, un accusé de réception (ACK) est utilisé pour garantir la livraison des messages. L'algorithme pour le réseau peu fiable inclut une retransmission des messages en cas de perte.

Transféré par

Assmae Wahmane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
13 vues5 pages

Algorithm Distribué

Le document présente un algorithme pour l'échange d'informations entre deux processus dans un réseau fiable et un autre pour un réseau peu fiable. Dans le premier cas, les messages sont envoyés sans vérification, tandis que dans le second, un accusé de réception (ACK) est utilisé pour garantir la livraison des messages. L'algorithme pour le réseau peu fiable inclut une retransmission des messages en cas de perte.

Transféré par

Assmae Wahmane
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Algorithm Distributed

1) Algorithm Structure :
var
1: arrayofworddatain={Datatobesent},dataout=⇐1,...,...,⇐1
Label1: {Condition}
2: beginsend<tag,datain>toqend
3: code;
Label2: {Condition}
4: beginreceive<pack,w,i>;
5: code;
6: end
Label3: {receive<stop,i>}
7: begincode;
8: print(”Goodbye”);
9: end

Information échangée entre deux nœuds connectés

Exemple avec deux processus p et q

 Les processus p et q ont le même nombre de messages à échanger.


 Le réseau est fiable mais asynchrone (il n'y a donc aucune hypothèse sur l'ordre
des messages).

Exercice :

1. Écrire un algorithme simple permettant l’échange d’informations entre les deux


processus.

var

1: array of word datain={Data to be sent}, dataout = ⇐1,...,...,⇐1

2: count rcv=0, i=0

Send: { i < n }
3: begin

4: send <msg,datain[i],i > to q

5: i = i +1;

6: end

receiveMsg: { receive <msg,data,j> }

7: begin

8: dataout[j]=data;

9: count rcv = count rcv +1;

10: end

Stop: { i==n AND count rcv==n }

11: begin

12 : print(”Goodbye”);

13: STOP.

14: end

Information échangée entre deux nœuds connectés


Exemple avec deux processus p et q

 p et q ont le même nombre de messages à échanger.


 Le réseau est fiable.

Exercices :

1. Écrire un algorithme simple permettant l’échange d’informations entre les deux


processus.
2. Que se passe-t-il si le réseau est peu fiable ? Écrire un algorithme simple qui
prend en compte la perte de messages.

Corrigé :

1) Algorithme pour un réseau fiable


Dans ce cas, les messages arrivent toujours à destination, donc on garde
une structure simple sans retransmission.
var
1: array of word datain = {Données à envoyer}, dataout = ⇐1,...,...,⇐1
2: count_rcv = 0, i = 0

Send: { i < n }
3: begin
4: send <msg, datain[i], i> to q
5: i = i + 1;
6: end

receiveMsg: { receive <msg, data, j> }


7: begin
8: dataout[j] = data;
9: count_rcv = count_rcv + 1;
10: end

Stop: { i == n AND count_rcv == n }


11: begin
12: print("Goodbye");
13: STOP.
14: end

Explication :

 Chaque message est envoyé une seule fois sans vérification.


 Le programme s'arrête quand tous les messages ont été envoyés et reçus.
2) Algorithme pour un réseau peu fiable (avec retransmission)
Ici, on ajoute un accusé de réception (ACK) pour confirmer la bonne
réception des messages. Si un message est perdu, il est retransmis.

var
1: array of word datain = {Données à envoyer}, dataout =
⇐1,...,...,⇐1
2: array of boolean ack = {⇐0, ..., ⇐0} // Tableau de confirmation
3: count_rcv = 0, i = 0

Send: { i < n }
4: begin
5: send <msg, datain[i], i> to q
6: start_timer(i) // Démarrer un timer pour vérifier la réception
7: i = i + 1;
8: end

receiveMsg: { receive <msg, data, j> }


9: begin
10: dataout[j] = data;
11: count_rcv = count_rcv + 1;
12: send <ACK, j> to p // Envoyer un accusé de réception
13: end

receiveACK: { receive <ACK, j> }


14: begin
15: ack[j] = true; // Marquer le message comme reçu
16: stop_timer(j) // Arrêter le timer associé
17: end

Resend: { timeout(i) AND ack[i] == false }


18: begin
19: send <msg, datain[i], i> to q // Retransmettre le message perdu
20: start_timer(i) // Redémarrer le timer
21: end

Stop: { i == n AND count_rcv == n }


22: begin
23: print("Goodbye");
24: STOP.
25: end
Explication :

 Chaque message envoyé est accompagné d'un timer.


 Si l'ACK n'est pas reçu avant expiration du timer, le message est retransmis.
 Dès qu'un ACK est reçu, la retransmission est annulée.
 L'algorithme garantit que tous les messages finissent par être livrés.

Vous aimerez peut-être aussi