Le temps logique

Référence

Time, clocks and the ordering of events in a distributed system
L. Lamport
in Communications of the ACM, vol 21, 1978 (pp 558-565)

Introduction

Un système réparti est constitué de N composants (processus ou sites) communiquant par messages (et uniquement de cette manière).
Chacun de ces composants agit comme un automate : il réalise des opérations qui modifient son état. Les opérations réalisées par un des composants sont naturellement ordonnées par l'ordre dans lequel elles sont réalisées : si il s'agit d'un processus abritant plusieurs activités (threads), sur un système monoprocesseur, c'est l'ordre de l'exécution des instructions des instructions sur ce processeur qui ordonne les événements.
La définition de l'ordre des événements sur un système multi-processeurs (fortement et a fortiori faiblement couplés) est plus problématique du fait de la difficulté de maintenir une notion de temps absolu cohérente.


L'ordre causal

Lamport a proposé de définir pour ce type de systèmes une notion de temps logique permettant de comparer logiquement des événements du point de vue de leur ordre d'exécution : d'une part, sur un site, les événements locaux peuvent être ordonnés en se basant sur l'ordre de leur exécution (ou le temps absolu s'il est défini) et d'autre part l'émission d'un message sur le site émetteur précède toujours sa réception sur le site récepteur. Cela correspond à la notion de précédence causale.

De manière plus formelle :



Cette relation définit un ordre partiel des événements.
Des événements e et e' non comparables sont dits concurrents, ce qu'on note e||e'.

A un événement e on peut alors associer trois ensembles d'événements :


Exemple

Considérons la figure suivante décrivant un ensemble d'événements dans un système de 3 sites :



La relation de dépendance causale directe y correspond au graphe



Considérons l'événement p.
Il appartient à son propre passé et est précédé directement par o et y.
- On a Passé(p) = {p} + Passé(o) + Passé(y)
Le calcul de Passé(p) suppose donc le calcul de celui de o et y.
- On a Passé(o) = {o} + Passé(n) + Passé(d)
En pousuivant le calcul:
- Passé(n) = {n} + Passé(m)
- Passé(m) = {m} + Passé(l) + Passé(a)
- Passé(l) = {l} + Passé(k)
- Passé(k) = {k} + Passé(j) + Passé(u)
- Passé(j) = {j}
- Passé(u) = {u}
- Passé(a) = {a}
- Passé(d) = {d} + Passé(c)
- Passé(c) = {c} + Passé(b)
- Passé(b) = {b} + Passé(a) + Passé(j)
- Passé(y) = {y} + Passé(x)
- Passé(x) = {x} + Passé(w) + Passé(n)
- Passé(w) = {w} + Passé(v)
- Passé(v) = {v} + Passé(u) + Passé(l)
Par conséquent Passé(p) = {a, b, c, d, j, k, l, m, n, o, p, u, v, w, x, y}

Par un calcul analogue, on obtient:
Futur(p) = {g, h, i, p, q, r, s, t, C, D}

Finalement les événements n'appartenant ni à Passé(p), ni à Futur(p) sont concurrents avec p.

On a donc Concurrent(p) = {e, f, z, A, B}


Délivrance causale

Dans un système réparti, la communication entre les noeuds du système 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 expédier ou recevoir des messages. Cette couche de communication peut être amenée à ne pas rendre accessible les informations reçues depuis d'autres sites aux applications de la couche supérieure. C'est le cas de la couche TCP qui ne rend accessible un caractère que lorsque tous les caractèress envoyés précédemment sur la connexion ont été effectivement reçus.

La délivrance d'un message est l'opération consistant à le rendre accessible aux applications clientes : nous noterons del(m) cette opération.
La délivrance d'un message recu pourra le cas échéant être retardée par rapport à sa réception afin de satisfaire des contraintes spécifiques de l'ordre de délivrance souhaité si la couche de transport ne garantit pas elle-même la réception des messages dans cet ordre.

Nous mentionnons maintenant les deux propriétés de l'ordre de délivrance des messages qui peuvent s'avérer souhaitables pour certains types d'application.

  • Ordre de délivrance FIFO : cette propriété assure que si deux messages sont envoyés successsivement depuis un même site Si vers un même destinataire Sj, le premier sera délivré sur le site Sj avant le second, c'est-à-dire qu'on a :



    Dans la figure suivante, le canal de communication ne garantit pas une réception FIFO des messages envoyés



    Le message m2 double le m1 (il est envoyé après lui mais arrive néanmoins avant lui) : pour respecter un ordre de délivrance fifo sa délivrance doit être retardée et n'avoir lieu qu'une fois que le message m1 est arrivé et est délivrable. D'un point de vue pratique, cela suppose que la couche de communication dispose d'un tampon (buffer) ordonné dans lequel les messages sont placés dans l'ordre où les applications les liront et d'un autre tampon dans lequel les messages reçus mais non délivrables immédiatement sont conservés jusqu'à ce que les conditions autorisant leur délivrance soient satisfaites.
    Il est assez facile de développer une couche garantissant cette propriété de la délivrance en numérotant sur chaque canal les messages expédiés.

  • Ordre de délivrance causale : cette propriété étend la précédente à des communications à destination d'un même site en provenance de plusieurs autres.
    Elle assure que si l'envoi du message m1 par le site Si à destination du site Sk précède (causalement) l'envoi du message m2 par le site Sj à destination du site Sk, le message m1 sera délivré avant le message m2 sur le site Sk.
    Autrement dit, on a :



    Une situation dans laquelle la propriété de délivrance causale est violée si les messages sont délivrés dans l'ordre où ils sont reçus est décrite dans la figure ci-dessous :



    On a en effet dans ce cas :



    Afin de garantir une délivrance respectant la causalité, il est nécessaire de différer la délivrance du message m3 jusqu'à arrivée du message m1 et son passage au statut de message délivrable.
    Ainsi que nous le verrons dans la section suivante, garantir le respect de la causalité dans l'ordre de la délivrance des messages n'est pas aussi simple que garantir le respect de l'ordre fifo.


Horloges et estampilles logiques

Afin de dater les événements, des horloges logiques de différents types peuvent être définies afin de rendre compte de la relation de causalité entre les événements.
Les valeurs des horloges associées à des événements (leurs estampilles logiques) comparables doivent être elles-mêmes comparables et refléter l'ordre des événements, c'est-à-dire que




Dernière mise à jour : 7 novembre 2008

Valid XHTML 1.0! Valid CSS!