#algorithmes #fr #distributedalgorithms #sorbonne

Horloge vectoriel


  • \(T = \mathbb{N}^N\)
  • chaque processus \(i\) gère un vecteur \(VC_i\) de taille \(N\).
    • \(VC_i[i]\): nombre d'événements du proc \(i\)
    • \(VC_i[j]\): connaissance qu'a \(i\) de l'avancement de l'horloge de \(j\)
  • À tout instant, l'état réel d'avancement du système est donné par \(W=(VC_1[1],...,VC_N[N])\)

algorithme de mise à jour

  • À chaque événement de \(P_i\), le processus exécute \(VC_i[i] = VC_i[i] + 1\)
  • À l'emission d'un message \(m\): rien à faire.
  • À la réception d'un message \(m\) portant un horloge \(m.VC\).
  • \(\forall x: VC_i[x] = \max(VC_i[x], m.VC[x])\text{ et } VC_i[i] = VC_i[i] + 1\)

causalité

  • on a les relations
    • \(VC_i \leq VC_j \Leftrightarrow \forall k: VC_i[k] \leq VC_j[k]\)
    • \(VC_i < VC_j \Leftrightarrow VC_i[k] \leq VC_j[k] \text{ et } VC_i \neq VC_j\)
    • \(VC_i | VC_j \Leftrightarrow (VC_i \leq VC_j) \wedge (VC_i \leq VC_j)\)
  • Les horloges vectorielles définissent un ordre partiel sur les événements
  • Les horloges vectorielles caractérisent la causalité (consistence forte) \(e\rightarrow e' \Leftrightarrow VC(e) < VC(e')\) \(e | e' \Leftrightarrow VC(e) | VC(e')\)
  • augmentent la quantité d'info à gérer localement et circulant sur la réseau
  • la causalité des événements d'un système réparti avec \(N\) processus ne peut être caractérisée qu'avec des horloges vectorielles ayant au moins \(N\) entrées
  • détection à la volée du respect de l'ordre causale impossible et donc délivrance causale non respectée