Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40



Documents pareils
INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Java - la plateforme

Logiciel de base. Première année ENSIMAG

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Derrière toi Une machine virtuelle!

Éléments de programmation et introduction à Java

Structure d un programme

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

Machines Virtuelles. et bazard autour. Rémi Forax

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

Initiation à la sécurité

Java Licence Professionnelle CISII,

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

Programmer en JAVA. par Tama

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

Java Licence Professionnelle CISII,

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

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Évaluation et implémentation des langages

Machines virtuelles Cours 1 : Introduction

La technologie Java Card TM

Rappels d architecture

Vulgarisation Java EE Java EE, c est quoi?

Introduction aux Machines Virtuelles avec VMKit

Chapitre I Notions de base et outils de travail

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

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

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

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

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

Compilation (INF 564)

Introduction au langage C

Programmation Bas Niveau

Architecture des ordinateurs

Débogage de code* Mardi 13 décembre Romaric DAVID Université de Strasbourg - Direction Informatique Pôle HPC. hpc.unistra.

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

Cours 1 : La compilation

Module.NET 3 Les Assemblys.NET

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

TP1 : Initiation à Java et Eclipse

Les techniques de protection du logiciel

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

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

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

Mécanismes pour la migration de processus

Programmation assembleur : aperçu

Architecture des ordinateurs

Logiciel Libre Cours 2 Fondements: Programmation

Une introduction à Java

Conception de circuits numériques et architecture des ordinateurs

Mise en œuvre des serveurs d application

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Initiation à JAVA et à la programmation objet.

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

Annexe : La Programmation Informatique

TP1. Outils Java Eléments de correction

Cours d Algorithmique et de Langage C v 3.0

INITIATION AU LANGAGE JAVA

Plate formes mobiles. Utilisation. Contexte 9/29/2010 IFC 2. Deux utilisations assez distinctes :

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

Cours 1: Java et les objets

Projet de Veille Technologique

Ordinateurs, Structure et Applications

as Architecture des Systèmes d Information

TP, première séquence d exercices.

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

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

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

Programmation Objet Java Correction

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

STAGE IREM 0- Premiers pas en Python

Prise en compte des ressources dans les composants logiciels parallèles

COMPARAISONDESLANGAGESC, C++, JAVA ET

Programmation d'applications sur PDA

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

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Notions fondamentales du langage C# Version 1.0

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Communications performantes par passage de message entre machines virtuelles co-hébergées

DESCRIPTIF DES PROJETS 3EME ANNEE QUI SERONT PRESENTES LORS DE LA JOURNEE DE PROJET DE FIN D ETUDE LE 26/01/2012

UE C avancé cours 1: introduction et révisions

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

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP1 : Initiation à Java et Eclipse

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Vérification formelle de la plate-forme Java Card

Utilisation de matériels industriels avec des outils de virtualisation open source. Open Source dans le monde industriel

Programmation Orientée Objet

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

Introduction à l informatique en BCPST

Traduction des Langages : Le Compilateur Micro Java

Java Avancé. Le langage Java. Rémi Forax

Lier Erlang avec d autres langages de programmation

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

Instrumentation de code Java

Les Virtual LAN. F. Nolot. Master 1 STIC-Informatique 1

Une tasse de café fumante est

Transcription:

Machines virtuelles Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Machines virtuelles La compilation peut avoir des désavantages : Le résultat n est en général pas portable Le résultat ne suit pas les évolutions des architectures : Un programme compilé pour un Pentium 4 ne tournera pas sur un 386 (instructions manquantes) Un programme compilé pour un 386 ne sera pas optimisé pour Pentium 4 (pas d instructions MMX, ordonnancement) Samuel Tardieu (ENST) Machines virtuelles 2 / 40

Principes Une machine virtuelle : possède un jeu d instructions virtuel, prédéterminé ou dynamique est émulée sur une ou plusieurs plates-formes (par le biais d un moteur d exécution) peut posséder des instructions simples ou complexes Samuel Tardieu (ENST) Machines virtuelles 3 / 40

Quelques machines virtuelles Forth Pascal UCSD NeWS (serveur X11 PostScript) Python, Objective CAML, Erlang Parrot (pour Perl 6) Java,.NET Samuel Tardieu (ENST) Machines virtuelles 4 / 40

Processus de compilation Programme source compilation Bytecode Samuel Tardieu (ENST) Machines virtuelles 5 / 40

