Vérification formelle d'une implémentation d'un gestionnaire de mémoire pour un compilateur certifié Tahina Ramananandro École normale supérieure Xavier.

Slides:



Advertisements
Présentations similaires
Structures de données et complexité
Advertisements

Le langage Z minimal Pr ZEGOUR DJAMEL EDDINE
Le langage Racket (Lisp)
Interprétation/Génération de code pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Seconde 8 Module 7 M. FELT 03/11/ Module 7: Algorithmique #2  Objectifs:  AlgoBox.  Définition d’un algorithme.  Affectation de variable. 
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
L'image: Le codage des images BacPro SEN Lycée Condorcet.
Développement à l'Aide de Langages Dynamiques : Smalltalk module IT308: Méthodologies et outils logiciels Nada Ayad, Damien Cassou et Annabelle Souc.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
D.Enselme : VARI-NFP 135 cours n°5 1 Chapitre 5 : conception de programmes Décomposition par raffinements successifs Décomposition itérative Décomposition.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
Les titres dans le mémoire
Introduction au Langage Pascal
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
03/02/2018.
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Quelques Termes INFORMATIQUE ? ORDINATEUR ( Système Informatique)?
Algorithmiques Abdelbasset KABOU
Logique Combinatoire.
Méthodologie 2e secondaire
Eléments d’Informatique Cours11 – Allocation dynamique, listes chaînées Catherine Recanati.
Pointeurs et langage C.
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Opérateurs Toute donnée informatique est stockée en mémoire sous la forme d'une combinaison de bits (mot machine). Les opérateurs bits permettent de modifier.
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
Résolution de grilles Slither Link
5 – PARALLELISME , ORDONNANCEMENT
Algorithmique Avancée et Complexité Chap2:Complexité et Optimalité
Javadoc et débogueur Semaine 03 Version A17.
AO (Architecture des ordinateurs)
Informatique et Sciences du Numérique
Techniques d’Optimisation Chapitre 2: Problème de flôt
Algorithmiques Abdelbasset KABOU
Information, Calcul, Communication
Buffer Overflow Anatomy of an exploit.
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
Programmation Numération Compétences visées Période
Un Algorithme , c'est Quoi ?
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Ce videoclip produit par l’Ecole Polytechnique Fédérale de Lausanne
République Algérienne Démocratique et Populaire Ministère de l'Enseignement Supérieur et de la Recherche Scientifique Université Saad.
Programmation système
Machines, algorithmes et langage
L E C ORPS D ’ UN A LGORITHME / P ROGRAMME – L A PARTIE I NSTRUCTION Réalisé par : OUZEGGANE Redouane Département de Technologie Faculté de Technologie.
Introduction à l’algorithmique. Introduction Algorithme: Procédure décrivant, étape par étape, une méthode permettant de résoudre un problème. Mot provenant.
Cours N°9: Algorithmiques Les Tableaux 1
Programmation en C++ C++ de base
1 RECURSIVITE PRESENTATION Ch. PAUL ALGORITHMIQUE Présentation de la récursivité.
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Type Concret – Type Abstrait
Plus de 4000 langages....
Architecture de machines Le microprocesseur Cours
LEGO MINDSTORMS EV3 Allez plus loin
Bus et adressage GIF-1001: Ordinateurs: Structure et Applications
Calcul Scientifique Initiation à SCILB
Outils et principes de base. Exemple d’application  Gestion de données d’enquête : Interface de saisie en ligne  insère directement les données dans.
Gestion de la mémoire GIF-1001 Ordinateurs: Structure et Applications, Hiver 2015 Jean-François Lalonde.
1 PROJET D’INFORMATIQUE les composants de l'ordinateur Gammoudi Rayéne 7 B 2.
Variable Neighborhood Descent (VND) Réalisée par Nadia Sassi Eya baghdedi AU
Le code de Huffman: est une méthode de compression statistique de données qui permet de réduire la longueur du codage d'un alphabet. Le code de Huffman.
ENSEIGNER L’ALGORITHMIQUE ET LA PROGRAMMATION AU COLLÈGE
BUFFER CIRCULAIRE Meryem EL BAKRI. PLAN Introduction Buffer circulaire Fonctionnement.
RABAH M ed Ali 2018/2019
1 Architecture des ordinateurs Généralités. 2 Définition Informatique = Information + Automatique Ce terme a été introduit en France. Il est très répandu.
Flowchart Itération Cours 04.
Piles et files.
Tableau de bord d’un système de recommandation
Structure de données Les listes.
Codification et représentation de l’information Enseignant: Mahseur mohammed Groupe FB: mi2016ua1 Chaine YT: Cours informatique.
Transcription de la présentation:

