Langages dédiés et leur application aux systèmes d'exploitation



Participants : Charles Consel, Renaud Marlet, Gilles Muller, Dan He, Luciano Porto Barreto, Fabrice Mérillon, Laurent Réveillère.


Langage dédié
langage qui permet d'exprimer des variations à l'intérieur d'un domaine ou d'une famille d'applications.


Réseau actif
architecture de réseau ouverte permettant une adaptation du comportement du réseau par téléchargement dynamique de nouveaux protocoles au sein des routeurs.

Mots clés : langage dédié, pilote de périphériques, réseaux actifs .

Résumé :

Les langages dédiés sont des langages restreints à un domaine ou une famille d'applications. Ils offrent un haut niveau d'abstraction sur le domaine considéré. Leurs avantages sont une programmation simplifiée, plus concise et plus rapide. Par ailleurs, les langages dédiés permettent la vérification statique de propriétés spécifiques au domaine considéré. Les langages dédiés permettent ainsi d'augmenter la qualité des programmes et la productivité des développements. Pour ces différentes raisons, les langages dédiés ouvrent des perspectives intéressantes pour le développement de systèmes d'exploitation. Au travers de plusieurs expérimentations, nous évaluons le bénéfice des langages dédiés dans le développement de systèmes [25].

Le développement de systèmes d'exploitation est reconnu comme une tâche complexe et sujette aux erreurs. Ainsi, il est fréquent de rencontrer de nombreux bugs dans les systèmes d'utilisation générale. Par ailleurs, dans des domaines comme les systèmes embarqués grand public, un court temps de développement est un facteur essentiel de succès commercial. En conséquence, développer du logiciel système fiable rapidement sans pour autant sacrifier la performance est un enjeu majeur pour de nombreux industriels.

Les langages dédiés sont des langages restreints à un domaine ou une famille d'applications. Ils offrent un haut niveau d'abstraction sur le domaine considéré. Leurs avantages sont une programmation simplifiée, plus concise et plus rapide. Par ailleurs, les langages dédiés permettent la vérification statique de propriétés spécifiques au domaine considéré. Les langages dédiés permettent ainsi d'augmenter la qualité des programmes et la productivité des développements. Pour ces différentes raisons, les langages dédiés ouvrent des perspectives intéressantes pour le développement de systèmes d'exploitation [25].

Nous avons proposé une méthodologie pour la conception de langages dédiés reposant sur une approche à deux niveaux [3]. Le premier niveau consiste à identifier les objets et opérations fondamentales du domaine d'applications, de manière à former une machine abstraite. Le second niveau consiste en la conception du langage même. Un programme dans ce langage dédié est implémenté via un interprète à l'aide des opérations de la machine abstraite définie au premier niveau. Cette structure en couche est très flexible, mais pose a priori des problèmes de performance. Grâce à l'utilisation systématique de l'évaluation partielle, il est possible de supprimer le surcoût de l'interprétation [17].

Notre méthodologie a été validée en premier lieu sur GAL [10], un langage dédié pour l'écriture de pilotes de cartes graphiques (voir module 5.5), et PLAN-P [9], un langage dédié pour l'écriture de protocoles dans les réseaux actifs (voir module 5.6). Ces deux langages nous ont permis de mettre en évidence les avantages que l'on attribue généralement aux langages dédiés : productivité accrue, programmation de haut niveau grâce à une plus grande abstraction, vérifications formelles facilitées. À titre d'exemple, le facteur de réduction en taille par rapport à un programme équivalent écrit en C est de 10 pour GAL et de 3 pour PLAN-P. GAL permet la vérification de propriétés sur les drivers comme le non-recouvrement de registres d'entrées/sorties. PLAN-P permet la vérification de propriétés telles que la terminaison des protocoles, la livraison et la non-duplication exponentielle des paquets. Enfin, les programmes écrits dans ces deux langages sont aussi performants que des programmes équivalents écrits en C.

Plus récemment, nous avons travaillé à la conception d'un nouveau langage généralisant les bénéfices de GAL à tout type de dispositif matériel. Le langage Devil permet une description en couches de l'interface d'un périphérique en séparant les différents niveaux d'abstractions (adresses, registres, fonctions logiques) rencontrés dans les circuits périphériques [24,26]. Grâce au typage fort du langage, il est possible de vérifier la correction de l'utilisation de chaque niveau d'abstraction par le niveau supérieur. En particulier, il est possible de vérifier la correction de l'utilisation de l'interface du périphérique par le programmeur d'un pilote. Nous avons validé la puissance d'expression du langage Devil en réussissant à spécifier la plupart des circuits périphériques utilisés dans un PC.

Enfin, dans le cadre de deux collaborations avec France Télécom (voir modules 7.5 et 7.6), nous étudions l'utilisation des langages dédiés pour réaliser le processus d'adaptation au sein de systèmes d'exploitation flexibles. Dans ce cadre, nous étudions des langages pour la programmation des caches Web [21] et l'ordonnancement des processus pour les applications multimédia.