Projet Meije

previous up next contents
Précédent : Présentation générale et objectifs Remonter : Projet MEIJE, Parallélisme, Synchronisation et Suivant : Grands domaines d'application



Fondements scientifiques

Sémantique de la mobilité



Participants : Gérard Boudol , Ilaria Castellani , Silvano Dal-Zilio , Massimo Merro , Davide Sangiorgi , Roberto Amadio


Mots-clés : parallélisme, concurrence, sémantique, parallélisme asynchrone, synchronisation, langage fonctionnel, objet, mobilité, lambda-calcul, pi-calcul


Résumé : La mobilité est devenue l'un des aspects importants des systèmes informatiques, et particulièrement des systèmes distribués. Notre projet s'intéresse à la notion de «code mobile» - et donc à une notion de mobilité logique, plutôt que physique. Il s'agit de dégager les concepts utilisés dans les langages de programmation récemment proposés pour permettre la mobilité des calculs, et d'en formaliser la sémantique.

Le modèle sur lequel nous développons principalement notre approche formelle de la mobilité est le pi-calcul. C'est un modèle similaire à celui que le lambda-calcul offre pour la programmation séquentielle et fonctionnelle, mais dans lequel le parallélisme est pris en compte, ainsi qu'une certaine forme de mobilité puisque dans le pi-calcul les processus se communiquent des noms de canaux de communication. En fait, le pi-calcul contient plus ou moins directement le lambda-calcul, sa puissance d'expression est donc déjà bien établie de ce simple fait - ceci en regard de la programmation séquentielle.

Nos recherches sur le pi-calcul en tant que modèle pour la programmation des systèmes distribués s'articulent autour de plusieurs axes. L'approche objet étant très largement dominante dans le domaine des systèmes répartis, l'étude formelle du modèle objet, dans ses relations avec le pi-calcul, est naturellement une composante importante de notre travail. Nous étudions aussi comment peut s'étendre la notion de type, et comment elle peut être utile dans le raisonnement à propos des programmes parallèles. Cette notion de type, familière dans la programmation séquentielle, paraît encore plus importante dans un cadre distribué, ne serait-ce que pour assurer une certaine cohérence dans les communications.

Les questions de sécurité sont encore peu abordées dans nos travaux. En particulier, la modélisation explicite de la migration, avec la notion de «localité» et celle, associée, de site défaillant, ou simplement temporairement déconnecté, est une direction qu'il est essentiel d'explorer.

Formalismes réactifs synchrones, Esterel



Participants : Gérard Berry , Xavier Fornari , Monica Robert , Gilles Roux , Horia Toma , Olivier Ploton


Mots-clés : langage synchrone, réactivité, causalité, sémantique, temps réel, compilation,optimisation, circuit digital


Résumé : Le langage Esterel permet la programmation de systèmes réactifs synchrones. La syntaxe impérative du langage est adaptée aux systèmes dominés par le contrôle. Elle repose sur des primitives spécifiques de parallélismes et de préemptions. La sémantique formelle permet la définition exacte des programmes, leur traduction vers des formats adaptés à la synthèse de logiciel ou de matériel, l'optimisation de cette synthèse, et la vérification de propriétés de programmes.

On désigne comme réactifs les systèmes dont la caractéristique principale est d'interagir avec leur environnement extérieur au rythme de cet environnement. Les systèmes réactifs synchrones s'appuient sur les notions d'horloge globale, de diffusion instantanée d'informations, de parallélisme déterministe et de préemption pour fournir un modèle de programmation cohérent et adapté. Esterel [8] propose les primitives correspondantes en complément d'un langage impératif traditionnel. Les opérations de manipulations de données sont reportées vers un langage hôte, par exemple C.

Les applications d'Esterel sont les contrôleurs temps-réel, les systèmes embarqués, les protocoles de communication, les interfaces homme-machine, et plus généralement les systèmes réactifs dominés par le contrôle.

Un programme Esterel est traduit en un système d'équations booléennes avec mémoires, c'est-à-dire en un circuit synchrone. Cette traduction permet la synthèse directe de circuits électroniques ou la synthèse de programmes par tri des équations et traduction directe en C. Elle permet également de s'interfacer avec de nombreux systèmes de vérification formelle comme ceux décrits en section [*].