Vérification formelle d'une implémentation d'un gestionnaire de mémoire pour un compilateur certifié Tahina Ramananandro École normale supérieure Xavier Leroy Projet GALLIUM, INRIA Rocquencourt 19 février – 27 juillet 2007

Plan ● Contexte ● Modélisation de la mémoire ● Preuve du marquage ● Balayage et allocation ● Conclusion

Plan ● Contexte – Le compilateur CompCert – Gestionnaire de mémoire – GC ● Modélisation de la mémoire ● Preuve du marquage ● Nettoyage et allocation ● Conclusion

Le compilateur CompCert (1/2) ● Compilateur certifié – Sémantique code objet = sémantique code source – Développé en utilisant l'assistant de preuve Coq – Deux langages d'entrée : C (impératif) et MiniML (fonctionnel) – Un langage de sortie : assembleur PowerPC gestionnaire de mémoire

Le compilateur CompCert (2/2) ● Gestionnaire de mémoire = code Cminor à rajouter au programme MiniML compilé

Gestionnaire de mémoire ● Allocateur et mutateur liste 18::42::nil allocateur mutateur allocateur mutateur

GC (1/3) ● Mémoire finie ● Pas de libération a priori – Objets inaccessibles encore en mémoire – Comment les retrouver et les libérer ? ● Adjoindre un GC (garbage collector, ramasse- miettes) à l'allocateur – L'allocateur essaie de trouver un espace libre – Si échec, le GC libère les espaces occupés par les objets inaccessibles

GC (2/3) ● Deux grandes familles – Mark and sweep – Stop and copy ● Problème : peuvent monopoliser le temps d'exécution ● Raffinements possibles – Incrémentaux – Concurrents

GC (3/3) ● Marquage 3 couleurs avec cache ● Nettoyage avec coalescence des blocs libres adjacents

Plan ● Contexte ● Modélisation de la mémoire – Tas – Racines – Chemin ● Preuve du marquage ● Nettoyage et allocation ● Conclusion

Modélisation du tas ● En-tête et contenu ● Coq : entiers 32 bits – objets adjacents – conditions d'ordre

Modélisation des racines ● Objets racine = visibles dans le scope – Variables locales, globales, pile d'exécution ● Objets eux-mêmes dans le tas ● Pointeurs stockés à des endroits spéciaux – liste de listes de racines

Chemin dans la mémoire ● Quelle liste de racine, quelle racine, quels objets fils successivement – Objet utilisé = accessible à partir des racines ● Chemins doivent être préservés par le GC – mark and sweep : exactement – stop and copy : à isomorphisme près ● Idée : dissocier chemin et son interprétation – plusieurs interprétations possibles pour les raisonnements locaux ou les abstractions

Plan ● Contexte ● Modélisation de la mémoire ● Preuve du marquage – Présentation de la preuve – Code Cminor, algo concret Coq, algo abstrait – Preuve de l'algorithme abstrait – Abstraction de la mémoire – Preuve de l'abstraction ● Nettoyage et allocation ● Conclusion

Présentation de la preuve de marquage (1/2) ● Algorithme – Marquer en gris les objets racine – Tant qu'il y a des objets gris : ● en prendre un, le marquer en noir ● marquer en gris tous ses enfants non encore marqués ● Avec cache : – chaque objet gris empilé en cache ● recherche d'un objet gris = dépiler le cache – cache borné ● indicateur si le cache a été en overflow au moins une fois ● dans ce cas, si cache vide, rechercher un objet gris dans le tas

Présentation de la preuve de marquage ● Montrer que l'algorithme marque en noir tous les objets accessibles et eux seulement ● Prouver ce théorème sur un algorithme abstrait – représentation abstraite de la mémoire – suppose les structures tas et racines fixées ● Puis prouver la relation d'abstraction pour chaque étape du marquage