Processus de compilation Programme source compilation Bytecode Machine virtuelle Samuel Tardieu (ENST) Machines virtuelles 5 / 40

Processus de compilation Programme source compilation Bytecode Machine virtuelle référence Bibliothèques Samuel Tardieu (ENST) Machines virtuelles 5 / 40

Processus de compilation Programme source compilation Bytecode Machine virtuelle référence implémente Bibliothèques référence Interfaces natives Samuel Tardieu (ENST) Machines virtuelles 5 / 40

Langages à pile Les langages à pile : peuvent être destinés à l humain (exemple : Forth) ou à la machine sont plus efficaces lors d un appel permettent une représentation compacte sont utilisés dans certaines machines virtuelles (exemple : Java) Samuel Tardieu (ENST) Machines virtuelles 6 / 40

Exemple Java Le code suivant : static int t (int x, int y, int z) { return x+y*z; } se compile en 0:iload_0 1:iload_1 2:iload_2 3:imul 4:iadd 5:ireturn // push x // push y // push z // y*z // x+y*z // return result Samuel Tardieu (ENST) Machines virtuelles 8 / 40

Remarques La pile n est utilisée que pour les constructions internes Entre les méthodes, une pile de retour (arguments et variables locales, comme en C) est utilisée La pile de données est vide à l entrée d une méthode Ces piles peuvent être implémentées avec une paire frame pointer / stack pointer Samuel Tardieu (ENST) Machines virtuelles 9 / 40

Interprétation virtuelle Il existe plusieurs techniques d interprétation, dont : direct threaded code indirect threaded code token threaded code subroutine threaded code compilation au vol Samuel Tardieu (ENST) Machines virtuelles 10 / 40

Direct threaded code Un pointeur d instruction (IP) pointe à l endroit contenant la prochaine instruction à exécuter À la fin de chaque mot, next est exécuté : Le pointeur d instruction est incrémenté On saute à la valeur précédente du pointeur d instruction L interpréteur peut être rappelé pour un mot non natif Samuel Tardieu (ENST) Machines virtuelles 12 / 40

Coeur du Direct TC ; next permet de sauter au mot suivant next: movl ip,%eax incl ip jmp *%eax ; Exemple: execution de a b c.section ".data" abc:.long a b c ip:.long abc Samuel Tardieu (ENST) Machines virtuelles 14 / 40

Interpréteur Direct TC imbriqué ; sauvegarde de ip et du sommet de la pile de retour do_list: movl (%esp),%eax movl ip,%edx movl %edx,(%esp) ; Sauvegarde ancien IP movl %eax,ip ; Installation nouveau IP jmp next ; restauration de ip depuis la pile exit: popl %eax movl %eax,ip jmp next Samuel Tardieu (ENST) Machines virtuelles 16 / 40

Exemple de Direct TC Les mots Forth : square dup * ; : cube dup square * ; se traduit par square: cube: call do_list.long dup,times,exit call do_list.long dup,square,times,exit Samuel Tardieu (ENST) Machines virtuelles 18 / 40

Code natif et Direct TC Voici des implémentations natives de dup et times (la pile Forth est indexée par %ebx) : dup: times: movl (%ebx),%eax addl -4,%ebx movl %eax,(%ebx) jmp next movl (%ebx),%eax addl 4,%ebx imull (%ebx),%eax movl %eax,(%ebx) jmp next Samuel Tardieu (ENST) Machines virtuelles 20 / 40

Caractéristiques du Direct TC Tous les mots sont directement exécutables, ce qui facilite l interface avec d autres langages Cela coûte un saut au début de chaque mot Utilisation non-optimale des caches par le mélange de code et de données Toutefois, le direct threaded code est un des moyens d exécution les plus performants et les plus simples à implémenter. Samuel Tardieu (ENST) Machines virtuelles 21 / 40

Indirect Threaded Code L indirect threaded code ressemble au direct threaded code avec un niveau d indirection supplémentaire : l adresse où sauter est stockée plutôt que le saut lui-même. Exemple : square:.long do_list,dup,times,exit Les mots ne sont pas exécutables, mais le code peut être plus compact. Samuel Tardieu (ENST) Machines virtuelles 23 / 40

ITC : boucle d interprétation La boucle d interprétation contient un niveau d indirection supplémentaire : next: movl ip,%eax incl ip movl (%eax),%eax jmp *%eax ; <--- ici Samuel Tardieu (ENST) Machines virtuelles 25 / 40

