Olivier Lemer
L'ordre des évènements n'apparait pas le même partout.
B
A
Envoi <A1>
Réception <B1>
Envoi <B1>
Réception <A1>
A1
→ B1
B1
→ A1
Créer une horloge commune ?
Problème : Horloges à quartz dérivent différemment selon la machine.
Solutions : protocoles de mise à l'heure.
Pas de solution permettant une horloge globale parfaite : toujours soumis aux délais et variabilités du réseau.
Quels sont les besoins ?
On veut connaitre
l'heure exacte de chaque évènement.
relative
l'ordre des évènements.
?
Qu'est-ce qu'un évènement ?
(exécution d'une ou plusieurs instructions)
?
Qu'est-ce qu'un ordre d'évènements ?
Quand est-ce que E1 → E2 ?
E1
E2
E2
E1
Propriétés
Transitif
Anti-réflexif
Anti-symétrique
E1
E2
E2
E3
et
⇒
E1
E3
E1
E2
⇒
E1
E2
E1
Ordre Partiel ou Total ?
(Partiel s'il existe deux évènements E1 et E2 tels que ni E1 → E2, ni E2 → E1.)
Propriétés
Transitif
Anti-réflexif
Anti-symétrique
E1
E2
E2
E3
et
⇒
E1
E3
E1
E2
⇒
E1
E2
E1
Ordre Partiel
(i.e. il existe deux évènements E1 et E2 tels que ni E1 → E2, ni E2 → E1.)
E2 → F3 ?
F3 → E2 ?
F2
E1
F1
E2
F3
Les deux sont possibles.
Représenter l'ordre partiel des évènements.
On veut :
une fonction H telle que :
0
1
2
3
4
5
6
0
1
2
3
4
5
6
E1
E2
H = 2
H = 3
E3
E4
H = 6
H = 5
Idée 1 : horloge logique = horloge locale ?
(i.e. H(E) = heure sur la machine sur laquelle l'évènement a eu lieu)
E1 → E2
H(E1) < H(E2)
⇒
E3 → E4
H(E3) H(E4)
mais
>
L'idée : les timestamps (ou estampilles)
A
B
t = 1
t = 1
t = 2
(t = 3)
t = 3
t = 4
t = 5
t = max(3, )+1
= 5
4
t = max(5, )+1
= 6
5
= 6
t = max( ,5)+1
3
(t = 4)
(t = 5)
le timestamp est incrémenté.
avec chaque nouveau message.
grand entre local et reçu est utilisé
et incrémenté.
(t = 2)
= 3
t = max( ,1)+1
2
Vérification des besoins
On voulait :
une fonction H telle que :
E1 → E2
H(E1) < H(E2)
⇒
On avait définit E1 → E2 :
H(E1) < H(E2)
⇒
?
H(E1) < H(E2)
⇒
?
Vérification des besoins - un ordre total ?
On voulait :
une fonction H telle que :
E1 → E2
H(E1) < H(E2)
⇒
Remarque :
E1 → E2
H(E1) < H(E2)
⇒
On projette un ordre partiel sur un ordre total.
Autrement dit, si E1 et E2 n'ont pas de relation, H leur en donne une.
Vérification des besoins - Un ordre total stricte ?
Remarque : On peut avoir H(E1) = H(E2).
Compliqué pour prendre des décisions, affecter des priorités, etc.
Ce n'est pas un ordre stricte.
Solution : le rendre stricte
1
2
t = 1
t = 1
F2
E1
t = 2
t = 2
H(E1) = H(F1), E1 est placé avant F1, car 1 < 2.
F1
E2
t = 3
t = 3
Si E1 arrive sur machine i
,
E2 arrive sur machine j
,
et H(E1) = H(E2),
Alors E1 est arrivé avant E2.
tels que i
< j
, arbitrairement :
priorité à la machine à l'ID le plus petit.
Ordre total rendu strict ; Exemple
1
2
t = 1
t = 1
F2
E1
t = 2
t = 2
F1
E2
t = 3
t = 3
Quel est l'ordre ?
E1,
F1,
E2,
F2.
Quel est l'ordre des événements ?
1
t = 1
t = 1
F1
E2
2
3
t = 1
F2
E1
E3
F3
G1
G2
E4
G3
E1, F1, E2, E3, G1, E4, G2, F2, G3, F3
1
t = 1
t = 1
t = 2
t = 2
F1
E2
t = 3
t = 6
2
3
t = 1
F2
E1
E3
t = 4
t = 7
F3
t = 4
G1
t = 5
G2
t = 5
E4
t = 6
G3
Quel est l'ordre des événements ?
Solution
Plusieurs distributeurs de tickets, communiquant suivant le protocole de Lamport,
Chaque distributeur peut délivrer un ticket, affichant
Chaque client doit d'abord obtenir un ticket au distributeur le plus proche.
Celui ayant le ticket (timestamp, numéro) le plus petit peut aller au guichet.
Questions :
où une demande de ticket représente un événement.
Solution