Mots clés : algorithme réparti,
causalité, détection de propriétés, détection décentralisée
.
Résumé :
La détection de propriétés dans les exécutions réparties
est un problème fondamental qui se pose pour le concepteur
d'environnements de programmation répartie ainsi que pour
le contrÔle des programmes répartis. Malheureusement, du
fait de la structure de l'ensemble des états globaux
cohérents d'une exécution répartie, la détection de
propriétés est un problème NP-complet.
La détection de propriétés dans les exécutions réparties
est un problème fondamental qui se pose pour le concepteur
d'environnements de programmation répartie ainsi que pour le
contrÔle des programmes répartis. Pour le concepteur
d'environnements, il s'agit essentiellement de pouvoir
fournir un outil de compréhension de ces programmes. Par
exemple, lors d'une séance de déboggage, il peut demander si
une somme de variables réparties représentant une ressource
bornée est supérieure à une constante fixée, s'il existe une
conjonction d'états locaux qui forment un état global
cohérent tel que chacun de ces états locaux respecte une
propriété donnée. Pour le contrÔle de programmes répartis, la
détection de comportement est un aspect du problème. Ainsi
avant de mettre en oeuvre un algorithme de résolution
d'interblocage, il faut savoir détecter si un sous-ensemble
de processus est en situation d'interblocage.
Dans son cas le plus général, la détection de propriétés
est un problème NP-complet. L'observation du comportement
d'une exécution par des observateurs répartis pouvant donner
lieu à des observations différentes pour un même
comportement, il est nécessaire de générer toutes les
observations possibles [SM94].
Ceci est dû à la structure de l'ensemble des états globaux
cohérents d'une exécution répartie qui au pire, a une taille
exponentielle par rapport au nombre de processus mis en jeu.
Pour ne pas être limité par ces caractéristiques dans la
conception d'algorithmes de détection, il est alors essentiel
d'étudier ce problème de manière moins générale, soit en
restreignant les types de propriétés que l'on souhaite
détecter, soit en restreignant la structure sur laquelle sont
détectées les propriétés.
Historiquement, c'est la restriction aux types de
propriétés qui a d'abord été employée à travers la
distinction propriétés
stables/propriétés instables. Une propriété est stable
si une fois vérifiée dans une exécution répartie, elle le
demeure. On peut montrer qu'il existe des algorithmes de coût
polynomial pour résoudre le problème de leur détection.
Toutefois le problème demeure car la classe des propriétés
stables ne rassemble qu'un nombre limité de cas
particuliers.
Toujours dans le domaine de la restriction au type de
propriétés, une voie plus prometteuse a été récemment
étudiée. Il s'agit de la limitation syntaxique dans
l'expression même des propriétés. C'est dans cette approche
que s'inscrivent les travaux de V. Garg concernant les
conjonctions de prédicats locaux [GW94]
et les prédicats linéaires ou semi-linéaires [CG95],
ainsi que les travaux de Stoller et Schneider sur la
décomposition d'expressions en conjonctions.
Au sein de l'équipe ADP, nous nous
intéressons plus particulièrement à la restriction de la
structure sur laquelle sont détectées les propriétés. Nous
avons présenté le problème de la détection de propriétés
comme une variante d'un problème de reconnaissance de
langage. Le calcul réparti est modélisé sous la forme d'un
graphe orienté acyclique. Les sommets du graphe correspondent
à des états (locaux ou globaux). Les arcs du graphe sont le
reflet des relations de précédence causale qui existent entre
les états. Des prédicats de bases (locaux ou globaux) sont
exprimés sous forme d'expressions booléennes portant sur les
valeurs des variables gérées par les processus de
l'application. Ces prédicats de base sont identifiés de
manière unique par une lettre (ou symbole). Par définition,
un symbole est associé à un sommet du graphe si l'état
correspondant satisfait le prédicat de base ainsi identifié.
L'ensemble des symboles spécifiés constitue un alphabet. Nous
appelons motif tout langage défini sur cet alphabet.
Le rÔle d'un algorithme de détection est de comparer un
ensemble de motifs spécifiés avec l'ensemble des motifs
observés au cours de l'exécution. Cette comparaison se fait
en visitant les sommets du graphe selon la stratégie du tri
topologique. Une règle de satisfaction (ou opérateur modal)
précise les modalités de comparaison. En choisissant le type
de graphe (états globaux, états locaux ou événements) nous
pouvons régler le niveau de complexité de l'algorithme. Cette
stratégie nous a notamment permis de reformuler différents
algorithmes de détection de propriétés dans un cadre général
unique ainsi que d'en proposer de nouveaux [BFR96].