Vérification formelle d un modèle mémoire pour le langage C



Documents pareils
Vérification formelle de la plate-forme Java Card

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Traduction des Langages : Le Compilateur Micro Java

Cours 1 : La compilation

UE Programmation Impérative Licence 2ème Année

Chapitre VI- La validation de la composition.

La technologie Java Card TM

Classes et Objets en Ocaml.

OCL - Object Constraint Language

Évaluation et implémentation des langages

Programmer en JAVA. par Tama

Compilation (INF 564)

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Génie Logiciel avec Ada. 4 février 2013

Conventions d écriture et outils de mise au point

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

Rappels d architecture

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Analyse de sécurité de logiciels système par typage statique

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Machines virtuelles Cours 1 : Introduction

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Chapitre 1 : La gestion dynamique de la mémoire

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

1 Définition et premières propriétés des congruences

Université de Bangui. Modélisons en UML

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

Sélection du contrôleur

Processus d Informatisation

Structurer ses données : les tableaux. Introduction à la programmation

La Certification de la Sécurité des Automatismes de METEOR

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

IFT2255 : Génie logiciel

Logiciel de base. Première année ENSIMAG

Généralités sur le Langage Java et éléments syntaxiques.

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Théorie de la Programmation

Conception des systèmes répartis

Algorithmique des Systèmes Répartis Protocoles de Communications

Algorithmique et Programmation Fonctionnelle

Programmation C. Apprendre à développer des programmes simples dans le langage C

Urbanisation des Systèmes d Information Architecture d Entreprise. 04 Architecture du SI : identifier et décrire les services, structurer le SI

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

TP1 : Initiation à Java et Eclipse

Gestion mémoire et Représentation intermédiaire

UML (Diagramme de classes) Unified Modeling Language

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

Calculabilité Cours 3 : Problèmes non-calculables.

Cours Composant 2. Qualité logicielle et spécications algébriques

Rappels Entrées -Sorties

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

as Architecture des Systèmes d Information

Objets et Programmation. origine des langages orientés-objet

Métriques de performance pour les algorithmes et programmes parallèles

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

REALISATION d'un. ORDONNANCEUR à ECHEANCES

MEMOIRE. Présenté à. L École Nationale d Ingénieurs de Sfax. en vue de l obtention du MASTERE

Analyse,, Conception des Systèmes Informatiques

Programmation en Java IUT GEII (MC-II1) 1

Conditions : stage indemnisé, aide au logement possible, transport CEA en Ile-de-France gratuit.

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Plan du cours. Historique du langage Nouveautés de Java 7

Pour chaque projet est indiqué son titre, le ou les laboratoires participants ainsi que le coordinateur

Cours Informatique 1. Monsieur SADOUNI Salheddine

Démarches d urbanisation : réorganiser le Système d Information en structurant ses fonctions dans des blocs fonctionnels communicants.

Développement itératif, évolutif et agile

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

ASR1 TD7 : Un microprocesseur RISC 16 bits

Jeu d instructions NIOS II

Partie 7 : Gestion de la mémoire

LES TYPES DE DONNÉES DU LANGAGE PASCAL

IV- Comment fonctionne un ordinateur?

Introduction à MATLAB R

Cours de Programmation 2

Rappels et compléments, première partie : Nombres complexes et applications à la géométrie

Plan du cours Cours théoriques. 29 septembre 2014

PROJET ALGORITHMIQUE ET PROGRAMMATION II

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

RTDS G3. Emmanuel Gaudin

Principes des langages de programmation INF 321. Eric Goubault

Résumé CONCEPTEUR, INTEGRATEUR, OPERATEUR DE SYSTEMES CRITIQUES

Diagramme de classes

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Iyad Alshabani SysCom - CReSTIC Université de Reims 17/02/2011 1

Architecture d'entreprise : Guide Pratique de l'architecture Logique

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Cours d initiation à la programmation en C++ Johann Cuenin

Cycle de vie du logiciel. Unified Modeling Language UML. UML: définition. Développement Logiciel. Salima Hassas. Unified Modeling Language

Transcription:

