Participants : Charles Consel,
Renaud Marlet, Gilles Muller, 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 [23].
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 [23]. Nous avons proposé une méthodologie pour
la conception de langages dédiés reposant sur une approche à
deux niveaux [4]. 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 [TBC+98]. Notre méthodologie a été validée en
premier lieu sur Gal [18], un langage dédié pour l'écriture de
pilotes de cartes graphiques (voir module 5.4), et
Plan-P [26], un langage dédié pour l'écriture de
protocoles dans les réseaux actifs (voir module 5.5). 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 [9,18,26]. 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 [29]. 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
réflexifs.