Projet : PARA

previous up next contents
Précédent : Validation de logiciels parallèles par Remonter : Résultats nouveaux Suivant : Détections des cycles de miettes


   
Le join-calcul



Participants : Cédric Fournet, Georges Gonthier, Luc Maranget, Fabrice le Fessant, Jean-Jacques Lévy, Didier Rémy.

En 1998, nous avons continué notre activité sur le join-calcul. Deux nouvelles implémentations ont vu jour et sont disponibles sur le réseau. La première est la version 1.03 du prototype développé par C. Fournet et L. Maranget. [[13]] Ce système se compose d'un compilateur à byte-code, d'un environnement d'exécution, ainsi que d'une centaine de pages de documentation. Son développement proprement dit (comprenant l'écriture de la documentation) a environ demandé 18 mois. La deuxième implémentation est l'oeuvre de F. le Fessant. Elle est complètement intégrée dans Objective Caml, elle dispose d'un glaneur de cellules réparti. Son développement a demandé 8 mois. Ce sera la version qui sera dans le futur développée par notre projet. Un certain nombre d'exemples ont également été écrits, principalement des jeux distribués. Mais elle a aussi démontré son opérabilité en rendant facilement réalisable un Hévéa mobile ou un petit éditeur de texte, notamment grâce à l'interface avec Caml qui donne automatiquement accès à des librairies graphiques [[16]].

Le join-calcul permet la programmation concurrente et distribuée, ainsi qu'un communication et une coopération simple entre deux tâches qui s'exécutent sur des machines différentes. Dès le départ, le join-calcul a été conçu en tenant compte de la ``localisation'' des objets manipulés (processus, canaux, groupes de tels objets). Ce souci a facilité la production d'un langage de programmation qui donne au programmeur une vision de relativement haut niveau d'un réseau de machines. Classiquement, cette vision de haut niveau cache les détails de la programmation distribuée sur un système particulier et permet au programmeur de se concentrer sur l'architecture de son programme.

Dans le cas du join-calcul, une première brique est la communication par canaux, qui peuvent eux-mêmes voyager sur les canaux. Les canaux relient des processus entre eux, une restriction fondamentale du join-calcul est d'imposer un récepteur unique sur chaque canal, ceci permet l'identification d'un canal avec son récepteur. La perte d'expressivité qui en résulte est compensée par la réception jointe, une certaine action ne se déclenchant que si plusieurs canaux reçoivent un message. La nature du calcul et du langage permet la localisation des canaux engagés dans une réception jointe sur la même machine. La réalisation de rendez-vous entre des processus réellement distribués (i.e. résidant sur des machines différentes) devient possible car ce rendez-vous aura lieu par une communication jointe qui se décomposera en deux phases, une phase de transport des messages vers la machine qui possède les canaux de la réception jointe, puis une phase de rendez-vous purement locale et donc assez simple.

La deuxième brique de base du join-calcul est la location. Le contrôle effectif de la localisation des canaux et processus se fait par ce biais: une location est un ensemble de canaux et de processus conçus pour migrer ensemble d'une machine à l'autre. Les locations pouvant être créées dynamiquement, il s'ensuit une notion naturelle de parenté entre locations, puis de structure arborescente des locations. La migration d'une location correspond au déplacement d'un sous-arbre vers un autre point d'attache dans l'arbre des locations. Ici encore, le langage reprend un concept issu des calculs de processus, les machines n'apparaissent pas dans le langage, seul apparaît une location racine par machine. Le réseau de machine est donc abstrait en une forêt de locations, les migrations sont explicites, dans le sens que le programmeur spécifie bien une migration, mais elles restent d'assez haut niveau, tant par ce qui migre (un ensemble cohérent de canaux et de processus contenu dans une location et toutes ses sous-locations) que par la façon dont est donnée la destination de la migration (une autre location dont la location migrante devient une sous-location). Cette approche est entièrement intégrée dans notre prototype et permet l'écriture de programmes distribués, avec communications distantes, migration de code, applets, etc.



previous up next contents
Précédent : Validation de logiciels parallèles par Remonter : Résultats nouveaux Suivant : Détections des cycles de miettes