Vous êtes sur la page 1sur 11

Référence

Horloges logiques et datation des évènements.


inspiré du cours

Johanne Cohen1 • Jean-Marie Rifflet (http ://www.pps.jussieu.fr/ rifflet/)


• Sacha Krakowiak (http ://proton.inrialpes.fr/ krakowia/)
1 LORIA/CNRS, Nancy, France.

1/55 1 2/55 2

Système réparti Système réparti

• Un système réparti est constitué de N sites (ou processus)


communiquant par messages.
• Chacun de ces sites agit comme un automate : il réalise des
opérations qui modifient son état.
• Sur un même site : ordre des événements = ordre exécution
des instructions
• sur plusieurs sites : ordre des événements = ? ? ?

Difficile car....
• pas de mémoire commune, pas d’horloge commune
Être capable de raisonner sur un système réparti • Asynchronisme des communications et des traitements.
• définir des prédicats (état)
• coordonner des instructions (ordre)

3/55 3 4/55 4

Modèle asynchrone Les communications


• Les processus ne communiquent que par des messages
• pas d’hypothèses
• sur la durée de transmission des messages
• sur la vitesse d’exécution des processus Échange d’information entre sites : envoi de messages.
• 3 types d’événements
Hypothèses
local changement de l’état d’un processus
émission d’un message • Aucune perte de message (mais le temps de transmission peut
du à une communication
réception d’un message être infini)
• Aucune erreur de transmission (une message arrive intacte)
p1 a d f c u x
• les canaux de communications peuvent être FIFO ou non.
m1

p2 v h b
m2 m3

p3 g y

5/55 5 6/55 6
Délivrance Relation d’ordre sur les évènements : précédence.
La communication entre les noeuds est en général assurée par une
couche de communication spécifique utilisée par des entités de la
couche supérieure pour émettre/recevoir des messages.
• Sur un même site : ordre des événements = ordre exécution
Emetteur Récepteur des instructions
émission délivrance • sur plusieurs sites : il faut définir un ordre des événements tel
que
• il soit global
système de com. réception • il doit être calculer entre deux évènements en fonction de
l’information local.
Solution : Définition de la causalité [Lamport78].

La délivrance d’un message : l’opération consistant à le rendre


accessible aux applications clientes.
Par exemple :le protocole TCP dans la couche transport.

7/55 7 8/55 8

Plan Ordre causal

L’ordre causal est l’ordre partiel sur les événements :


Ordre Causal Si a et b sont deux événements, a précède b (a ! b) si et
seulement si l’une des trois conditions est vraie :
Horloges logiques et datation des évènements • a et b ont lieu sur le même site avec a avant b.
Horloges et estampilles scalaires • a = Envoyer (< M >) et b = Recevoir (< M >) du même
Horloges et estampilles vectorielles message.
Horloges et estampilles matricielles
• Il existe un évènements c tel que a ! c et c ! b.
p1 a d f c u x
Coupures cohérentes
m1
Définitions • a, d, f , c précèdent u
Protocole de Chandy-Lamport p2 v h b • b précède c
m2 m3
Coupures cohérentes et horloges vectorielles
• v ! u car b ! u et c ! u
p3 g y

9/55 9 10/55 10

Ordre causal =ordre partiel Exemple

p1 a d f c u x

A un événement e trois ensembles d’événements sont associés : m1


• Passe(e) : ensemble des événements antérieurs à e dans
p2 v h b
l’ordre causal (e appartient à cet ensemble) ; m2 m3
• Futur (e) : ensemble des événements postérieurs à e dans
l’ordre causal (e appartient à cet ensemble) ; g y
p3
• Concurrent(e) : ensemble des événements concurrents avec e.

Notation e || e ! : deux événements e et e’ sont concurrents


• Passe(u) = {a, b, c, f , v , h}
• Futur (u) = {x, y }
• Concurrent(u) = {g }

11/55 11 12/55 12
Remarque sur certains points incohérents Remarque sur certains points incohérents

p1 d b p1 d b
Canal non FIFO : Canal non FIFO :
m2 m1 m2 m1
• c !d • c !d
p2 a c p2 a c
• d !b • d !b

p3
• intérêt de recevoir m1 ? p3
• intérêt de recevoir m1 ?

p1 f b p1 f b
Autre scénario : Autre scénario :
m1 m1
m3 • a!f m3 • a!f
p2 a c p2 a c
• f !b • f !b
m2 m2
p3 d e • intérêt de recevoir m1 ? p3 d e • intérêt de recevoir m1 ?

Délivrer à l’application cliente de manière correcte

13/55 13 13/55 13

Délivrance FIFO Délivrance causale

La délivrance FIFO La délivrance causale


assure que si 2 messages sont envoyés successivement depuis un assure que si l’envoi du message m1 par le site Si à destination du
même site Si vers un même destinataire Sj , alors le premier envoyé site Sk précède (causalement) l’envoi du message m2 par le site Sj
sera délivré sur le site Sj avant le second. Formellement, on a à destination du site Sk , le message m1 sera délivré avant le
message m2 sur le site Sk . Formellement, on a
sendi (m1 , j) ! sendi (m2 , j) implique delj (m1 ) ! delj (m2 )
sendi (m1 , k) ! sendj (m2 , k) implique delk (m1 ) ! delk (m2 )

p1 d b
p1 f b
m2 m1
m1
p2 a c
m3
p2 a c

m2
p3
p3 d e

14/55 14 15/55 15

Plan Horloges scalaires

Ordre Causal
• Chaque site i gère un compteur (une horloge HLi ) dont la
valeur est un entier.
Horloges logiques et datation des évènements • chaque message m envoyé est estampillé (daté) (ELm ) par la
Horloges et estampilles scalaires date de son évènement.
Horloges et estampilles vectorielles • Si un événement est local, alors HLi ← HLi + 1
Horloges et estampilles matricielles • Si l’événement est l’ envoi d’un message m alors
!
HLi ← HLi + 1
Coupures cohérentes ELm ← HLi
Définitions
• Si l’événement est la réception du message m alors
Protocole de Chandy-Lamport
Coupures cohérentes et horloges vectorielles HLi ← max(HLi , ELm ) + 1

16/55 16 17/55 17
illustration Ordre strict si modification suivante

p1 0 1 6 7

5 • l’estampille logique HL(e) de e sur le site i est un couple


(HLi , i).
p2 4 5 6 7 7 • L’ordre sur les estampilles est le suivant :

6 i , i) ≺ (HLj , j) si et seulement si
(HL!
HLi < HLj
p3 2 7 8 .
ou HLi < HLj ∧ i < j

L’ordre des événements n’est pas un ordre strict : plusieurs


événements peuvent porter la même valeur.

18/55 18 19/55 19

Propriété : respect de l’ordre causal ? illustration


Propriété
Si e ! e, alors HL(e) ≺ HL(e ! ) p1 0 1 6 7
Démonstration.
Raisonnement par récurrence : sur la longueur n de la suite 5
d’évènement reliant e à e ! p2 4 5 6 7 7
• si n = 0 : alors e = e ! et HL(e) $ HL(e ! )
• si n > 1 : soit e = e0 , e1 , . . . , en = e ! une suite d’évènement 6
tel que ∀i ∈ [0, . . . , n − 1], ei → ei+1
p3 2 7 8
• par récurrence on a e ! en−1 et HL(e) ≺ HL(en−1 )
• Comme en−1 → en , on a
• Soit en−1 , en appartiennent au même site HL(en−1 ) ≺ HL(en ) L’ordre des événements n’est pas un ordre strict : plusieurs
• Soit il existe une message m tel que send(m) = en−1 : par
événements peuvent porter la même valeur.
définition on a e HL(en−1 ) ≺ HL(en )
• Par transitivité de $, on a HL(e) ≺ HL(en )

20/55 20 21/55 21

Ordre strict si modification suivante Propriété : respect de l’ordre causal ?


Propriété
Si e ! e, alors HL(e) ≺ HL(e ! )

Démonstration.
• l’estampille logique HL(e) de e sur le site i est un couple Raisonnement par récurrence : sur la longueur n de la suite
(HLi , i). d’évènement reliant e à e !
• L’ordre sur les estampilles est le suivant : • si n = 0 : alors e = e ! et HL(e) $ HL(e ! )
i , i) ≺ (HLj , j) si et seulement si
(HL! • si n > 1 : soit e = e0 , e1 , . . . , en = e ! une suite d’évènement
HLi < HLj tel que ∀i ∈ [0, . . . , n − 1], ei → ei+1
.
ou HLi < HLj ∧ i < j • par récurrence on a e ! en−1 et HL(e) ≺ HL(en−1 )
• Comme en−1 → en , on a
• Soit en−1 , en appartiennent au même site HL(en−1 ) ≺ HL(en )
• Soit il existe une message m tel que send(m) = en−1 : par
définition on a e HL(en−1 ) ≺ HL(en )
• Par transitivité de $, on a HL(e) ≺ HL(en )

22/55 22 23/55 23
Exemple d’application : exclusion mutuelle Exemple : 3 sites.

• Un seul site à la fois peut accèder à la ressource critique


• Algorithme distribué : gestion d’une file d’attente distribuée.
Hypothèse : tous les sites connaissent le nombre total de sites Site 1 Site 2 Site 3
(Accès,14)
dans le système. (D,0ok) R(Accès,14,1) R(Accès,14,1)
← (ok, 1) ← (ok, 1)
1. Chaque site i voulant accèder à la ressource critique date sa (D,2 ok)
demande Ressource (Accès,21) (D,0ok)
R.+ R(Accès,21,2) (D,21,2) (Accès,20) (D,0ok)
2. Il envoie un message de demande d’accès + sa date à tout le R.+ R(Accès,20,3) (D,21,2),(D,20,3) R(Accès,20,3) (D,0oK) (D,0ok),
Ressource (D,21,2),(D,20,3) (ok, 3) → (D,0oK) R(Accès,21,2) (D,0ok),(D,21,2)
monde liberation (D,21,2),(D,20,3) (D,0ok) (D,1ok),(D,21,2)
3. tous les sites ne voulant pas y accèder + ayant une date de (ok, 2), (ok, 3) → (D,0ok) (D,1ok),(D,21,2)
(ok, 2), (ok, 3) → (D,0ok) (D,2ok),(D,21,2)
demande postérieure à la sienne lui donnnent leur accord. (D,1ok) Ressource (D,21,2)
(D,1ok) libération (D,21,2)
4. Pour les autres, ils attendent qu’ils ont accèdé et libéré à la (D,1ok) ← (ok, 2)
(D,2ok)
ressource pour lui donné leur accord. ressource
5. Dès qu’il a reçu l’accord de tout le monde il rentre dans la
section critique.

24/55 24 25/55 25

Horloges vectorielles illustration

• Chaque site i gère un vecteur d’entiers de n éléments (une


horloge HVi ) avec n le nombre de sites (0,
p1 0, 0) (2, 1, 0) (3, 1, 0)
• chaque message m envoyé est estampillé (daté) (EVm ) par la
(1, 0, 0)
date de son évènement.
(0, 1, 0)
• Si un événement est locale, alors HVi [i] ← HLi [i] + 1

p2 (0, 0, 0) (0, 2, 0) (0, 3, 0)


• Si l’événement est l’envoi d’un message m alors
!
HVi [i] ← HLi [i] + 1 (0, 1, 0) (3, 1, 0)
EVm ← HVi (0, 2, 0)
• Si l’événement est la réception du message m alors p3 (0, 0, 0) (0, 2, 1) (3, 2, 2)
!
HVi [i] ← HLi [i] + 1
HLi [j] ← max(HLi [j], ELm [j]) pour tout j )= i

26/55 26 27/55 27

Remarque la relation d’ordre.


La relation d’ordre suivante peut par ailleurs être définie sur les
Propriété : estampilles vectorielles :
la valeur de la i-ème composante de EVe correspond au nombre
EVe $ EVe $ si et seulement si ∀i, EVe [i] $ EVe $ [i]
d’évènements du site Si appartenant au passé de e.

∀i, EVe [i] = card({e ! : e ! ∈ Si ∧ e ! ! e}) (0,


p1 0, 0) (2, 1, 0) (3, 1, 0)
(1, 0, 0)
Démonstration. (0, 1, 0)
Soit e ! ∈ PASSE (e) un évènement du site Si : EVe $ [i] ≤ EVe [i].
• Considérons e ! tel que EVe $ [i] = EVe [i].
p2 (0, 0, 0) (0, 2, 0) (0, 3, 0)

• card(PASSE (e ! ) ∩ {e !! appartenant à Si }) = EVe $ [i] − 1 (0, 1, 0) (3, 1, 0)


(0, 2, 0)
• Futur (e ! ) ∩ Passe(e) = ∅ sinon EVe $ [i] )= EVe [i].
p3 (0, 0, 0) (0, 2, 1) (3, 2, 2)