Les recherches développées autour du langage et de son modèle concernent :

Les développements théoriques conduisent à des algorithmes implantés dans les différentes parties du compilateur Esterel, décrit en section [*]. Des retours d'utilisateurs viennent fréquemment susciter de nouvelles questions théoriques et pratiques concernant les méthodologies de conception et leurs besoins algorithmiques.

Vérification automatique

 

Participants : Amar Bouali , Michel Bourdellès , Eric Madelaine , Annie Ressouche , Valérie Roy , Robert de Simone


Mots-clés : vérification, système distribué, parallélisme synchrone, parallélisme asynchrone, analyse par modèle, méthode symbolique


Résumé : Le vocable anglais de model-checking recouvre la généralité des méthodes de vérification et d'analyse automatiques de systèmes parallèles communicants à base d'exploration exhaustive des espaces de configurations atteignables. Cette approche est maintenant largement développée, et elle donne lieu à une intense recherche sur les modes de représentation et les algorithmiques dédiées face au problème de l'explosion combinatoire. Notre objectif est de pouvoir valider des spécifications ou programmes de taille réelle, dans le cadre synchrone (Esterel) ou asynchrone (calculs de processus).

Les systèmes parallèles posent généralement des problèmes de fiabilité accrus du fait des multiples flots de contrôle qui coexistent. Le phénomène de ce type sans doute le plus connu est celui de l'interblocage de processus, en attente mutuelle. Le parallélisme peut provenir d'impératifs physiques (systèmes distribués), mais aussi être introduit comme paradigme de modularité logique, comme dans la programmation réactive. Nos travaux sur la modélisation formelle de tels systèmes nous ont permis de dégager ensuite des méthodes de vérification automatique centrées sur une analyse exhaustive des configurations d'états de contrôle atteignables, dans le cas fini (mais de complexité combinatoire élevée).

La problématique fondamentale des logiciels d'analyse par modèles (model checkers) est de combattre l'explosion combinatoire. Ceci peut être exploré par l'algorithmique, l'application de méthodes compositionnelles ou la réduction des problèmes par abstraction, ou encore l'introduction de types de données symboliques pour la représentation «en compréhension» des entités manipulées. D'un point de vue pratique on doit également s'interroger sur l'introduction «la plus harmonieuse possible» de ces méthodes dans un cycle de développement logiciel les permettant (par exemple, dans notre cas, sur des programmes Esterel).

Programmation réactive



Participants : Frédéric Boussinot , Karima Machane , Jean-Ferdy Susini


Mots-clés : réactif, objet, script, parallélisme, événement, World Wide Web, Reactive-C, Java, SugarCubes, Icobj


Résumé : L'approche réactive a pour but d'étudier divers modèles de programmation dans lesquels existe une horloge logique définissant des instants globaux. Elle a également pour objectif d'implémenter des langages de programmation construits sur ces modèles.

Le traitement du parallélisme («concurrency») dans les langages de programmation usuels reste très empirique et fondé sur des concepts datés. Par exemple, Java ne propose que des sémaphores et moniteurs pour la gestion de concurrence. Nos travaux sur la programmation réactive, initiés avec le langage Reactive-C en 1988, visent à augmenter les langages existants avec des primitives de programmation de haut niveau, fondées sur les paradigmes de la programmation synchrone : notion d'instants globaux, d'évènements, de diffusion instantanée.

Plusieurs langages et formalismes réactifs ont été notamment définis et implantés en Reactive-C : réseaux de processus réactifs, langage synchrone SL, objets réactifs. Ils sont décrits dans un livre qui présente également Reactive-C en détail [1].

Nos travaux actuels portent sur le développement des scripts réactifs autour de Java (voir section [*]), ainsi que sur la programmation graphique par Icobjs (voir section [*]).


previous up next contents Précédent : Présentation générale et objectifs Remonter : Projet MEIJE, Parallélisme, Synchronisation et Suivant : Grands domaines d'application