Formalisation d analyses statiques pour Java multithreadé



Documents pareils
DG-ADAJ: Une plateforme Desktop Grid

Introduction aux Machines Virtuelles avec VMKit

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

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Vérification formelle de la plate-forme Java Card

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

Compilation (INF 564)

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

Problèmes liés à la concurrence

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

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

La JVM. La machine virtuelle Java. La JVM. La JVM

Programmation Bas Niveau

Conception des systèmes répartis

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Exécutif temps réel Pierre-Yves Duval (cppm)

Gestion mémoire et Représentation intermédiaire

Gestion hybride de la mémoire dynamique dans les systèmes Java temps-réel

Introduction à la programmation concurrente

La carte à puce. Jean-Philippe Babau

Exercices INF5171 : série #3 (Automne 2012)

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Conventions d écriture et outils de mise au point

Cours 1 : La compilation

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

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

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

IFT Systèmes d exploitation - TP n 1-20%

Une introduction à Java

Les diagrammes de modélisation

Cours de Génie Logiciel

Nouvelles approches en sécurité de Java

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

Java 1.5 : principales nouveautés

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Cours de Systèmes d Exploitation

SSTIC Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

Introduction à la Programmation Parallèle: MPI

Introduction. Gestion de la consommation énergétique. Contexte du cloud computing Instrumentation et contrôle

Mécanismes pour la migration de processus

INITIATION AU LANGAGE JAVA

Auto-évaluation Programmation en Java

Java - RMI Remote Method Invocation. Java - RMI

<Insert Picture Here> Solaris pour la base de donnés Oracle

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

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

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Matrice d accès. Master SEMS, Pierre Paradinas. October 16, 2013

Calculs de probabilités

École Polytechnique de Montréal. Département de Génie Informatique et Génie Logiciel. Cours INF2610. Contrôle périodique.

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

4. Groupement d objets

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Machines Virtuelles. et bazard autour. Rémi Forax

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

La technologie Java Card TM

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Java et les bases de données

Évaluation et optimisation de requêtes

Une bibliothèque de templates pour CUDA

Utiliser Java sans BlueJ

as Architecture des Systèmes d Information

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

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

Programmer en JAVA. par Tama

Session S12 Les bases de l optimisation SQL avec DB2 for i

Comment démarrer son Cloud Hybrid avec Amazon Web Services

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Initiation à l algorithmique

ADAPT: un modèle de transcodage des nombres. Une application des systèmes de production au développement

Programmation d Applications Concurrentes et Distribuées (INF431)

Remote Method Invocation en Java (RMI)

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Évaluation et implémentation des langages

Cours Java Native Interface

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

Java Licence Professionnelle CISII,

Résumé Génération de code Le code intermédiaire

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

On appelle variable condition une var qui peut être testée et

Threads. Threads. USTL routier 1

Chapitre 2. Eléments pour comprendre un énoncé

Introduction au langage C

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

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Analyse de PRESENT avec peu de données

Initiation à JAVA et à la programmation objet.

Introduction aux systèmes temps réel. Iulian Ober IRIT

Les structures de données. Rajae El Ouazzani

Les processus légers : threads. Système L3, /31

Vérification formelle de la plate-forme Java Card

Introduction : les processus. Introduction : les threads. Plan

High Performance by Exploiting Information Locality through Reverse Computing. Mouad Bahi

Apprentissage Automatique

Transcription:

Formalisation d analyses statiques pour Java multithreadé LANDE, (ParSec, Rennes, 09/06/2008) 1 INRIA, LANDE LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 1 / 30

Outline Contexte Analyse statique de bytecode Java séquentiel Objectif e.g : non-null pointer, contrôle de ressources,... interprétation abstraite certification Coq Etendre ces techniques au multithreading LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 2 / 30

Deux activités parallèles Prouver la bonne synchronisation Certification a d une analyse statique (Naik & Aiken, POPL 07). a (définition?) Analyser des programmes bien synchronisés Définition et certification d analyses statiques reposant sur l hypothèse de bonne synchronisation. LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 3 / 30

Outline 1 Naik & Aiken, POPL 07 2 Formalisation 3 Dataraces 4 Conclusion LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 4 / 30