28/55 28 29/55 29
Propriété Propriété

Propriété Propriété
• e! e! si et seulement si EVe $ EVe $ • e ! e ! si et seulement si EVe $ EVe $
• e || e ! si et seulement si EVe || EVe $ • e || e ! si et seulement si EVe || EVe $

Démonstration. Démonstration.
• Si e ! e ! alors, • Si e ! e ! alors, EVe $ EVe $
• Passe(e) ⊆ Passe(e " ), • Passe(e) ⊆ Passe(e " ),
• ∀i, EVe ≤ EVe ! • ∀i, EVe ≤ EVe !
• EVe ⊆ EVe ! • EVe ⊆ EVe !
• Si e || e ! alors • Si e || e ! alors

30/55 30 30/55 30

Suite de la preuve : si e || e . , alors Cet ordre permet-il la délivrance causale ? NON

Soit Si et Sj les sites appartenant à e et e !


• si j = i alors, e et e ! ne peuvent pas être concurrents.
• Donc j )= i
• Soit x(e, j) le plus grand élément du Passej (e)
• on a x(e, j) →+ e ! (car si e ! ! x(e, j), alors e ! ∈ Passe(e))
• Donc : Passej (e) = Passej (x(e, j)) ⊂ Passej (e ! )
• Par conséquent : EVe [j] < EVe $ [j]
• Utilisant le même raisonnement : on a EVe $ [i] < EVe [i]

