Vérification de Machines Abstraites pour les Systèmes d’Exploitation – VeriAMOS
Verified Abstract Machines for Operating Systems
Verified Abstract Machines for Operating Systems
Objectifs
Le projet VeriAMOS a pour but d'investiguer l'utilisation de langages dédiés et d'analyseurs statiques afin de vérifier des propriétés fonctionnelles et de robustesse sur des classes de composants de systèmes d'exploitation comme des ordonnanceurs d'entrées/sorties. En effet, et même si le code des systèmes d'exploitation est généralement très complexe et peu adapté à l'utilisation de méthodes de vérification systématiques, certains parties de leur code relève d'une structure plus systématique, qui ouvre la possibilité à l'utilisation de techniques d'abstraction. À titre d'exemple, les ordonnanceurs reposent sur des politiques qui font intervenir des éléments communs comme des structures définissant des collections de tâches ou des opérations similaires comme le traitement d'une tâche. Tout d'abord, les langages dédiés permettent de formuler à un plus haut niveau d'abstraction les interfaces et algorithmes de tels composants. De même, les outils d'analyse statique peuvent être optimisés afin de traiter avec précision un ensemble de programmes présentant de telles similarités. Le projet VeriAMOS vise donc à appliquer ces techniques à une nouvelle famille de codes d'ordonnancement concernant les entrées/sorties vers SSD.
Les techniques utilisées dans le cadre du projet reposent sur les méthodes suivantes :
- les langages dédiés permettent d'exprimer de manière plus concise des algorithmes spécifiques à certaines tâches comme les ordonnanceurs;
- l'analyse statique de forme des structures de données a pour but de calculer de manière statique (sans exécution) des informations sur des structures dynamiques manipulées par des programmes, comme des listes ou des arbres.
Le projet a permis d'étudier la combinaison de ces deux approches.
Le projet VeriAMOS a débouché sur les résultats suivants :
- une définition d'une machine abstraite permettant la compilation d'un langage dédié conçu pour la vérification de propriétés d'ordonnanceurs ;
- le développement de domaines abstraits pour la mémoire permettant d'exprimer des relations partielles et donc des analyses à la fois relativement précises et rapides ;
- l'amélioration de l'analyseur statique MemCAD, avec en particulier l'ajout d'un support pour des domaines abstraits de séquences, permettant la preuve automatique de propriétés fonctionnelles ;
- l'application de méthodes de preuve interactives à la vérification de logiciel système ;
- l'étude de la vérification de propriétés fonctionnelles sur un micro-noyau.
Les résultats du projet VeriAMOS ouvrent la voie à de nouveaux travaux en analyse statique en vérification de logiciels système :
- amélioration d'abstractions pour la mémoire et les valeurs numériques ;
- travaux associant preuve automatique et assistée ;
- application de techniques de preuve automatiques à la vérification de propriétés fonctionnelles sur du code système.
Les Systèmes d'Exploitation généralistes comme Linux sont de plus en
plus utilisés dasn des systèmes embarqués critiques, dans
l'automobile, le secteur médical et les systèmes cyber-physiques.
Toutefois, il es bien connu que les OS généralistes sont vulnérables
aux bugs. Récemment, de grands progrès ont été effectués dans la
vérification de noyaux d'OS, principalement à l'aide de méthodes
reposant sur des assistants de preuve interactifs. Toutefois, ces
techniques entraînent un coût énorme lié au temps nécessaire pour les
preuves non seulement lors de la conception et de l'implémentation,
mais aussi lors de la maintenance et de l'extension des OS. Par
conséquent, le passage à l'échelle de la vérification d'OS reste un
objectif difficile.
Une autre solution qui n'a pas été déployée sur des OS est l'analyse
statique automatisée de programmes. Un outil d'analyse statique
calcule des invariants de programmes et propriétés sémantiques sans
aide de l'utilisateur. Ces outils sont fondés sur des abstractions
décrivant les propriétés nécessaires pour exprimer des invariants et
de algorithmes permettant de les calculer. Bien que corrects, les
analyseurs statiques sont incomplets: autrement dit, ils peuvent
échouer à prouver un programme valide, et le considérer de manière
conservative "potentiellement incorrect". Les strutures de données
complexes, opérations bas-niveau et aspects concurrents des codes OS
aggravent les difficultés inhérentes à ces méthodes dans le cas des
OS.
Le projet VeriAMOS réunit des experts en analyse statique, systèmes
d'exploitation et langages dédiés, à INRIA, Sorbonne Université et à
l'Université de Grenoble, afin de développer une nouvelle solution à
la vérification de services systèmes, fondée sur l'utilisation de
langages dédiés et d'analyseurs statiques. Un langage dédié est un
langage reposant sur des abstractions spécifiques à une famille de
programme, et permet ainsi aux programmeur d'implanter une classe
spécifique d'algorithmes à un niveau plus abstrait et reposant sur un
compilateur pour générer le code final. En limitant l'expressivité,
ces langages contraignent les développeurs et empêchent la mauvaise
utilisation de fonctions des langages de programmation. L'idée
fondatrice du projet VeriAMOS est qu'en augmentant le niveau
d'abstraction et en limitant la variabilité des programmes, les
langages dédiés peuvent rendre possible la vérification automatique de
propriétés de correction importantes, sur des services systèmes réels.
Pour démontrer la faisabilité de cette solution, le projet VeriAMOS
considérera les séquenceurs d'entrées/sorties (I/O). Ces dernières
années de nouveaux et complexes séquenceurs I/O ont été introduits
pour tirer parti des SSDs, qui offrent des performances bien
meilleures que les disques classiques, et sont plus adaptées aux
systèmes embarqués du fait de leur résistance aux chocs. VeriAMOS a
pour ambition de vérifier des propriétés critiques des séquenceurs
I/O, comme la non corruption des requêtes et l'absence de famine. Les
défis principaux sont la conception, l'automatisation et la mise en
oeuvre des abstractions sous-jacentes à l'analyse statique et à la
définition d'un langage dédié haut niveau et expressif, garantissant
la génération de politiques de séquencement prouvablement correctes.
Pour surmonter ces défis, VeriAMOS développera une synergie entre les
domaines de l'analyse statique, des langages dédiés et des systèmes
d'exploitation.
Bien que le projet VeriAMOS se concentre sur le domaine des
séquenceurs entrées~/~sorties, nous sommes confiants que ce travail
ouvrira la route à de grands progrès dans l'automatisation de la
vérification de service systèmes. À long terme, tous les développeurs
systèmes pourront ainsi réaliser des services critiques entièrement
vérifiés, et non seulement quelques experts en preuve.
Coordination du projet
Xavier Rival (Institut national de recherche en informatique et en automatique)
L'auteur de ce résumé est le coordinateur du projet, qui est responsable du contenu de ce résumé. L'ANR décline par conséquent toute responsabilité quant à son contenu.
Partenariat
LIP6 Laboratoire d'informatique de Paris 6
Inria Paris Institut national de recherche en informatique et en automatique
LIG Laboratoire d'Informatique de Grenoble
Aide de l'ANR 408 959 euros
Début et durée du projet scientifique :
janvier 2019
- 48 Mois