Vous êtes sur la page 1sur 32

Machines virtuelles Cours 1 : Introduction

Yann Rgis-Gianas yrg@pps.jussieu.fr


PPS - Universit Denis Diderot Paris 7

mercredi 27 janvier 2010

Quest-ce quune machine virtuelle ?

Lart de la programmation
Informellement, la programmation est : Lart de rsoudre des problmes ecacement, par le calcul. Il existe de nombreux modles de calcul que lon peut par exemple classier selon les critres suivants : Critres Exemples Digital Ordinateurs standards ou quantiques Analogique Rseaux de neurones, mlanges chimiques Squentiel Programme C Parallle Programme Erlang Automatique Calcul numrique Supervis Preuve assiste par ordinateur Fonctionnel -calcul Impratif Programme C Logique Programme Prolog Concurrent Systme biologique

Une machine abstraite pour chaque modle de calcul

Une machine abstraite dcrit lenvironnement dvaluation dun modle de calcul. Trs peu de modles possdent une ralisation physique de leur machine abstraite ( lexception du modle de Von Neumann). On peut cependant muler une machine abstraite laide dun autre programme. Un tel programme est appel machine virtuelle.

Les machines virtuelles : une solution miracle ?

Une machine sans existence physique : ni silicium, ni engrenage. Dmatrialiser la machine a de nombreuses consquences. 1. Raisonnement sur les programmes : on peut sabstraire des dtails de llectronique et se donner un cadre formel et universel (indpendant du matriel) pour prouver des proprits sur lvaluation des programmes. 2. Contrle de lexcution de la machine : le programme dmulation de la machine peut observer un programme avant de lvaluer pour vrier quil se comporte correctement. Une machine virtuelle peut aussi rattrapper les erreurs, adapter un programme a son environnement, etc. 3. Manipulation de la machine elle-mme comme une donne : on peut faire transiter une machine virtuelle travers internet, la mettre jour, etc.

Les machines virtuelles : le revers de la mdaille

Limplmentation de machines virtuelles ecaces et sres est dicile. Le problme decacit provient de la couche dinterprtation introduite par la machine virtuelle. Le problme de sret est intrinsque la dicult danalyser des programmes avant de les valuer (analyse dite statique). Lobjectif de ce cours est ltude des solutions modernes ces problmes en termes de logiciel et de matriel.

Quelques rappels sur les machines de Turing

La premire de toute : la machine de Turing

c Pour la Science

Ingrdients : Une bande (innie) de cases contenant des symboles. Une tte de lecture en face dune case Un tat courant (p.ex. un numro dtat) Un programme (ni), qui tout tat et symbole lu, associe un nouvel tat, un symbole crire, et un mouvement (G/D) de la tte de lecture.

Machine de Turing

1. crire une addition de btonnets : la bande devra passer de XX+XXXX XXXXXX 2. crire une soustraction de btonnets. 3. (dur) crire une multiplication de btonnets. 4. Donner un exemple de machine ne sarrtant pas. Comment savoir lavance si on est dans ce cas ?

Machine de Turing et problme de larrt

Cration en 1936 (1er ordinateur : 1945 !). Sa motivation, lEntscheidungsproblem : Existe-t-il une machine rpondant toutes les questions oui/non des maths ? Rponse ngative, via lindcidabilit du problme de larrt : pas de mthode gnrale pour savoir si une machine et une bande initiale vont mener un arrt. Ici, mthode gnrale = algorithme = machine de Turing Ces galits forment la Thse de Church-Turing : tout ce qui se calcule (meme en Java 1.5 sur Amd 64 3500+) peut se faire via une machine de Turing.

Machine de Turing, Variantes et Ordinateurs

Il existe de nombreuses variantes de la machine de Turing : alphabet des symboles, bandes multiples, bande borne dun ct. La plupart sont quivalentes. Remarque sur la bande innie : cest juste une convenance. Un programme ne peut utiliser une innit de bande en un temps ni ! Ici, innie = aussi large que ncessaire. Analogie avec un ordinateur :
bande = mmoire tat = pointeur de code (pc) programme = programme (ou plutt cblage du CPU)

Machine de Turing universelle

Une seule machine sut pour tout calculer ! Astuce : on cache un codage dune M.d.T. dans les donnes de la machine universelle, qui ensuite simule cette M.d.T. Autrement dit : on peut crire en M.d.T un interprte de M.d.T. . . Dix ans avant le premier ordinateur polyvalent (encore que, cf Jacquard, Babbage, Pascal. . . ). Plus de dtails ? cours de M1 Calculabilit et Complexit . . .

Implmentation des machines

Mthodes dimplmentation
Spcication S dune machine abstraite + Programme P crit pour S + Entre I de P

Rsultat R

Le problme de lvaluation : Comment calculer R ? Linterprtation : on ralise S par un programme Interprete, alors : R = Interprete(P, I)
(Mais qui value le programme Interprete ?)

La compilation : on traduit le programme P en un programme P quivalent que lon sait dj valuer : R = P (I)

Comment interprter ecacement ?