31/55 31 32/55 32

Horloges et estampilles matricielles Comment HMi est-elle modifiée ? (1/2)

• Chaque site i gère une horloge (notée HMi ) matricielle • Évènement local à pi : HMi [i, i] ← HMi [i, i] + 1
(n × n) avec n le nombre de sites 
• chaque message m envoyé est estampillé (daté) (EMm ) par la  HMi [i, i] ← HMi [i, i] + 1
valeur courante de HMi . • Émission de m vers pi : HMi [i, j] ← HMi [i, j] + 1

• Que signifie HMi [j, k] ?
m est estampillé : EMm = HMi
• HMi [j, k] = nbre de messages issus de pj vers pk dont pi a
• Réception de (m, EMm ) en provenance pj :
connaissance.
• HMi [j, j] : correspond au nbre d’évènements locaux du site j.

33/55 33 34/55 34
Comment HMi est-elle modifiée ? (1/2) Comment HMi est-elle modifiée ? (2/2)

• Réception de (m, EMm ) en provenance pj :


• Évènement local à pi : HMi [i, i] ← HMi [i, i] + 1 • Quand un message peut-il être délivré ?


 HMi [i, i] ← HMi [i, i] + 1
• Émission de m vers pi : HMi [i, j] ← HMi [i, j] + 1