Code Cminor, algo concret Coq et algo abstrait ● Trois niveaux d'abstraction pour les algorithmes – code Cminor – algorithme concret Coq, manipulant la mémoire – algorithme abstrait, sur des structures abstraites (graphes, fonctions...) ● Code Cminor et algorithmes concrets – Prouver qu'ils mènent à la même mémoire – Preuve facile mais Coq inadapté ● Algorithmes concrets et abstraits – Raisonnements bcp plus poussés

Preuve de l'algorithme abstrait ● Montrer l'invariant tricolore : aucun objet noir ne pointe vers un objet blanc ● Preuve courante dans les preuves de GC sur papier – Néglige les structures tas et racines considérées comme inchangées

Abstraction de la mémoire ● État abstrait : – liste des objets du tas et de leurs fils – fonction de coloration des objets du tas – liste des objets du cache ● État concret : mémoire ● Relation d'abstraction – tas bien formé – couleurs lues dans les en-têtes des objets du tas – cache lu comme une liste de pointeurs

Preuve de l'abstraction ● Prouver que la relation d'abstraction est conservée par chaque étape du marquage – Structures tas racines abstraites vers le même état – Couleurs et cache lus comme dans l'algo abstrait ● Briques de base : – marquage en gris (avec mise en cache) – marquage en noir (une seule opération) ● Autres opérations : boucles fondées sur ces briques de base – pas d'écriture en dehors de ces briques

Plan ● Contexte ● Modélisation de la mémoire ● Preuve du marquage ● Balayage et allocation – Algorithmes «duaux» – Problèmes de raisonnement ● Conclusion

Balayage et allocation : algos duaux ● Balayage avec coalescence des objets libres – À partir de la coloration obtenue par marquage, ajouter les objets blancs = libres à la liste des objets libres – si deux objets libres consécutifs, les fusionner ● Allocation – Parcourir la liste des objets libres jusqu'à trouver un objet de taille suffisante – Le scinder en deux ● Raisonnement dual fusion/scission

Problèmes de raisonnement ● Tailles variables -> coalescence – Maintenir les objets adjacents, le tas bien formé – Et les objets vides ? Bogues possibles ! ● Problèmes arithmétiques – Ordre sur les adresses des objets du tas – Stockage des tailles dans les en-têtes – Entiers 32 bits, manque théorèmes en bibliothèque reliant ordre et représentation binaire machine (bit de signe)

Plan ● Contexte ● Modélisation de la mémoire ● Preuve du marquage ● Balayage et allocation ● Conclusion – Bilan – Problèmes rencontrés – Travaux connexes – Perspectives

Bilan Nombre de lignes de code Coq (ordre de grandeur)

Problèmes rencontrés ● Coq – Validation des preuves longue voire boucle – Nécessite d'adapter les spécifications ● structure de boucle générique au lieu de fonctions récursives sur des entiers naturels ! ● Arithmétique des entiers 32 bits machine – Prouver les écritures et lectures à des endroits différents – Entiers 32 bits machine, peu de théorèmes reliant ordre et opérations – Pas d'automatisation (omega...) ● Logique de séparation n'aide guère – Approche axiomatique, théorèmes déjà présents dans le modèle mémoire CompCert

Travaux connexes ● Coupet-Grimal, Nouvet (2003) – GC incrémental formalisé et prouvé en Coq – Algorithme abstrait ● McCreight, Shao, Lin, Li (2007) – Différents GC (mark & sweep, stop & copy, etc.) formalisés et prouvés en Coq – Langage machine : implémentation plus bas niveau ● avec entiers naturels au lieu d'entiers machine – Interface GC/mutateur ● Doligez (1995) – GC concurrent (parallèle avec le mutateur) – Non Coq, mais TLA+ – Algorithme abstrait

Perspectives ● Preuves balayage et allocation – améliorer/automatiser raisonnement entiers 32 bits ● Raisonnement sur les programmes en Cminor – Outils type Caduceus – Extraction depuis les algorithmes concrets Coq ● fragment monadique (cf. Tolmach) ● Autres preuves – Stop & copy, GC incrémentaux, concurrents – Interface GC/mutateur – Autres composants des environnements d'exécution : threading, machines virtuelles...

Merci de votre attention ! ● Pour toute question, merci de contacter : – Tahina Ramananandro – Xavier Leroy ● Sources Coq bientôt disponibles sur le Web –