Naik & Aiken, POPL 07 Naik & Aiken, POPL 07 LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 5 / 30

Naik & Aiken, POPL 07 Naik & Aiken, POPL 07 calcul des paires d accès a du programme (au moins une écriture) Elimination, par étapes successives b, de paires non impliquées dans une datarace But du jeu : terminer avec un ensemble de paires vide a points de programme b analyse statique LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 5 / 30

Etapes Naik & Aiken, POPL 07 reachable pairs computation aliasing pairs computation escaping pairs computation may happen in parallel pairs computation unlocked pairs computation LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 6 / 30

Etapes Naik & Aiken, POPL 07 reachable pairs computation aliasing pairs computation escaping pairs computation may happen in parallel pairs computation unlocked pairs computation call graph construction thread escape analysis alias analysis may happen in parallel analysis conditional must not alias analysis LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 7 / 30

Unlocked pairs Naik & Aiken, POPL 07 Exemple thread t thread t sync(a){... x.f.g = ; } sync(a){... x.f.g = ; } case A of LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 8 / 30

Unlocked pairs Naik & Aiken, POPL 07 Exemple thread t thread t sync(a){... x.f.g = ; } sync(a){... x.f.g = ; } case A of ClassId.f, ok(me) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 8 / 30

Unlocked pairs Naik & Aiken, POPL 07 Exemple thread t thread t sync(a){... x.f.g = ; } sync(a){... x.f.g = ; } case A of ClassId.f, ok(me) x.f [x.f ] t = [x.f ] t, ok (ME) [x.f ] t [x.f ] t, ok LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 8 / 30

Unlocked pairs Naik & Aiken, POPL 07 Exemple thread t thread t sync(a){... x.f.g = ; } sync(a){... x.f.g = ; } case A of ClassId.f, ok(me) x.f [x.f ] t = [x.f ] t, ok (ME) [x.f ] t [x.f ] t, ok x [x] t = [x] t, ok(me) [x] t [x] t, ok if [x.f ] t [x.f ] t LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 8 / 30

Unlocked pairs Naik & Aiken, POPL 07 Exemple for (i = 0;i < n; i + +){ array[i] = new C; array[i].f = new D } for (i = 0;i < m; i + +){ y = array[ ]; spawn{sync(y){y.f.val = ; }}} sync sync thread t C array threads t,t D D D D D D D D D access access LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 9 / 30

Naik & Aiken, POPL 07 Unlocked pairs Exemple for (i = 0;i < n; i + +){ array[i] = new C; array[i].f = new D } for (i = 0;i < m; i + +){ y = array[ ]; spawn{sync(y){y.f.val = ; }}} sync sync thread t C array threads t,t D D D D D D D D D access access Conditional must-not aliasing MustNotAlias(x, y) MustNotAlias(x..f, y..f ) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 9 / 30

Naik & Aiken, POPL 07 Disjoint Reachability Disjoint Reachability DR({a 1,...,a n }) = {a (a i=1,2 Reachable(a k i )) k 1 = k 2 } Example sync sync thread t C array threads t,t D D D D D D D D D access access {d 1,...,d n } DR({c 1,...,c n }) c i : C, d i : D LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 10 / 30

Naik & Aiken, POPL 07 Conditionnal must-not aliasing sync(x){...x..f =...} sync(y){...y..f =...} P a (x..f ) P(y..f ) DR # (P(x) P(y)) a Points-to analysis LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 11 / 30

Calcul de DR # Naik & Aiken, POPL 07 Problème Distinguer les objets alloués au même site LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 12 / 30

Calcul de DR # Naik & Aiken, POPL 07 Problème Distinguer les objets alloués au même site C array D D D D D D D D D LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 12 / 30

Calcul de DR # Naik & Aiken, POPL 07 Solution Ajouter des compteurs pour distinguer les objets alloués au même site (sémantique dynamique). Garantir que deux objets sont crées à la même itération (sémantique statique). 1 2 n k k D D D D D D D D D 1 2 n C array LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 13 / 30

Naik & Aiken, POPL 07 Dans le papier Langage while, pas de concurrence/procedure Preuve de la correction de la disjoint reachability Pas de formalisation du lien avec les dataraces Nous sous-ensemble du bytecode Java Procédures et Multithreading Preuve de la correction de la disjoint reachability Application aux dataraces LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 14 / 30