m est estampillé : EMm = HMi
• Lors de la délivrance du message (m, EMm ) en provenance de
• Réception de (m, EMm ) en provenance pj : pj , mettre à jour l’horloge
Toutes les informations sont connues pour assurer la
délivrance causale

34/55 34 35/55 35

Comment HMi est-elle modifiée ? (2/2) Comment HMi est-elle modifiée ? (2/2)

• Réception de (m, EMm ) en provenance pj : • Réception de (m, EMm ) en provenance pj :


• Quand un message peut-il être délivré ? quand tous les • Quand un message peut-il être délivré ? quand tous les
messages antérieurs à lui ont été délivrés, i.e : messages antérieurs à lui ont été délivrés, i.e :
• Respect de l’ordre FIFO sur le canal j → i : • Respect de l’ordre FIFO sur le canal j → i :
EMm [j, i] = HMi [j, i] EMm [j, i] = HMi [j, i]
• Respect de l’ordre de réception : • Respect de l’ordre de réception :
EMm [k, i] = HMi [k, i], ∀k $= i EMm [k, i] = HMi [k, i], ∀k $= i
• Lors de la délivrance du message (m, EMm ) en provenance de • Lors de la délivrance du message (m, EMm ) en provenance de
pj , mettre à jour l’horloge pj , mettre à jour l’horloge
• HMi [i, i] ← HMi [i, i] + 1
• HMi [i, j] ← HMi [i, j] + 1
• pour tout k $= i, pour tout
! $= i :HMi [k, !] ← max(HMi [k, !], EMm [k, !])