Token threaded code Plutôt que des adresses, on utilise des identificateurs (tokens). Une table est utilisée pour associer chaque token à l adresse à exécuter. Si ces identificateurs sont fixés a priori : on obtient du code portable ; il est possible de faire un gros switch. Samuel Tardieu (ENST) Machines virtuelles 26 / 40

Boucle d interprétation void next (unsigned int *ip) { for (;;) { switch (*ip++) { case OP_PLUS: PUSH (POP() + POP()); break; case METHOD_CALL: next (FIND_METHOD (*ip++)); break; case EXIT: return;... Samuel Tardieu (ENST) Machines virtuelles 28 / 40

Subroutine threaded code Dans le subroutine threaded code, des appels sont insérés directement, c est la voie vers la compilation native : square: call dup call times return La première optimisation est immédiate square: call dup jmp times Samuel Tardieu (ENST) Machines virtuelles 30 / 40

Subroutine threaded code Dans le subroutine threaded code, des appels sont insérés directement, c est la voie vers la compilation native : square: call dup call times return La première optimisation est immédiate square: call dup jmp times Samuel Tardieu (ENST) Machines virtuelles 30 / 40

STC et compilation native La compilation native est similaire au subroutine threaded code, sauf qu il est possible de remplacer des appels par du code inline, comme ici : : foo drop bar ; devient foo: addl 4,%ebp jmp bar \ Drop Samuel Tardieu (ENST) Machines virtuelles 32 / 40

Compilation au vol La compilation au vol (Just In Time, ou JIT) : transforme du bytecode en code natif au chargement ou à la première exécution ; peut produire plusieurs alternatives natives d un même code pour s accomoder d architectures différentes ; a un surcoût fixe important ; peut être plus efficace en «régime de croisière» qu un interpréteur. Samuel Tardieu (ENST) Machines virtuelles 33 / 40

Exemple de la machine Java Le code Java pour la JVM (Java Virtual Machine) : est token threaded (avec des opcodes fixés à l avance) ; peut être compilés au vol ; a des tokens (opcodes) de très haut niveau (appel de méthode, exceptions, etc.) fait appel à un grand nombre de bibliothèques externes. Samuel Tardieu (ENST) Machines virtuelles 34 / 40

JVM et langages D autres langages que Java ciblent la machine virtuelle Java : Ada 95 Python Forth Scheme, Basic, Logo,... Samuel Tardieu (ENST) Machines virtuelles 35 / 40

Vérifications Au moment du chargement (en général dynamique), la JVM vérifie : la bonne construction du fichier d entrée l absence de débordement de pile (chaque méthode indique la place dont elle a besoin) Sur certaines JVM, il est possible de précharger tous les modules utilisés potentiellement par une application Java, pour éviter une mauvaise surprise à l exécution. Samuel Tardieu (ENST) Machines virtuelles 36 / 40

Précompilation portable Il est possible de partager du code machine s exécutant, sans compilation au vol, à la vitesse du code natif. Il suffit d inclure les deux (bytecode et code natif pour une ou plusieurs plates-formes) dans la même distribution. Au moment de l exécution, choisir soit le code natif (plus rapide) s il est disponible, soit le code à interpréter (plus facile à déboguer). Le compilateur du langage Erlang et sa machine virtuelle ont adopté cette pratique. Samuel Tardieu (ENST) Machines virtuelles 37 / 40

Interface avec le système Tout ne peut pas se faire en byte code. La machine virtuelle s interface avec le système. En général, la VM permet d appeler le système directement (appels systèmes ou appels de bibliothèques). Écrire des parties en code natif permet d accélérer certaines routines critiques. Samuel Tardieu (ENST) Machines virtuelles 38 / 40

Java vs.net Java : est contrôlé par Sun Microsystems ; offre un bytecode portable ; n offre qu une interface objet.net : est contrôlé par Microsoft ; offre un bytecode portable ; permet d accéder aux données des autres objets directement. Samuel Tardieu (ENST) Machines virtuelles 39 / 40

Émulation et VM Certaines machines virtuelles émulent de vraies architecture : émulateur 68LC040 d Apple pour ses systèmes à base de PowerPC émulateur DragonBall de Palm Inc pour ses assistants personnels à base d ARM émulateur PlayStation pour Unix Samuel Tardieu (ENST) Machines virtuelles 40 / 40