Formalisation Formalisation LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 15 / 30

Formalisation Formalisation Classes ClassId {cid,...} Field {f, g, h,...} MethodId {mid,...} Var {x, y, z,...} Type = ClassId {void} C { name ClassId; fields Field; methods M} M { name MethodId; param ClassId n ; rtype Type; body N inst} LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 15 / 30

Langage Formalisation Instructions inst ::= aconstnull new cid aload x astore x getfield f putfield f invokevirtual mid : (ptype)rtype if (cond) l goto l monitorenter monitorexit start LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 16 / 30

Formalisation Sémantique Compteurs p ::= m, i, c, ω, π (code pointer) appels de méthode/contexte arcs de flux de contrôle ω : M C N π : M C N 2 N O o ::= (a, p) (address) cs ::= (p, s, ρ) :: cs ε (call stack) s O stack ρ Var O Etats : st ::= L, σ, µ, ω L = {(cs, o),..., } σ : O F O µ : O {free} (O N ) ω : compteur global LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 17 / 30

Formalisation Sémantique Fonctionnement des compteurs Allocation ( m, i, c, ω, π, s, ρ) ( m, i + 1, c, ω, π[(m, c, i, i + 1) + +], o :: s, ρ) o = (a, m, i, c, ω, π ) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 18 / 30

Formalisation Sémantique Fonctionnement des compteurs Allocation ( m, i, c, ω, π, s, ρ) ( m, i + 1, c, ω, π[(m, c, i, i + 1) + +], o :: s, ρ) o = (a, m, i, c, ω, π ) Appel de méthode (m, c m, c ) ( m, i, c, ω, π, s, ρ). ( m, 0, c, ω, π ) ( m, i + 1, c, ω, π[(m, c, i, i + 1) + +], s, ρ). ω global ω global [(m, c ) + +] ω = ω[m, c ω global (m, c )] π = π[m, c,, 0] LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 18 / 30

Sémantique Formalisation Boucles while 1 ( ){ x = new h1 O; y = new h2 O; x.f = y; } LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 19 / 30

Sémantique Formalisation Boucles while 1 ( ){ x = new h1 O; y = new h2 O; x.f = y; } L : M N N 2 + Condition wf LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 19 / 30

Sémantique Formalisation Boucles while 1 ( ){ x = new h1 O; y = new h2 O; x.f = y; } L : M N N 2 + Condition wf Propriété d unicité (a i, m, i, c, ω i, π i ) dom(σ), i = 1, 2 ω 1 (m, c) = ω 2 (m, c) a 1 = a 2 π 1 (m, c, L(m, i)) = π 2 (m, c, L(m, i)) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 19 / 30

Analyse Formalisation Abstraction (a, m, i, c, ω, π ) : τ = m, i, c, Ω, Π T Ω : M C N Π : M C N 2 N N = {1, } LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 20 / 30

Analyse Formalisation Flow insensitive : Σ Σ T Field T Flow sensitive : M, A M : M C (P(T n ), P(T) {void}) A : ppt P(T) stack (var P(T)) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 21 / 30