35/55 35 35/55 35

illustration (début) illustration (attention à la délivrance des messages)

Fig.: datation avec l’horloge matricielle


Fig.: datation avec l’horloge matricielle
36/55 36 37/55 37
En résumé Plan

Ordre Causal
• Horloge scalaire :
HLi : ce que pi connaı̂t du système (nbre d’évènements) Horloges logiques et datation des évènements
Horloges et estampilles scalaires
• Horloge vectorielle :
Horloges et estampilles vectorielles
HVi [j] :ce que pi connaı̂t du site pj Horloges et estampilles matricielles
• Horloge matricielle :
HMi [j, k] :ce que pi connaı̂t de la connaissance du site pj sur Coupures cohérentes
le site pk Définitions
Protocole de Chandy-Lamport
Coupures cohérentes et horloges vectorielles

38/55 38 39/55 39

État d’un système réparti Coupure


Définition
Une coupure C est l’ensemble des d’évènements tels que

Si e ∈ C et (e ! précède localement e ) , alors e ! ∈ C

• Notion non-triviale : observateur universel ayant un accès


instantané à l’ensemble de systèmes p1 a x C1 g u
Irréalisable
m1 m3
• notion de coupure : capture l’état du dernier évènement avant
p2 b y t s v
“la photo” sur chaque site.
m2 m4

p3 r h k q
C2
Fig.: la coupure C1 contient les évènements {a, x, b, y , t, r }
40/55 40 41/55 41

Coupures cohérentes Propriétés sur les coupures cohérentes


Définition
Une coupure cohérente C est une coupure cohérente si :

(e ∈ C ) et (e ! ! e) =⇒ e ! ∈ C

p1 C1 coupure cohérente Définition


Une coupure cohérente C est une coupure cohérente si :

m1 m3 (e ∈ C ) et (e ! ! e) ⇐= e ! ∈ C
p2 v
m2 m4

p3 q
C2 coupure non-cohérente
Fig.: C2 non-cohérente car v ∈
/ C2 et q ∈ C2
42/55 42 43/55 43
Caractérisation des coupures cohérentes Caractérisation des coupures cohérentes
Soit ci les évènements définissant la coupure : C = (c1 , . . . , cn ). Soit ci les évènements définissant la coupure : C = (c1 , . . . , cn ).
Propriété : (∀i, j, cj || ci ) ⇔ C est une coupure cohérente Propriété : (∀i, j, cj || ci ) ⇔ C est une coupure cohérente

x C1 Démonstration.
p1 c1
• Soit C est une coupure cohérente. Par contradiction,
supposons ∃i )= j, ci ! cj .
m1 m3 • ci ! ai ! aj ! cj (message entre les deux sites)
p2 t v • Comme ai ! cj , on a ai ∈ C .
c2
• Ceci est contradictoire avec le fait que ci ! ai
m2 m4
• Soit C = (c1 , . . . , cn ) avec ∀i, j, cj || ci .
• Soit ai ! ci , et aj ! ai
p3 r q • Alors aj ! ci , et aj ∈ C
c3
• Supposons que cj ! aj : on aurait cj ! aj ! ai ! ci
(Contradictoire avec le fait que cj || ci ).
• Donc C est une coupure cohérente.
Fig.: C1 = (c1 , c2 , c3 )

44/55 44 44/55 44

Enregistrement l’état d’un système Protocole de Chandy-Lamport [1985]

• Motivation : Hypothèses :
• Observation, détection de propriétés. • les canaux de communication entre processus sont FIFO
• reprise en cas de panne
• Un seul processus décide de lancer la procédure
• Contraintes :
d’enregistrement
• L’ état enregistré doit être cohérent
• Le coût de l’enregistrement doit être raisonnable Objectif :
• Difficulté : enregistrement d’un état cohérent en un temps fini
• opérations locales /propriété globale sous quelle forme ?