Vérification formelle d un modèle mémoire pour le langage C Projet ANR ARA SSIA CompCert (http://compcert.inria.fr) Sandrine Blazy, Xavier Leroy CEDRIC-ENSIIE et INRIA Rocquencourt CEA-LIST, 18 mars 2008 S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 1 / 51

Plan 1 Vérification formelle de compilateurs 2 Modèle mémoire Modèle abstrait Modèle concret 3 Transformations de programmes opérant sur la mémoire 4 Conclusion S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 2 / 51

Faites-vous confiance à votre compilateur? Programme source Vérification formelle équivalence observationnelle Compilateur Code machine exécutable Compilateur formellement vérifié : Garantit que le code produit se comporte comme prescrit par la sémantique du programme source. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 3 / 51

La vérification formelle de compilateurs Appliquer les méthodes formelles au compilateur lui-même pour établir un théorème de préservation sémantique : Théorème Pour tous les codes source S, si le compilateur transforme S en le code machine C, sans signaler d erreur de compilation, et si S a une sémantique bien définie, alors C a la même sémantique que S à équivalence observationnelle près. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 4 / 51

Le projet CompCert ANR SSIA (2005-2008) Développement d un compilateur réaliste, formellement vérifié et utilisable dans l embarqué. Langage source : un vaste sous-ensemble de C (pas d instruction de saut). Langage cible : assembleur Power PC. Le compilateur effectue quelques optimisations. Vérification formelle en Coq. Les parties vérifiées du compilateur sont programmées directement dans le langage de spécification de Coq, dans un style fonctionnel pur. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 5 / 51

Architecture du compilateur CompCert S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 6 / 51

Architecture du compilateur CompCert S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 6 / 51

Architecture du compilateur CompCert S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 6 / 51

Méthodologie Découpage du compilateur en passes de transformations successives, chacune étant certifiée. Nécessite des sémantiques formelles pour les 10 langages du compilateur. Le modèle mémoire est commun à tous les langages du compilateur. Chaque passe peut être soit certifiée directement, soit effectuée par du code non certifié + vérification des résultats par un vérificateur certifié. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 8 / 51

Plan 1 Vérification formelle de compilateurs 2 Modèle mémoire Modèle abstrait Modèle concret 3 Transformations de programmes opérant sur la mémoire 4 Conclusion S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 9 / 51

Modèle mémoire (généralités) But : définir la géographie de la mémoire, les opérations de gestion (lire, écrire, allouer, libérer), et leurs propriétés. Caractéristiques : généricité séparation en blocs indépendants de taille variable existence d une valeur indéfinie tests aux bornes des blocs adapté à la preuve sur machine S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 10 / 51

Un modèle mémoire pour C (niveau d abstraction) Quel niveau d abstraction? Trop concret (tableau d octets) : Les propriétés attendues ne sont pas exprimables (par ex., séparation de zones). Ne permet pas de raisonner sur la mémoire. Trop abstrait (collection de blocs disjoints) : Ne permet pas de définir l arithmétique de pointeurs. Les sémantiques deviennent incorrectes. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 11 / 51

Un modèle mémoire pour C (niveau d abstraction) Quel niveau d abstraction? Besoins antagonistes : pointeurs et arithmétique de pointeurs chevauchemement partiel de zones référencées par deux pointeurs garanties d isolation et de fraîcheur séparation des zones de la mémoire correspondant à 2 appels successifs à malloc Certaines passes du compilateur effectuent des transformations des blocs de mémoire non triviales, nécessitant de raisonner sur la mémoire. Plusieurs niveaux d abstraction S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 11 / 51

Un modèle mémoire pour C (niveau d abstraction) Quel niveau d abstraction? Besoins antagonistes : pointeurs et arithmétique de pointeurs chevauchemement partiel de zones référencées par deux pointeurs garanties d isolation et de fraîcheur séparation des zones de la mémoire correspondant à 2 appels successifs à malloc Certaines passes du compilateur effectuent des transformations des blocs de mémoire non triviales, nécessitant de raisonner sur la mémoire. Plusieurs niveaux d abstraction S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 11 / 51

Paramètres du modèle mémoire Valeurs et types des données stockées en mémoire val ::= int(n) float(f) ptr(b, ofs) undef undef val memtype::= int8signed int8unsigned int16signed int16unsigned int32 float32 float64 Utile pour la lecture ou l écriture d une donnée en mémoire (τ) : taille τ et alignement τ τ = sizeof(τ) τ = 1 garantie de compatibilité entre une écriture et une lecture ultérieure S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 12 / 51

Paramètres du modèle mémoire Valeurs et types des données stockées en mémoire val ::= int(n) float(f) ptr(b, ofs) undef undef val memtype::= int8signed int8unsigned int16signed int16unsigned int32 float32 float64 Utile pour la lecture ou l écriture d une donnée en mémoire (τ) : taille τ et alignement τ τ = sizeof(τ) τ = 1 garantie de compatibilité entre une écriture et une lecture ultérieure S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 12 / 51

Paramètres du modèle mémoire Valeurs et types des données stockées en mémoire val ::= int(n) float(f) ptr(b, ofs) undef undef val memtype::= int8signed int8unsigned int16signed int16unsigned int32 float32 float64 Utile pour la lecture ou l écriture d une donnée en mémoire (τ) : taille τ et alignement τ τ = sizeof(τ) τ = 1 garantie de compatibilité entre une écriture et une lecture ultérieure S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 12 / 51

Paramètres du modèle mémoire Valeurs et types des données stockées en mémoire val ::= int(n) float(f) ptr(b, ofs) undef undef val memtype::= int8signed int8unsigned int16signed int16unsigned int32 float32 float64 Utile pour la lecture ou l écriture d une donnée en mémoire (τ) : taille τ et alignement τ τ = sizeof(τ) τ = 1 garantie de compatibilité entre une écriture et une lecture ultérieure S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 12 / 51

Séquences de lectures et écritures compatibles Exemple de séquence écriture-lecture union { int i ; float f ; } u ; float x ;... u.i = 8 ; x = u.f ;... Standard C : comportement indéfini Compcert : l écriture d une donnée de type τ ne peut être suivie que d une lecture d une donnée d un type τ compatible avec τ (τ τ ). Axiomes τ τ si τ 1 τ 2, alors τ 1 = τ 2 et τ 1 = τ 2 S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 14 / 51

Niveaux d abstraction Modèle abstrait (Coq) géographie de la mémoire non définie axiomatisation des opérations de gestion de la mémoire autres axiomes Raffinement 1 (Coq) davantage d axiomes lemmes (dérivés) Raffinement 2 (Coq) Toutes les abstractions sont définies. Tous les axiomes sont prouvés. Implémentation (Caml) S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 15 / 51

Modèle abstrait Non définis : mem, block, memtype, val, empty : mem Définition intuitive de la mémoire La mémoire est une collection de blocs séparés. Chaque bloc se comporte comme un tableau d octets. Une adresse est un couple (b, i). S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 17 / 51

Opérations de gestion de la mémoire Définition abstraite alloc : mem Z Z option (block mem) free : mem block option mem load : memtype mem block Z option val store : memtype mem block Z val option mem Une valeur option (t) est soit ɛ (échec), soit x (succès produisant le résultat x : t). S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 18 / 51

Opérations de gestion de la mémoire Propriétés abstraites Propriétés de bonne formation des variables Si alloc(m, l, h) = b, m et b b, alors load(τ, m, b, i) = load(τ, m, b, i) Si free(m, b) = m et b b, alors load(τ, m, b, i) = load(τ, m, b, i) Si store(τ, m, b, i, v) = m et τ τ, alors load(τ, m, b, i) = convert(v, τ ) Si store(τ, m, b, i, v) = m et b b i + τ i i+ τ i, et load(τ, m, b, i ) = load(τ, m, b, i ) load n est pas complètement spécifiée (cf. standard C). S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 19 / 51

Validité des blocs en mémoire Propriétés abstraites Définition intuitive m = b b est valide dans m si b a été alloué dans m mais pas encore libéré. Axiomatisation de la relation de validité Si alloc(m, l, h) = b, m, alors (m = b). Si alloc(m, l, h) = b, m, alors m = b b = b m = b. Si store(τ, m, b, i, v) = m, alors m = b m = b. Si free(m, b) = m et b b, alors m = b m = b. Si m = b, alors il existe m tel que free(m, b) = m. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 20 / 51

Bornes des blocs de mémoire Propriétés abstraites Bornes d un bloc B(m, b) = [l, h[ Axiomatisation de la fonction B Si alloc(m, l, h) = b, m, alors B(m, b) = [l, h[. Si alloc(m, l, h) = b, m et b b, alors B(m, b ) = B(m, b ). Si store(τ, m, b, i, v) = m, alors B(m, b ) = B(m, b ). Si free(m, b) = m et b b, alors B(m, b ) = B(m, b ). S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 21 / 51

Accès valides aux blocs de mémoire Propriétés abstraites m = τ @ b, i m = b τ divise i L(m, b) i i+ τ H(m, b) Axiomatisation de la relation de validité Si m = τ @ b, i alors il existe m tel que store(τ, m, b, i, v) = m. Propriétés dérivées Si alloc(m, l, h) = b, m et τ divise i et l i et i+ τ h, alors m = τ @ b, i. Si alloc(m, l, h) = b, m et m = τ @ b, i, alors m = τ @ b, i. Si store(τ, m, b, i, v) = m, alors m = τ @ b, i m = τ @ b, i. Si free(m, b) = m et b b, alors m = τ @ b, i m = τ @ b, i. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 22 / 51

Exemple d utilisation des propriétés Preuve de programmes int * x = malloc(2 * sizeof(int)) ; int * y = malloc(sizeof(int)) ; x[0] = 0 ; x[1] = 1 ; *y = x[0] ; x[0] = x[1] ; x[1] = *y ; S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 24 / 51

Exemple d utilisation des propriétés Preuve de programmes int *x= malloc(2*sizeof(int)) ; int *y= malloc(sizeof(int)) ; x[0] = 0 ; x[1] = 1 ; *y = x[0] ; x[0] = x[1] ; x[1] = *y ; (x,m) = alloc(m, 0, 8) ; (y,m) = alloc(m, 0, 4) ; m = store(int, x, 0, 0) ; m = store(int, x, 4, 1) ; t = load(int, x, 0) ; m = store(int, y, 0, t) ; t = load(int, x, 4) ; m = store(int, x, 0, t) ; t = load(int, y, 0) ; m = store(int, x, 4, t) ; S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 26 / 51

Exemple d utilisation des propriétés Preuve de programmes Notation P : x y, m = x, m = y. (x, m) = alloc(m, 0, 8) ; m = x (y, m) = alloc(m, 0, 4) ; P m = store(int, x, 0, 0) ; P, load(m, x, 0) = 0 m = store(int, x, 4, 1) ; P,... = 0, load(m, x, 4) = 1 t = load(int, x, 0) ; P,... = 0,... = 1, t = 0 m = store(int, y, 0, t) ; P,... = 0,... = 1, load(m, y, 0) = 0 t = load(int, x, 4) ; P,... = 0,... = 1, load(m, y, 0) = 0, t = 1 m = store(int, x, 0, t) ; P,... = 1,... = 1, load(m, y, 0) = 0 t = load(int, y, 0) ; P,... = 1,... = 1, load(m, y, 0) = 0, t = 0 m = store(int, x, 4, t) ; P,... = 1,... = 0, load(m, y, 0) = 0 S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 28 / 51

Modèle concret Géographie de la mémoire block = N État mémoire mem = (N, B, F, C) N : block 1 er bloc non encore alloué B : block Z Z F : block boolean bornes bloc libéré (true) ou non (false) C : block Z option (memtype val) contenu de chaque adresse : (b, i) ɛ signifie invalide, τ, v : v a été écrite à cette adresse, avec un type τ. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 29 / 51

Modèle concret (suite) Soit m = (N, B, F, C). Validité d un bloc b < N F (b) = false Bornes d un bloc m = b B(m, b) = B(b) État mémoire initial empty = (0, λb. [0, 0[, λb. false, λb.λi. ɛ) empty Allocation alloc(m, l, h) si can_allocate(m, h l) alors b, m sinon ɛ avec b = N et m = (N + 1, B{b [l, h[}, F {b false}, C{b λi. ɛ}) S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 30 / 51

Modèle concret Soit m = (N, B, F, C). Libération free(m, b) si non m = b alors ɛ sinon N, B{b [0, 0[}, F {b true}, C Écriture store(τ, m, b, i, v) si non m = τ @ b, i alors ɛ sinon N, B, F, C{b c } avec c = C(b){i τ, v, i + 1 ɛ,..., i+ τ 1 ɛ} Lecture load(τ, m, b, i) si non m = τ @ b, i alors ɛ sinon si C(b)(i) = τ, v et τ τ et C(b)(i + j) = ɛ pour tout j = 1,..., τ 1 alors convert(v, τ) sinon undef S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 31 / 51

Propriétés supplémentaires du modèle concret m = τ @ b, i m, store(τ, m, b, i, v) = m m = τ @ b, i v, load(τ, m, b, i) = v Si alloc(m, l, h) = b, m et load(τ, m, b, i) = v, alors v = undef. Si store(τ, m, b, i, v) = m et τ τ et load(τ, m, b, i) = v, alors v = undef. Si store(τ, m, b, i, v) = m et i i et i + τ > i et i+ τ > i et load(τ, m, b, i ) = v, alors v = undef. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 32 / 51

Propriétés supplémentaires du modèle concret Si store(τ, m, b, i, v) = m et m = τ @ b, i, alors un seul des 4 cas suivants se produit : Compatible : b = b et i = i et τ τ, auquel cas load(τ, m, b, i ) = convert(v, τ ). Incompatible : b = b et i = i et τ τ, auquel cas load(τ, m, b, i ) = undef. Disjoint : b b or i + τ i ou i+ τ i, auquel cas load(τ, m, b, i ) = load(τ, m, b, i ). Chevauchement : b = b et i i et i + τ > i et i+ τ > i, auquel cas load(τ, m, b, i ) = undef. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 33 / 51

Relation de fraîcheur Fraîcheur d un bloc b N pour m = (N, B, F, C) m # b m # b et m = b sont mutuellement exclusives. Si alloc(m, l, h) = b, m, alors m # b. Si alloc(m, l, h) = b, m, alors m # b b b m # b. Si store(τ, m, b, i, v) = m, alors m # b m # b. Si free(m, b) = m, alors m # b m # b. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 34 / 51

Comparaison de mémoires Domaine Dom(m 1 ) = Dom(m 2 ) b, (m 1 # b m 2 # b) Si alloc(m 1, l, h) = b 1, m 1 et alloc(m 2, l, h) = b 2, m 2 et Dom(m 1 ) = Dom(m 2 ), alors b 1 = b 2 et Dom(m 1 ) = Dom(m 2 ). Si free(m, b) = m, alors (m = b). Si free(m, b) = m, alors L(m, b) = H(m, b). S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 35 / 51

Plan 1 Vérification formelle de compilateurs 2 Modèle mémoire Modèle abstrait Modèle concret 3 Transformations de programmes opérant sur la mémoire 4 Conclusion S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 36 / 51

Transformations de programmes opérant sur la mémoire La plupart des passes de compilation préservent le comportement de la mémoire. 3 passes de compilation transforment la mémoire : la 1 re traduction de Clight à Cminor, l allocation de registres, le vidage de registres, effectué après l allocation de registres. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 37 / 51

Transformations de la mémoire S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 38 / 51

Transformations de la mémoire S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 38 / 51

Transformations de la mémoire S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 38 / 51

Première traduction (de Clight à Cminor) Injection mémoire En Clight, chaque variable réside en mémoire. Opérateur de prise d adresse. Sémantique : environnement associant des variables aux blocs de mémoire. Complique l allocation de registres et les optimisations du compilateur. Première traduction : Les variables scalaires dont l adresse n est jamais prise deviennent des variables locales Cminor, dont la valeur est stockée dans un environnement. Les autres variables locales Cminor restent en mémoire mais sont regroupées dans un seul bloc. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 39 / 51

Allocation de registres Raffinement des valeurs stockées en mémoire Avant : initialisation à undef des variables locales et des temporaires (à chaque appel). Après : certaines variables locales et temporaires correspondent à des registres globaux, qui ne sont pas initialisés pareillement. La sémantique des programmes RTL bien formés ne change pas. Par contre, le contenu de la mémoire change. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 40 / 51

Vidage de registres en mémoire Extension de la mémoire Vidage en mémoire : stockage dans la trame de pile courante. Dans cette trame, besoin de place supplémentaire afin de stocker les valeurs des registres sauvegardés par l appelé. Nécessité d agrandir les trames de pile, et d ajouter des instructions de lecture et d écriture. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 41 / 51

Plongement mémoire Invariants reliant les états mémoire en tout point de l exécution du programme initial et du programme transformé. Propriétés de simulation entre les opérations mémoire. Définition de 3 relations entre états mémoires. Plongement de mémoire (E) E : block option(block Z) E(b 1 ) = ɛ E(b 1 ) = b 2, δ Soit E v 1 v 2, entre les valeurs des 2 programmes. E m 1 m 2 Toute lecture réussie dans un bloc de m1 est simulée par une lecture réussie dans le sous-bloc correspondant de m 2 : E(b 1 ) = b 2, δ load(τ, m 1, b 1, i) = v 1 v 2, load(τ, m 2, b 2, i + δ) = v 2 E v 1 v 2 S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 42 / 51

Plongement mémoire Invariants reliant les états mémoire en tout point de l exécution du programme initial et du programme transformé. Propriétés de simulation entre les opérations mémoire. Définition de 3 relations entre états mémoires. Plongement de mémoire (E) E : block option(block Z) E(b 1 ) = ɛ E(b 1 ) = b 2, δ Soit E v 1 v 2, entre les valeurs des 2 programmes. E m 1 m 2 Toute lecture réussie dans un bloc de m1 est simulée par une lecture réussie dans le sous-bloc correspondant de m 2 : E(b 1 ) = b 2, δ load(τ, m 1, b 1, i) = v 1 v 2, load(τ, m 2, b 2, i + δ) = v 2 E v 1 v 2 S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 42 / 51

Propriétés de commutation et de simulation (entre plongements et opérations concrètes de gestion de la mémoire) Accès valides Si E(b 1 ) = b 2, δ et E m 1 m 2, alors m 1 = τ @ b 1, i implique m 2 = τ @ b 2, i + δ. Lemmes de simulation (écritures, cas 1/3) Si E(b 1 ) = ɛ et E m 1 m 2 et store(τ, m 1, b 1, i, v) = m 1, alors E m 1 m 2. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 43 / 51

Propriétés de commutation et de simulation (entre plongements et écritures) Lemmes de simulation (écritures, cas 2 et 3) Soient b 2, i, τ une référence à la mémoire m 2 telle que b 1, δ, E(b 1 ) = b 2, δ H(m 1, b 1 ) + δ i i+ τ L(m 1, b 1 ) + δ. Si E m 1 m 2 et store(τ, m 2, b 2, i, v) = m 2, alors E m 1 m 2.... S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 44 / 51

Propriétés de commutation et de simulation Plongement sans alias Des blocs distincts correspondent à des sous-blocs disjoints. b 1 b 2 E(b 1 ) = b 1, δ 1 E(b 2 ) = b 2, δ 2 b 1 b 2 [L(m, b 1 ) + δ 1, H(m, b 1 ) + δ 1 [ [L(m, b 2 ) + δ 2, H(m, b 2 ) + δ 2 [= Lemme de simulation (cas 3) Supposons E undef undef, v 1, v 2 et τ tels que E v 1 v 2 et τ, τ τ E convert(v 1, τ ) convert(v 2, τ ). Si E m 1 m 2 et E est sans alias dans m 1 et E(b 1 ) = b 2, δ et store(τ, m 1, b 1, i, v 1 ) = m 1, alors il existe m 2 tel que store(τ, m 2, b 2, i + δ, v 2 ) = m 2 et de plus E m 1 m 2. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 45 / 51

Propriétés de commutation et de simulation Plongement sans alias Des blocs distincts correspondent à des sous-blocs disjoints. b 1 b 2 E(b 1 ) = b 1, δ 1 E(b 2 ) = b 2, δ 2 b 1 b 2 [L(m, b 1 ) + δ 1, H(m, b 1 ) + δ 1 [ [L(m, b 2 ) + δ 2, H(m, b 2 ) + δ 2 [= Lemme de simulation (cas 3) Supposons E undef undef, v 1, v 2 et τ tels que E v 1 v 2 et τ, τ τ E convert(v 1, τ ) convert(v 2, τ ). Si E m 1 m 2 et E est sans alias dans m 1 et E(b 1 ) = b 2, δ et store(τ, m 1, b 1, i, v 1 ) = m 1, alors il existe m 2 tel que store(τ, m 2, b 2, i + δ, v 2 ) = m 2 et de plus E m 1 m 2. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 45 / 51

Propriétés de commutation et de simulation (suite) Lemmes de simulation (allocations) Si E m 1 m 2 et alloc(m 2, l, h) = b 2, m 2, alors E m 1 m 2. Si E m 1 m 2 et alloc(m 1, l, h) = b 1, m 1 et E(b 1) = ɛ, alors E m 1 m 2. Supposons E undef undef. Si E m 1 m 2 et alloc(m 1, l 1, h 1 ) = b 1, m 1 et alloc(m 2, l 2, h 2 ) = b 2, m 2 et E(b 1 ) = b 2, δ et l 2 l 1 + δ et h 1 + δ h 2 et max_alignment divise δ, alors E m 1 m 2.... S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 46 / 51

Extension mémoire (vidage de registres) Plongement E instancié à la fonction identité b, E id (b) = b, 0 Plongement entre valeurs E id v 1 v 2 ssi v 1 = v 2 m 1 m 2 : m 2 étend m 1 m 1 m 2 def = E id m 1 m 2 Dom(m 1 ) = Dom(m 2 ) S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 47 / 51

Extension mémoire Propriétés Lemmes de simulation est réflexive et transitive. Si m 1 m 2 et load(τ, m 1, b, i) = v, alors load(τ, m 2, b, i) = v. Toute opération d allocation, écriture ou libération dans m 1 est simulée par une opération similaire dans m 2, qui préserve la relation d extension mémoire. Le programme transformé peut effectuer des écritures supplémentaires, dans des zones non atteintes par le programme initial. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 48 / 51

Plan 1 Vérification formelle de compilateurs 2 Modèle mémoire Modèle abstrait Modèle concret 3 Transformations de programmes opérant sur la mémoire 4 Conclusion S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 49 / 51

Conclusion Bilan Modèle mémoire adapté à la preuve de propriétés de préservation sémantique, concernant des transformations de programmes effectuées par un compilateur. Description de quelques violations courantes des programmes C. Niveau d abstraction intermédiaire, garantissant des propriétés de séparation, des tests de bornes. Développement en Coq, à l aide de modules. 1070 lignes de specifications, 970 lignes de preuves. Formalisation en logique du premier ordre. Automatisation des preuves de la partie abstraite à l aide de prouveurs automatiques du premier ordre (Ergo, Simplify, Z3) : 42 lemmes sur 50 ont été prouvés. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 50 / 51

Conclusion Travaux en cours et futurs Logique de séparation (lien avec la preuve de programmes). Réutilisation dans un contexte concurrent. Raffiner le modèle en un modèle permettant de modéliser d autres violations courantes du C. Définir un modèle à la Burstall-Bornat, étant une abstraction du modèle présenté. Analyses statiques estimant la quantité de mémoire nécessaire à l exécution d un programme. S. Blazy (CEDRIC-ENSIIE) Modèle mémoire CEA-LIST, 18 mars 2008 51 / 51