Le sujet de ce cours limplmentation ecace des interprtes. Trois grandes directions :


1. Des techniques dcriture dinterprte. 2. Le choix de langages simples interprter. 3. La virtualisation.

Comment crire un interprte ?

Comment crire un interprte de OCaml en OCaml ? Trois ingrdients :


un type expression mimant les constructions du langage ; un type value des rsultats possibles (int/bool/fun) ; un environnement associant chaque variable sa valeur.

(cf. le code) Bilan : simple, portable mais trs lent.

Comparaison avec le code natif

Le code natif est le langage interprt par la machine hte. Cest le moyen le plus ecace de calculer sur cette machine. Regardons de plus prs le code binaire laide dobjdump. Bilan : non portable mais trs rapide.

Un code binaire portable : le code-octet

Les machines virtuelles des langages OCaml, Java ou CLR sont des approximations raisonnables des machines physiques existantes. Leur proximit avec les architectures matrielles sur lesquelles elles sont excutes permet de rduire au minimum la couche dinterprtation (i.e. le travail de linterprte). Nous tudierons prcisment limplmentation de la VM de Java et dOCaml. On peut mme totalement supprimer la couche dinterprtation laide de techniques de compilation appliques juste avant lvaluation. Nous parlerons de ces techniques utilises dans la JVM et dans des mulateurs. Bilan : relative simplicit, portabilit et rapidit raisonnable.

Comment interprter en toute scurit ?

Le code-octet, une donne comme une autre ?

Le code-octet est une application directe de larchitecture de Von Neumann : le programme peut tre vu comme une donne quelconque. Cependant, en pratique, si on tlcharge une mise--jour sur sa carte bancaire, qui nous garantit quelle ne mettra pas mal lintgrit de notre compte en banque ? En tant que donne excutable, le code-octet doit tre manipul avec prcaution. Les solutions connues :
lauthentication de lorigine du code-octet (certicats, etc.) ; lanalyse statique : on rejette les programmes dont on na pas pu prouver automatiquement le bon comportement. la sandbox (bac sable) : on virtualise la machine hte en contrlant les accs aux informations et priphriques critiques.

Fonctionnement du cours

Un cours/TD

Horaire : mercredi de 12h30 14h30. Le cours sera assur par Yann Rgis-Gianas. Le TD sera assur par Alexandre Pilkiewicz. valuation :
1ere session : 2/3 examen + 1/3 c.c. 2eme session : max (examen, 2/3 examen + 1/3 c.c.)

Le contrle continu sera un TP not. Page du cours : http://www.pps.jussieu.fr/~yrg. Inscrivez-vous sur la mailing-list !

Bibliographie
Cours atypique, donc pas de livre tout-en-un. Sur les machines de Turing : Calculabilit et dcidabilit Jean-Michel Autebert. Masson, 1992. Sur Caml : Dveloppement dapplications avec Objective Caml E. Chailloux, P. Manoury, et B. Pagano, ditions OReilly www.pps.jussieu.fr/Livres/ora/DA-OCAML/index.html Voir aussi : cristal.inria.fr/~lebotlan/docaml_html et http://cadmium.x9c.fr/distrib/caml-instructions.pdf Sur Java : The Java Virtual Machine J. Meyer et T. Downing Gnralits : Virtual Machines Ian D. Craig, Springer

Synthse

QCM : Question 1

Parmi ces systmes, lesquels utilisent des modles de calcul squentiels ? Les processus chimiques Les processus biologiques Du code binaire i386 Une requte SELECT de SQL

QCM : Question 2

Une machine virtuelle : est lmulation logiciel dune machine abstraite excute toujours plus rapidement les programmes que sa machine hte est irrelle simplmente toujours en assembleur

QCM : Question 3

laide dune machine virtuelle, on peut sassurer que seuls des programmes inoensifs sont excuts. sassurer que seuls les programmes dangereux ne seront pas autoriss sexcuter. faire fonctionner un programme crit en code i386 sur une machine PPC . valuer un programme quelque soit le langage dans lequel il est crit.

QCM : Question 4

Un interprte, cest la mme chose quun compilateur. un programme qui excute un autre programme. par exemple, un micro-processeur. par exemple, la machine virtuelle JAVA.

QCM : Question 5

Java est un langage : interprt uniquement. compil et interprt. de programmation qui a plusieurs implmentations.

QCM : Question 6

Une analyse statique excute un programme une premire fois avant lexcuter pour de bon. sert exhiber des proprits de lvaluation dun programme. ne peut pas rpondre toutes les questions sur tous les programmes.

Le premier TD : implantation dune machine virtuelle

Concours ICFP 2006

Le concours ICFP est un concours de programmation qui a lieu tous les ans, au mois de juillet. Ldition 2006 consistait en une srie de problmes dont la premire tape tait lcriture du machine virtuelle (je vous laisse dcouvrir quels taient les problmes suivants). Le premier TD consiste implanter cette machine, dans le langage de votre choix, partir des spcications qui ont t fournies par les organisateurs du concours.