Introduction aux Machines Virtuelles avec VMKit

Documents pareils
Machines Virtuelles. et bazard autour. Rémi Forax

La technologie Java Card TM

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Java - la plateforme

Vulgarisation Java EE Java EE, c est quoi?

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

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

Derrière toi Une machine virtuelle!

Solution A La Gestion Des Objets Java Pour Des Systèmes Embarqués

I-JVM: une machine virtuelle Java pour l isolation de composants dans OSGi

Annexe : La Programmation Informatique

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

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

Génération de code binaire pour application multimedia : une approche au vol

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

as Architecture des Systèmes d Information

Vérification formelle de la plate-forme Java Card

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

CAHIER DES CHARGES D IMPLANTATION

La carte à puce. Jean-Philippe Babau

Le Ro le Hyper V Premie re Partie Configuration et Prise en main du gestionnaire Hyper-V

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

Initiation à JAVA et à la programmation objet.

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

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Une introduction à Java

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Programmation Orientée Objet Java

Chapitre I Notions de base et outils de travail

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

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

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

Virtualisation logicielle De la machine réelle à la machine virtuelle abstraite

Module.NET 3 Les Assemblys.NET

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

Projet de Veille Technologique

Java Licence Professionnelle CISII,

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

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet

SGDN. Projet: JAVASEC

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

Modélisation des interfaces matériel/logiciel

java : Langage et Environnement

Systèmes d exploitation

