Réveillère, Laurent
Thèse de : Rennes 1
140 pages - 2001 - Document en français

Abstract : One of the goals of an operating system is to hide from the user the details of the various physical devices making up the underlying system. A software component that controls a device is known as a device driver. Device drivers represent an increasing proportion of operating system code, more than 70Linux. Nevertheless, although device drivers are a critical part of an operating system, the process of their development remains rudimentary and requires a high level of expertise. Indeed, a recent study shows that the propensity of device drivers to contain errors is up to seven times higher than the rest of the kernel. This thesis proposes a new approach to the development of device drivers that is based on domain-specific languages. A domain-specific language is a programming language dedicated to a particular domain or problem family. Such a language is usually declarative, and hides most of the implementation details from the programmer. A domain-specific language is mainly composed of specific abstractions and notations. Its restricted expressiveness facilitates the analysis of programs, and thus typically allows errors to be detected earlier in the production process. To illustrate our approach, we introduce a language, named Devil, targeted towards specifying the programming interface of a device. The processing of a Devil specification begins by its analysis to detect inconsistencies. The code necessary to implement the communication between the device and the driver is then automatically generated. This code can be generated in one of two forms, depending on whether error checking or run-time performance is favored. The contributions of this thesis are as follows: - We carry out a complete analysis of the domain of device drivers. Guided by the results of the domain analysis, we identify the input parameters of the design of a domain-specific language. - We present the design of a language, named Devil, for specifying the programming interface of a device. To validate the expressiveness of the language, we have used Devil to write specifications for a wide range of complex devices. - We describe a Devil compiler that generates C code that can be used in the Linux operating system. Performance experiments of three different kinds of drivers (disk controller, graphic card, and network card) show no significant performance penalty as compared to original C drivers. - We experimentally assess the robustness of drivers generated using the Devil approach. We show that nearly three times more errors are detected in a Devil-based driver than in the corresponding C-based driver. Beyond the domain of device drivers, the approach based on the use of domain-specific languages that we propose in this thesis opens up new possibilities for the development of the various components of an operating system.
Résumé : Un système d'exploitation a, entre autres, pour but de masquer à ses utilisateurs les spécificités des différents périphériques matériels sur lesquels il repose. Les applications qui contrôlent les périphériques sont appelées pilotes de périphériques. Ces logiciels ne cessent de prendre de l'importance et représentent désormais plus de 70que Linux. Toutefois, bien que ces applications soient des composants critiques, leur processus de développement est resté rudimentaire malgré le haut niveau d'expertise requis. Ainsi, une récente étude a montré que leur propension à contenir des bogues est jusqu'à sept fois plus importante que celles des autres composants d'un système d'exploitation. Cette thèse propose une nouvelle approche au développement des pilotes de périphériques basée sur les langages dédiés. Un langage dédié est un langage de programmation restreint à un domaine ou à un problème particulier. Il est souvent déclaratif et masque au programmeur une grande partie des détails d'implémentation. Un langage dédié est principalement constitué d'abstractions et de notations spécifiques. Son expressivité est restreinte, ce qui facilite l'analyse des programmes et permet ainsi de détecter les erreurs plus tôt dans le processus de production. Nous illustrons notre approche par l'introduction d'un langage dédié à la spécification d'interfaces de programmation de périphériques, nommé Devil. Le traitement d'une spécification Devil commence par son analyse afin de déceler d'éventuelles incohérences. Le code nécessaire pour implémenter la communication entre le périphérique et le pilote est ensuite généré automatiquement. Ce code se décline sous deux formes suivant que l'on désire privilégier les vérifications réalisées sur le pilote ou sa performance à l'exécution. Les contributions de cette thèse sont les suivantes : - Nous avons effectué une analyse complète du domaine des pilotes de périphériques. À partir des résultats de cette analyse, nous avons identifié les paramètres d'entrée à la conception d'un langage dédié. - Nous avons conçu un langage, nommé Devil, permettant de spécifier les interfaces de programmation de périphériques. Il a été utilisé pour écrire les spécifications de différents types de périphériques afin de valider la puissance d'expressivité du langage. - Nous avons développé un compilateur Devil générant du code C pour le système d'exploitation Linux. Nous avons évalué la performance à l'exécution de trois pilotes différents (contrôleur disque, carte graphique et carte réseau) et nous n'avons constaté aucune perte de performance significative. - Nous avons effectué des expérimentations afin de mesurer l'impact de notre approche sur la robustesse des pilotes. Cette étude nous a permis de montrer qu'environ trois fois plus d'erreurs sont détectées dans un pilote basé sur Devil que dans le pilote initial écrit en C. L'approche basée sur l'utilisation des langages dédiés que nous proposons dans cette thèse ouvre, au delà des pilotes de périphériques, de nouvelles perspectives quant au développement des différents composants d'un système d'exploitation.
Key-Words : DOMAIN-SPECIFIC LANGUAGES / DEVICE DRIVERS / SOFTWARE ENGINEERING