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.