45/55 45 46/55 46

Définition d’un état. Première version :(1/2)

L’état d’un système de réparti est Hypothèses :


• l’ensemble des états de chacun de ses sites • horloge globale HR (temps réel).
• et l’ensemble des états de chacun de ses canaux de • délai de transmission et rapport des vitesses des sites bornés.
communications
te séquence atomique:
pouvant se déduire des déduire de l’état des sites p1 Init ( enregistrer etat
p1 x C1 m2 + envoyer msg vide)
c1 • état de p1 :x m1
ordre : à te
m3 • état de p2 : t p2 enregistrer état message vide
m1
p2 t c2 v (hypo sur les tps)
• état de p3 : r
m2 m4 enregistrement des
• état de p2 → p3 : m2 messages arrivés
p3 r q p3
c3 • état de p2 → p1 : m1

47/55 47 48/55 48
Première version :(2/2) Deuxième version :(1/3)
Propriétés : la coupure C définit au tps te est une coupure
cohérente
• si e ∈ C et si e ! ! e (localement) alors HR(e ! ) < HR(e) et
Algorithme sur le site pi :
e! ∈ C
1. 1ière réception du marqueur depuis pj
• L’état du canal est correct du
enregistrer état de pi
• au fait de l’atomicité des instructions enregistrement atomicité
état ; envoi message vide
envoyer le marqueur à tous ses voisins
• et du fait que le canal de communication est FIFO état du canal j → i := ∅
enregistrer les msgs sur les canaux entrants
enregistrement enregistrement 2. Réception suivante du marqueur depuis pk :
de l’état envoi du de l’état état du canal k → i := msg reçus depuis l’enregistrement.
msg vide envoi du ne plus enregistrer les msg provenant de pk
msg vide

la non-atomicité canal non FIFO

49/55 49 50/55 50

Deuxième version :(2/3) Deuxième version :(3/3)

pi Init. atomique j vers i k vers i Propriétés : la coupure C ainsi calculée est une coupure cohérente
!
Démonstration.
pj atomique
k vers j
En exercice ?

pk atomique
i vers k

51/55 51 52/55 52

Coupures cohérentes et horloges vectorielles Condition pour les coupures soient cohérentes.
Propriété : C cohérente ⇔ VH(C ) = (VH(c1 )[1], . . . , VH(cn )[n])
• La date de la coupure C = (c1 , . . . , cn ) est définie par
Démonstration.
VH(C ) = sup(VH(c1 ), . . . , VH(cn )) • Soit C cohérente. ∀i )= j, VH(ci )[i] ≥ VH(cj )[i].
• VH(ci )[i] modifié par un évènement local ou d’un msg passé
• Illustration

(2, 1, 0) (3, 1, 0)
p1 C1 = (0, 2, 3) (2,
c1
1, 0) (3, 1, 0) p1
(0, 0, 0)(0, 0, 0) (0, 0, 0)(0, 0, 0)

p2 (0, 0, 0) (0, 2, 0)
c2
(0, 4, 0) p2 (0, 0, 0) (0, 2, 0) (0, 4, 0)

(0, 1, 0) (0, 3, 0) (0, 1, 0) (0, 3, 0)

(0, 0, 3) (0, 2, 4) (3, 2, 5) (3, 4, 6) p3 (0, 0, 3) (0, 2, 4) (3, 2, 5) (3, 4, 6)


p3 c3
C2 = (3, 4, 6)
53/55 53 54/55 54
Suite de la démonstration
• Soit C = (c1 , . . . , cn ) non-cohérente.
• ∃i, j tels qu’un message m de pi émis après C a été reçu par pj
avant C . Soit EV (m) son estampille
• Alors VH(ci )[i] < EV (m)[i] ≤ VH(cj )[i]
• Donc (VH(c1 )[1], . . . , VH(cn )[n]) < VH(C )

p1 (2, 1, 0) (3, 1, 0)
(0, 0, 0)(0, 0, 0)

p2 (0, 0, 0) (0, 2, 0)
(0, 1, 0) (0, 3, 0)

p3 (0, 0, 3) (0, 2, 4) (3, 2, 5)

55/55 55

Vous aimerez peut-être aussi