Analyse Formalisation Contraintes (1) ( m.body(i) = putfield f A(m, i, c) = φ 2 :: φ 1 :: S, Γ ) {(τ 1, f, τ 2 ) τ i φ i } Σ (2) A(m, 0, c) = kill m,c (A(m, 0, c)) (3) CFlow(m, i, j) kill m,c,i,j ([m.body(i)] # m,i,c (A(m, i, c))) A(m, j, c) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 22 / 30

Analyse Formalisation Fonctions de transfert [new C] # m,i,c (S, Γ) = φ :: S, Γ φ = { m, i, c, λ.1, λ.1 } [getfield f ] # m,i,c (φ :: S, Γ) = φ :: S, Γ φ = { m, i, c, ω, π (τ, f, m, i, c,, ) Σ, τ φ} LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 23 / 30

Analyse Formalisation Disjoint Reachability (m,i,c) DR σ (A) (o i,o) Reach + (σ), i = 1,2 o.cp = (m,i,c) o 1.cp, o 2.cp A o 1 = o 2 (m,i,c) DR Σ (A) (τ 1,τ 3 ) Σ + (τ 2,τ 4 ) Σ + τ 3.cp = (m,i,c) τ 4.cp = (m,i,c) τ 1.cp, τ 2.cp A τ 1 = τ 2 τ 1.cp = (m,i,c ) τ 1.Ω(m,c ) = τ 1.Π(m,c, L(m,i )) = 1 τ 3.Ω(m,c ) = τ 3.Π(m,c, L(m,i )) = 1 τ 4.Ω(m,c ) = τ 4.Π(m,c, L(m,i )) = 1 Correction σ accessible (m, i, c) DR σ (A) (m, i, c) DR Σ (A) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 24 / 30

Analyse Formalisation Example while 1 ( ){ x = new h1 O; x (h 1,, ), y (h 2,, ) while 2 ( ){ y = new h2 O; x (h 1, 1, ), y (h 2,, ) x.f = y; x (h 1, 1, ), y (h 2, 1, 1 ) } } (h 1, 1, ) (h 2, 1, 1 ) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 25 / 30

Analyse Formalisation Exemple m 1 (){ x = new h1 O; x... n(x); x (h 1, 1, 1, 1 ) } ( ) n 2 (x){ y = new h2 O; x (h 1, 1,, 1 ), y... setfield(x, y); x (h 1, 1,, 1 ), y (h 2, 1, 1, 1 ) } ( ) setfield 3 (x, y){ x.f = y; x (h 1, 1,, ), y (h 2, 1, 1, ) } (h 1, 1,, ) (h 2, 1, 1, ) ( ) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 26 / 30

Dataraces Dataraces LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 27 / 30

Dataraces Dataraces Actions / Exécutions e = (a, R, a ) R {? f,! f, ր,, } e E = st 0 e 0 1 e n 1 st1... e n Conflit R {?,!} a?a a Ra sym. Datarace DRF(E) i < j {0, 1,...,n 1}. e i e j e i hb e j LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 27 / 30

Dataraces Sémantique happens-before i j e i = ara e j = ara e i 0 hb e j i j e i = aր a e j = a Ra e i 0 hb e j i j e i = a a e j = a a e i 0 hb e j hb : clotûre transitive de 0 hb N.B. : Notion de race mieux adaptée que le choix non déterministe. LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 28 / 30

Dataraces Dataraces Elimination F Σ (R) = R {(B 1, B 2 ) P(B 1 ) P(B 2 ) DR Σ (P(A 1 ) P(A 2 ))} sync(a i ){...B i...} B i Reachable(A i ) i = 1, 2 LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 29 / 30

Dataraces Dataraces Elimination F Σ (R) = R {(B 1, B 2 ) P(B 1 ) P(B 2 ) DR Σ (P(A 1 ) P(A 2 ))} sync(a i ){...B i...} B i Reachable(A i ) i = 1, 2 Correction Safe(R) Safe(F Σ (R)) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 29 / 30

Pour la suite... Conclusion LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 30 / 30

Conclusion Pour la suite... Activité 1 Certification Coq (en cours) Gérer les autres étapes LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 30 / 30

Conclusion Pour la suite... Activité 1 Certification Coq (en cours) Gérer les autres étapes Activité 2 Cadre d interprétation abstraite pour l analyse de Bytecode Java bien synchronisés (en cours) Null-pointer Points-to Must-alias Polyèdres LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 30 / 30

Conclusion Pour la suite... Activité 1 Certification Coq (en cours) Gérer les autres étapes Activité 2 Cadre d interprétation abstraite pour l analyse de Bytecode Java bien synchronisés (en cours) Null-pointer Points-to Must-alias Polyèdres Application à la gestion des ressources MIDP (Extension du papier ESORICS) LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 30 / 30

Conclusion Pour la suite... Activité 1 Certification Coq (en cours) Gérer les autres étapes Activité 2 Cadre d interprétation abstraite pour l analyse de Bytecode Java bien synchronisés (en cours) Null-pointer Points-to Must-alias Polyèdres Application à la gestion des ressources MIDP (Extension du papier ESORICS) Certification Coq LANDE, (ParSec, Rennes, 09/06/2008) (INRIA, LANDE)Static race detection 30 / 30