Ready to Go? [Retour d'expérience sur un projet en Golang] HTML PDF 1 / 44

F. Barthélemy. 17 mai 2005

Mémoire de stage de Master 2

PLATE-FORME DE CLOUD COMPUTING SLAPOS. Intégration d applications

Manuel logiciel client Java

Cours 1: Java et les objets

GenDbg : un débogueur générique. Didier Eymery Jean-Marie Borello Jean-Marie Fraygefond Odile Eymery Philippe Bion

Le serveur HTTPd WASD. Jean-François Piéronne

Environnements de développement (intégrés)

Cours 1 : La compilation

Présentation de Java. Olivier de Pertat IT GROUP

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

Une tasse de café fumante est

Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration

Chapitre 2 : Abstraction et Virtualisation

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

Introduction à NetCDF

Architecture des ordinateurs

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

Android. Présentation d Android. Florent Garin

Le Framework.Net. Introduction. Pourquoi.Net?

Informatique UE 102. Jean-Yves Antoine. Architecture des ordinateurs et Algorithmique de base. UFR Sciences et Techniques Licence S&T 1ère année

Projet gestion d'objets dupliqués

Software Engineering and Middleware A Roadmap

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

INITIATION AU LANGAGE JAVA

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

td3a correction session7az

Contexte et motivations Les techniques envisagées Evolution des processus Conclusion

Traitement de données

Conventions d écriture et outils de mise au point

Analyse de performance, monitoring

DÉVELOPPEMENT D UNE APPLICATION DE COMMUNICATION BLUETOOTH SUR ANDROID. Projet de fin d étude VAP «Architecte de Services en Réseau»

Création d objet imbriqué sous PowerShell.

Rappels d architecture

HISTORIQUE DES SYSTEMES D'EXPLOITATION (S.E.)

Analyse statique de code dans un cycle de développement Web Retour d'expérience

Corrigé des exercices sur les références

Projet de développement

DotNet. Présentation de l'offre

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

Programmation avancée et répartie en Java : interfaçage avec d autres langages

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

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

Hébergement de site web Damien Nouvel

CH.3 SYSTÈMES D'EXPLOITATION

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

Notion de base de données

Mise en œuvre des serveurs d application

Introduction à la programmation concurrente

Sébastien Geiger IPHC Strasbourg

Asterisk QuickRecord. ANTOINE MANSUY IUT DE COLMAR

Remote Method Invocation en Java (RMI)

Compilation (INF 564)

Transcription:

Introduction aux Machines Virtuelles avec Ingénieur :, Responsables : Gaël Thomas, Gilles Müller EQUIPE REGAL LIP6 INRIA (Paris/France) un substrat de machine virtuelle : a substrate for Managed Runtime Environments 2 Les environnements d'exécution Les machines virtuelles Exécution code natif ( C, C++ ) source source Execution machine virtuelle (Java, C#) source source Machine Virtuelle vérificateur de byte-code Analyse Analyse Optimise Optimise Génère code binaire natif spécifique Génère code binaire natif spécifique Analyse Analyse Optimise Optimise Génère byte-code générique Génère byte-code générique Byte-code Byte-code générique générique à la volée (JIT) Interpréteur Threads Allocateur mémoire Ramasse miette () binaire binaire natif natif execution execution Machine Machine Virtuelle Virtuelle Analyse byte-code Analyse byte-code Évalue le byte-code ou Évalue le byte-code ou Compile et imise en code binaire Compile et imise en code binaire natif à la volée (JIT) natif à la volée (JIT) execution execution Problèmes Développement extrêmement long à réaliser! Comment tester une idée avec différents langages? Comment implémenter une nouvelle VM efficace pour de nouveaux langages? Comment étendre rapidement des langages existant? : a substrate for Managed Runtime Environments 3 : a substrate for Managed Runtime Environments 4

: un substrat de machine virtuelle : un substrat de machine virtuelle But de : aider à expérimenter dans les VM But de : aider à expérimenter dans les VM Objectif : factoriser les composants communs des VM Objectif : factoriser les composants communs des VM Just In Time : génération de code natif à la volée Just In Time : génération de code natif à la volée mémoire : alloue et collecte automatiquement la mémoire libre mémoire : alloue et collecte automatiquement la mémoire libre de Thread : créé et synchronise les threads de Thread : créé et synchronise les threads Personnalité Java (J3) Personnalité C# (N3 non maintenu) Personnalité R (Reactor) Personnalités Personnalité Java (J3) Personnalité C# (N3 non maintenu) Personnalité R (Reactor) ~ 25k loc Just In Time mémoire de Thread Just In Time mémoire de Thread ~ 500k loc : a substrate for Managed Runtime Environments 5 : a substrate for Managed Runtime Environments 6 : un substrat de machine virtuelle But de : aider à expérimenter dans les VM Objectif : factoriser les composants communs des VM Just In Time : génération de code natif à la volée mémoire : alloue et collecte automatiquement la mémoire libre de Thread : créé et synchronise les threads Personnalité Java (J3) Personnalité C# (N3 non maintenu) Personnalité R (Reactor) < 5% 5% du du code code ~ 25k loc d'un point de vue technique Just In Time mémoire de Thread ~ 500k loc : a substrate for Managed Runtime Environments 7 : a substrate for Managed Runtime Environments 8

Implementation de Architecture détaillée Choix d'implémentation: repose sur des composants externes à la volée (JIT) : LLVM [Lattner & Adve CGO 04] mémoire : MMTk [Blackburn et Al. ICSE 04] de Thread : Posix = glue entre les différents composants Entre JIT-C et gestionnaire mémoire = précis Entre le gestionnaire de Thread et le gestionnaire mémoire = multi-threadé Personality Compilation related function Call back Method Stub Invoke Invoke Generate Native LLVM Input/Output Generate Find global Roots Stack Maps Personality related functions Modify Header MMTk Trace Object gcmalloc/ write barrier Clone Object delegate Find thread Roots Posix Thread Thread Management/ handshake Operating System : a substrate for Managed Runtime Environments 9 : a substrate for Managed Runtime Environments 10 Architecture de la VM Minimal () pour le tutoriel Operating System : a substrate for Managed Runtime Environments 11 : a substrate for Managed Runtime Environments 12

Architecture de la et Gestion des Threads Point d'entrée du Garbage collector Backtrace (parcours de la pile d exécution) Traçage des variables globales Gestion des exceptions Thread Rendez-vous du garbage collector Scan de la pile d'exécution lors du Traçage des variables locales Méthode principale d'exécution : a substrate for Managed Runtime Environments 13 : a substrate for Managed Runtime Environments 14 Architecture de la Architecture de la : a substrate for Managed Runtime Environments 15 : a substrate for Managed Runtime Environments 16

(tag) (tag) [... ] * F (* param) TOY_PARAM(param) ; TOY_VAR(, val) ; [ init val ] val = g(param, val) ; return val ; * G (* a, * b) TOY_PARAM(a) ; TOY_PARAM(b) ; TOY_VAR(, res) ; res = a.dosomething(b) ; return res ; [... ] [... ] * F (* param) TOY_PARAM(param) ; TOY_VAR(, val) ; [ init val ] val = g(param, val) ; return val ; * G (* a, * b) TOY_PARAM(a) ; TOY_PARAM(b) ; TOY_VAR(, res) ; res = a.dosomething(b) ; return res ; [... ] Stack Maps : a substrate for Managed Runtime Environments 17 : a substrate for Managed Runtime Environments 18 (tag) (header gc) [... ] * F (* param) TOY_PARAM(param) ; TOY_VAR(, val) ; [ init val ] val = g(param, val) ; return val ; Call stack... param F val parameters Local vars - header - Bits de marquage - Bits de hash - Bits de lock (J3) - Bits personnalisables * G (* a, * b) TOY_PARAM(a) ; TOY_PARAM(b) ; TOY_VAR(, res) ; res = a.dosomething(b) ; return res ; [... ] Stack Maps a b G res parameters Local vars header Object : a substrate for Managed Runtime Environments 19 : a substrate for Managed Runtime Environments 20

(header gc) (tracer) - header - Bits de marquage - Bits de hash - Méthode de Traçage de l'objet - Bits de lock (J3) - Bits personnalisables destructor Op. delete - header - Bits de marquage - Bits de hash - Méthode de Traçage de l'objet Call stack Stack Maps... param F - Bits de lock (J3) - Bits personnalisables tracer markandtrace markandtrace markandtrace 1 2 VT C++ header Object tracer val tracer 3 : a substrate for Managed Runtime Environments 21 : a substrate for Managed Runtime Environments 22 (tracer) Architecture de la - header - Bits de marquage - Bits de hash - Méthode de Traçage de l'objet - Bits de lock (J3) - Bits personnalisables - Allocateur - Surcharge operator new - Appel à new interdit pour gc (paramètre opaque) : a substrate for Managed Runtime Environments 23 : a substrate for Managed Runtime Environments 24

Architecture de la (load ) Récupération du code (représentation intermédiaire LLVM) : a substrate for Managed Runtime Environments 25 : a substrate for Managed Runtime Environments 26 (load ) (load ) Récupération du code (représentation intermédiaire LLVM) Récupération du code (représentation intermédiaire LLVM) : a substrate for Managed Runtime Environments 27 : a substrate for Managed Runtime Environments 28

(load ) (generate ) Récupération du code (représentation intermédiaire LLVM) -runtime.bc Load at runtime bin bin -content.bc Récupération du code (représentation intermédiaire LLVM) : a substrate for Managed Runtime Environments 29 : a substrate for Managed Runtime Environments 30 (generate ) (generate ) Récupération du code (représentation intermédiaire LLVM) Récupération du code (représentation intermédiaire LLVM) No body Generate Materialize No body : a substrate for Managed Runtime Environments 31 : a substrate for Managed Runtime Environments 32

(generate ) (imize ) Récupération du code (représentation intermédiaire LLVM) Récupération du code (représentation intermédiaire LLVM) Generate No Materialize No body Generate Materialize No body : a substrate for Managed Runtime Environments 33 : a substrate for Managed Runtime Environments 34 (imize ) (imize ) Récupération du code (représentation intermédiaire LLVM) Récupération du code (représentation intermédiaire LLVM) Materialize No body : a substrate for Managed Runtime Environments 35 : a substrate for Managed Runtime Environments 36

( to native) ( Infos) Récupération du code (représentation intermédiaire LLVM) Récupération du code (représentation intermédiaire LLVM) func Stack Maps Native func Native func : a substrate for Managed Runtime Environments 37 : a substrate for Managed Runtime Environments 38 ( to native) Récupération du code (représentation intermédiaire LLVM) Native func Récupération du code (représentation intermédiaire LLVM) Generation d' Optimisation de l' Conversion de l' vers code natif Transmission des StackMaps (information variables locales) au : a substrate for Managed Runtime Environments 39 : a substrate for Managed Runtime Environments 40

lib/vmkit/mmtk/ A vos claviers! include/vmkit include/llvm Questions?.h Vmkit.h Thread.h Allocator.h.h.h LLVM /lib TOYVM (.h /.cc) (.h /.cc) (.h /.cc) util.h Tracers.cc (.h /.cc) : a substrate for Managed Runtime Environments 41 : a substrate for Managed Runtime Environments 42