Automatic verification of tasks schedulers
Vérification automatique d’ordonnanceurs de tâches
Résumé
The aim of this thesis is the verification of task schedulers for operating systems through static analysis based on abstract
interpretation. Operating systems are collections of software present on almost every computer. Their purpose is to allow
other programs to run without having to manage low-level problems such as memory. Due to this central role, operating
systems have become critical components of IT infrastructures: any error in the operating system can have consequences
on other programs, potentially causing the entire computer to crash.
One component at the core of an operating system is the task scheduler. This component is responsible for determining,
according to a predefined policy, which task can execute at what time. These components use unbounded dynamic data
structures to store the necessary elements for their operation. These data structures allow elements to be easily moved
between them. Verifying a task scheduler requires designing an analysis capable of accurately representing these data
structures and their contents.
The first part of this thesis describes a toy imperative language that explicitly manipulates memory. We then provide the
concrete semantics of this language, followed by a presentation of a numerical static analysis to determine the range of
numerical variables and a shape analysis capable of reasoning about unbounded inductive data structures.
The second part is devoted to presenting a relational abstract domain capable of reasoning about symbolic sequences.
This domain expresses constraints on the contents of these sequences, such as their lengths, extreme values, and sorted
characteristics.
The third part presents the combination of the shape analysis described in the first part with the sequence domain. This
combination enhances the expressiveness of the analysis. It is now capable of proving the partial functional correctness of
complex algorithms, such as sorting algorithms on lists or binary trees, as well as list libraries drawn from real applications.
The final part of this thesis presents the application of the analysis to an instance of the FreeRTOS task scheduler. The
first step in the verification process is formalizing the properties we seek to establish on the scheduler’s functions. The
second step aims to show that the specified properties are verified by the instance’s functions using the analysis.
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 conséquences sur les
autres programmes allant jusqu’au plantage de l’ordinateur.
Un des composants au cœur d’un système d’exploitation est l’ordonnanceur de tâches. Ce dernier est chargé de déter-
miner 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 fonction-
nement. 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 cor-
rectement 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 concret de ce langage, puis on présente une analyse statique numérique afin de déter-
miner 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.
Origine | Fichiers produits par l'(les) auteur(s) |
---|---|
licence |