Vérification automatique d'ordonnanceur de tâches
Auteur / Autrice : | Josselin Giet |
Direction : | Xavier Rival |
Type : | Projet de thèse |
Discipline(s) : | Informatique |
Date : | Inscription en doctorat le Soutenance le 26/09/2024 |
Etablissement(s) : | Université Paris sciences et lettres |
Ecole(s) doctorale(s) : | École doctorale Sciences mathématiques de Paris centre |
Partenaire(s) de recherche : | Laboratoire : DIENS - Département d'informatique de l'École normale supérieure |
Equipe de recherche : ANTIQUE | |
établissement opérateur d'inscription : Ecole normale supérieure | |
Jury : | Président / Présidente : Marc Pouzet |
Examinateurs / Examinatrices : Xavier Rival, Jean-Christophe Filliâtre, Arthur Charguéraud, Julia Lawall, Matthieu Lemerre | |
Rapporteurs / Rapporteuses : Jean-Christophe Filliâtre, Arthur Charguéraud |
Mots clés
Résumé
Le but de cette thèse est la vérification d'ordonnanceurs de tâches de systèmes d'exploitation par analyse statique basée sur l'interprétation abstraite. Les systèmes d'exploitation sont des ensembles de logiciels présents sur presque tout ordinateur. Leur but est de permettre aux autres programmes de s'exécuter sans avoir à gérer des spécificités bas niveau comme la mémoire. En conséquence de ce rôle central, les systèmes sont devenus des composants critiques des infrastructures informatiques : toute erreur au niveau du système d'exploitation peut avoir des répercussions sur les autres programmes allant jusqu'au plantage de l'ordinateur. Un des composants au cur d'un système d'exploitation est l'ordonnanceur de tâches. Ce dernier est chargé de déterminer quelle tâche peut s'exécuter à quel moment en suivant une politique préétablie. Les ordonnanceurs de tâches utilisent des structures de données dynamiques non bornées afin de stocker les éléments nécessaires à leur fonctionnement. Ces structures de données permettent de déplacer facilement les éléments d'une structure vers l'autre. Par conséquent, la vérification d'un ordonnanceur de tâche nécessite de concevoir une analyse capable de représenter correctement ces structures de données et leur contenu. La première partie de cette thèse décrit un langage impératif jouet semblable au C manipulant explicitement la mémoire. On donne ensuite la sémantique concrète de ce langage, puis on présente une analyse statique numérique afin de déterminer la plage de valeur des variables ainsi qu'une analyse de forme capable de raisonner sur des structures de données inductives non bornées. La seconde partie est consacrée à la présentation d'un domaine abstrait relationnel capable de raisonner sur des séquences symboliques. Ce domaine exprime des contraintes sur le contenu de ces séquences comme leurs longueurs, leurs valeurs extrémales et leurs caractères triés. La troisième partie présente la combinaison de l'analyse de forme présentée dans la première partie avec le domaine de séquences. Cette combinaison augmente l'expressivité de l'analyse. Cette dernière est maintenant capable de prouver la correction fonctionnelle partielle d'algorithmes complexes comme des algorithmes de tris sur les listes ou les arbres binaires, ainsi que sur des bibliothèques de listes provenant d'applications réelles. La dernière partie de cette thèse présente le travail d'application de l'analyse sur une instance de l'ordonnanceur de tâches de FreeRTOS. La première étape de la vérification est la formalisation des propriétés que nous cherchons à établir sur les fonctions de l'ordonnanceur. Cela inclut les invariants globaux de l'ordonnanceur. La seconde étape concerne le travail de validation pour montrer que ces propriétés spécifiées sont vérifiées par les fonctions de l'instance au moyen de l'analyse.