Machine virtuelle

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir VM.
Machine virtuelle des assistants personnels Palm.

En informatique, une machine virtuelle (anglais virtual machine, abr. VM) est une illusion d'un appareil informatique créée par un logiciel d'émulation. Le logiciel d'émulation simule la présence de ressources matérielles et logicielles telles que la mémoire, le processeur, le disque dur, voire le système d'exploitation et les pilotes, permettant d'exécuter des programmes dans les mêmes conditions que celles de la machine simulée[1].

Un des intérêts des machines virtuelles est de pouvoir s'abstraire des caractéristiques de la machine physique utilisée (matérielles et logicielles — notamment système d'exploitation), permettant une forte portabilité des logiciels et la gestion de systèmes hérités étant parfois conçus pour des machines ou des environnements logiciels anciens et plus disponibles.

Les machines virtuelles sont également utilisées pour isoler des applications pour des raisons de sécurité, pour augmenter la robustesse d'un serveur en limitant l'impact des erreurs système ou pour émuler plusieurs machines sur une seule machine physique (virtualisation).

L'inconvénient des machines virtuelles est généralement des performances brutes inférieures à l'exécution dans l'environnement natif.

L'usage de machines virtuelles est l'un des principes fondamentaux de la technologie Java.

Histoire[modifier | modifier le code]

La notion de machine virtuelle a commencé à faire surface dès 1936 dans le domaine de la logique, lorsque Turing découvre l'existence de la machine de Turing universelle. Il s'agit en effet de pouvoir simuler le comportement d'une machine - avec pour entrée - un certain programme dont on aimerait simuler l'exécution.

Le produit VM/370, créé par IBM dans les années 1970, permettait à plusieurs usagers d'utiliser en temps partagé un ordinateur qui exécute le système d'exploitation DOS/VSE (en) qui tout seul n'offrait pas la possibilité d'utilisation en temps partagé[2].

VM/370 a été l'un des premiers systèmes de virtualisation en informatique, et le premier à être diffusé à l'échelle industrielle. Il fonctionnait sur les ordinateurs IBM 370, bien qu'une version destinée aux universités ait fonctionné sur le modèle 67 sous le nom de Control program (CP).

En 1989, les logiciels Desqview, Omniview, VM/386 et Windows/386 permettent de simuler des machines virtuelles qui exécutent le système d'exploitation MS-DOS. Les logiciels Desqview et Windows/386 offrent en plus une interface graphique permettant de voir sur un même écran les différentes machines virtuelles en fonctionnement[3].

La machine virtuelle Java a été créée en 1995 par Sun Microsystems. Elle était destinée à exécuter des logiciels téléchargés depuis un serveur Web, ceci quelles que soient les caractéristiques techniques de l'appareil qui télécharge et exécute le logiciel. Le produit est accompagné du langage de programmation Java, inspiré de C++, et promis à devenir un standard de facto[4].

Windows NT et ses successeurs incorporent une machine virtuelle pour simuler une machine qui exécute MS-DOS; Windows Server 2008 propose un hyperviseur intégré. Linux possède lui aussi un environnement de virtualisation Open Source nommé Xen.

Créé en 1999, VMware est un logiciel qui permet d'exécuter simultanément plusieurs systèmes d'exploitation sur une même machine. (voir plus loin : virtualisation)[5]. Une version simplifiée de ce produit de la société VMware, rachetée par EMC Corporation en 2004, a été rendue gratuite par cet éditeur en 2006.

Utilisations[modifier | modifier le code]

Émulation[modifier | modifier le code]

Article détaillé : émulateur.

L'émulation est le fait de mettre en œuvre les fonctionnalités d'un appareil en utilisant un autre appareil offrant des fonctionnalités différentes. Une des utilisations consiste à mettre en œuvre le jeu d'instructions d'un processeur en utilisant un autre processeur. Ceci permet par exemple d'utiliser un ordinateur récent pour exécuter des programmes destinés à un ordinateur ou une console de jeu qui n'existent plus dans le commerce. La simulation s'accompagne d'une baisse significative de la puissance de calcul : la puissance du processeur simulé sera une fraction de celle du processeur simulateur[6],[7].

Multitâches[modifier | modifier le code]

Article détaillé : multitâches.

Les machines virtuelles sont utilisées depuis les années 1970 pour mettre en œuvre du multitâches : permettre à l'ordinateur de réaliser plusieurs opérations simultanément au service de plusieurs utilisateurs. Une machine virtuelle est affectée à chaque utilisateur, lui donnant l'illusion qu'il est le seul à utiliser l'ordinateur. Cette fonctionnalité est maintenant incluse dans tous les systèmes d'exploitation[8].

Machine virtuelle de haut niveau[modifier | modifier le code]

Dans la technique de la machine virtuelle de haut niveau, le code source des programmes est traduit par un compilateur en un code objet intermédiaire, qui sera traduit plus tard en un code machine utilisant le jeu d'instructions spécifique du processeur qui va simuler la machine. Les programmes sont distribués sur le marché sous forme de bytecode - du code intermédiaire - et peuvent être exécutés par tout appareil informatique qui possède le logiciel nécessaire pour simuler cette machine.

Le bytecode utilise un jeu d'instruction d'une machine fictive, qui n'existe pas dans le commerce, et il est conçu pour faire abstraction du jeu d'instruction final qui sera utilisé pour exécuter le programme. Cette technique a été utilisée la première fois pour le langage de programmation Pascal en 1980[9].

La CLI exploitée par Microsoft .NET et la machine virtuelle Java de Sun Microsystems sont des machines virtuelles de haut niveau.

Machine virtuelle Java[modifier | modifier le code]

Article détaillé : Java (technique).

La spécification technique de la machine virtuelle Java, définie par la société Sun Microsystems, mentionne le jeu d'instructions du processeur, le format des fichier exécutables et l'interface de programmation de la bibliothèque standard. La machine virtuelle Java est simulée par un logiciel tel que le Java Runtime Environment. Le slogan de cette technologie est write once, run anywhere (traduction : écrire une fois, utiliser n'importe où) : que le logiciel écrit une seule fois peut être utilisé sur une large palette de machines (qui va du téléphone portable jusqu'au superordinateur)[10].

Virtualisation[modifier | modifier le code]

Article détaillé : virtualisation.

Au sens large, la virtualisation consiste à simuler l'existence de plusieurs machines informatiques en utilisant une seule. Ceci permet en particulier de diminuer les coûts d'achat de matériel informatique et de rentabiliser leur utilisation : Les technologies de 2008 sont si puissantes qu'en condition ordinaire un serveur n'utilise que 10 % des capacités du matériel. La virtualisation permet également de gagner du temps : une courte procédure de modification de la configuration de l'émulateur remplace une longue procédure d'acquisition de matériel informatique[11].

KVM, QEMU, VMware, VirtualBox, VirtualPC, Xen et Bochs sont quelques logiciels de virtualisation.

Serveur dédié virtuel[modifier | modifier le code]

Article détaillé : serveur dédié virtuel.

Un serveur dédié virtuel (anglais : virtual private server abr. VPS) est une machine virtuelle qui simule un serveur informatique dédié à un consommateur en particulier. La machine utilisée pour la simulation sert, à leur insu, plusieurs consommateurs simultanément. Chaque serveur dédié virtuel a son propre espace disque et son propre système d'exploitation, qui peut être installé et redémarré par le consommateur[12].

Machine virtuelle parallèle[modifier | modifier le code]

Une machine virtuelle parallèle est un dispositif qui crée l'illusion d'un seul ordinateur alors que les ressources de plusieurs ordinateurs sont utilisées, permettant ainsi d'augmenter la concurrence des calculs. PVM est un ensemble de bibliothèques logicielles et outils de communication pour les réseaux d'ordinateurs qui permet d’agréger un réseau d'ordinateurs en un seul ordinateur virtuel.

Programmation[modifier | modifier le code]

Une machine virtuelle est un environnement confiné et contrôlé, abrité contre l'utilisation abusive des ressources matérielles. Ceci en fait un environnement de choix pour l'exécution de programmes qui ne sont pas dignes de confiance, tels que des logiciels en cours de mise au point, et tout particulièrement des systèmes d'exploitation ou encore pour l'analyse de malware. De plus l'utilisation pour la programmation de systèmes d'exploitation résout un problème circulaire : les logiciels qui servent au développement et à la mise au point du système d'exploitation ont besoin d'un système d'exploitation[13].

Techniques[modifier | modifier le code]

L'hyperviseur est le logiciel qui contrôle l'utilisation, par les différentes machines virtuelles, du matériel de l'appareil simulateur. Un hyperviseur de Type 2 utilise le système d'exploitation de l'ordinateur simulateur, tandis qu'un hyperviseur de Type 1 n'a pas besoin de ce système d'exploitation sur l'appareil simulateur[14].

Une des fonctionnalités courantes des logiciels hyperviseurs ainsi que des systèmes d'exploitation est de simuler la présence de mémoire centrale par de la mémoire virtuelle. Le mécanisme permet également de simuler la présence de 4 Go de mémoire dans une machine réellement équipée de 1 Go, l'overbooking est mis en œuvre en copiant le contenu inutilisé de la mémoire vers le disque dur[15].

Le juste à temps[modifier | modifier le code]

La compilation juste-à-temps (anglais just-in-time - JIT) est une technique utilisée soit pour simuler un processeur soit pour accélérer l’exécution d'un programme écrit en bytecode. Dans le premier cas, le code machine prévu pour le processeur à simuler est traduit en vue de devenir du code machine pour le processeur qui simule. Le second le programme met un peu plus de temps à se lancer, mais son exécution est plus rapide. L'opération de traduction est réalisée par un logiciel semblable à un compilateur immédiatement avant que le code traduit soit exécuté. Cette technique a été implantée pour le Lisp pour la première fois à la fin des années 1960, la JVM d'Oracle utilise cette technique depuis sa version 1.2 pour des raisons d'efficacité tandis que la machine Dalvik d'Android ne l'utilise pas.

Machine virtuelle à pile[modifier | modifier le code]

La JVM d'Oracle fonctionne sur ce principe.

Machine virtuelle à registre[modifier | modifier le code]

La machine virtuelle Dalvik est basé sur cette technique.

Machine virtuelle de haut niveau[modifier | modifier le code]

Le logiciel ou interpréteur qui met en œuvre une machine virtuelle de haut niveau isole l'application utilisée par l'utilisateur des spécificités de l'ordinateur, c’est-à-dire de celles de son architecture ou de son système d'exploitation. Cette indirection permet au concepteur d'une application de la rendre disponible sur un grand nombre d'ordinateurs sans les contraintes habituelles à la rédaction d'un logiciel portable tournant directement sur l'ordinateur. La compilation juste-à-temps permet dans bien des cas à l'application d'avoir des performances comparables à une application native.

Windows XP et similaires tournent également dans un environnement virtualisé, qui est créé par la couche HAL. En cas de changement de machine physique, on peut en principe ne changer que le HAL sans toucher au reste de son installation Windows.

.NET vs. Java et Java EE[modifier | modifier le code]

La CLI et C# ont plusieurs similarités avec la JVM de Sun et Java. Les deux sont basés sur une machine virtuelle qui cache les détails matériels de l'ordinateur sur lequel leurs programmes s'exécutent. Les deux utilisent leur propre langage intermédiaire bytecode Common Intermediate Language (CIL, anciennement MSIL) pour Microsoft et Java byte-code pour Sun. Avec .NET, le byte-code est toujours compilé avant l'exécution, soit juste-à-temps (JIT), ou en avance en utilisant l'utilitaire ngen.exe. Avec Java, le byte-code est soit interprété, soit compilé en avance ou encore compilé juste-à-temps. Les deux fournissent des bibliothèques de classes extensibles qui résolvent plein de problèmes de programmation courants, et les deux résolvent beaucoup de problèmes de sécurités par la même approche. Les espaces de noms fournis par le .NET Framework ressemblent beaucoup au package de l'API Java EE aussi bien dans le style que dans l'invocation.

.NET dans sa forme complète (à savoir l'implémentation Microsoft) est actuellement disponible entièrement pour Windows et partiellement pour Linux et Mac, alors que Java est entièrement disponible sur presque toutes les plates-formes. Depuis le début, .NET supporte plusieurs langages et demeure indépendant de la plateforme de telle sorte que n'importe qui peut le réimplémenter sur d'autres plates-formes (l'implémentation Microsoft cible uniquement Windows, Windows CE et la Xbox360). La plate-forme Java a été initialement construite pour supporter uniquement le langage Java, mais sur plusieurs systèmes d'exploitation avec le slogan « Write once, run anywhere » (écrit une fois, tourne n'importe où). D'autres langages ont été développés pour la machine virtuelle java, mais ils ne sont pas très utilisés. L'implémentation Java de Sun est open source (ce qui inclut la bibliothèque de classes, le compilateur, la JVM ainsi que quelques autres outils associés à la plate-forme Java) sous la licence GNU GPL.

RIA-RDA[modifier | modifier le code]

De plus en plus de technologies se rejoignent actuellement pour fonctionner côté web et OS. Elles se différencient plus par les outils de production, maintenance que par les technologies utilisées qui se résument en l'utilisation d'un langage de compilation et d'exécution (machine virtuelle) / interprétation et un formalisme xml (xaml, xmm, xul). Ces technologies se retrouvent selon les cas sur des ordinateurs, des téléphones, des pdaphones ou des périphériques multimédia (récepteurs satellite).

Les RIA sont basées sur une machine virtuelle fonctionnant dans un navigateur web. Les RDA sont basées sur une machine virtuelle fonctionnant sur le système d'exploitation. Les RIA et RDA en évoluant sont de plus en plus multi-langage (C#, javascript, java, C#), multi-interface (swing, wpf, flash, AJAX-ui-widgets), multi OS (Mac, Window, unix), multi-matériel (PC, pda, téléphone).

Technologie web et applicatif
Société Technologie Système d'exploitation Langage de programmation Application technologie Web format
Microsoft CLI Microsoft Microsoft .NET C#puis CLR/DLR MFC/ GDI ClickOnce Silverlight XAML .cs→.dll
Novell CLI Microsoft unix/SuSE C#puis CLR/DLR Mono  ? Moonlight
Adobe Flash player Animation flash Actionscript AIR  ? Adobe Flex .as →.swf
Sun Microsystems Java Applet Java java JFC awt-swing Java Web Start JavaFX .java→.class
Netscape navigator unix javascript Gears(google) AJAX XUL SMIL SVG

Exemples[modifier | modifier le code]

Voir aussi[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. (en) Karen Hazzah,Writing Windows VxDs and device drivers,Focal Press - 1996,(ISBN 9780879304386)
  2. (en) Computerworld,Vol. 9 - N° 33,août 1975,(ISSN 0010-4841)
  3. (en) InfoWorld,Vol. 11 - N° 7,févr. 1989,(ISSN 0199-6649)
  4. (en) Network World,Vol. 12 - N° 50, décembre 1995, (ISSN 0887-7661)
  5. (en) InfoWorld,Vol. 21 - N° 16,avr. 1999,(ISSN 0199-6649)
  6. (en) Harry Henderson,Encyclopedia of computer science and technology,Infobase Publishing - 2009,(ISBN 9780816063826)
  7. (en) James Edward Smith et Ravi Nair,Titre Virtual machines: versatile platforms for systems and processes,Elsevier - 2005,(ISBN 9781558609105)
  8. (en)F. J. M. Laver,An introduction to the uses of computers,CUP Archive - 1976,(ISBN 9780521290357)
  9. (en) James Edward Smith et Ravi Nair,Virtual machines: versatile platforms for systems and processes,Elsevier - 2005,(ISBN 9781558609105)
  10. (en) Joshua Engel,Programming for the Java virtual machine,Addison-Wesley Professional - 1999,(ISBN 9780201309720)
  11. (en) Ivanka Menken et Gerard Blokdijk,Virtualization: The Complete Cornerstone Guide to Virtualization Best Practices,Lulu.com - 2008,(ISBN 9781921523915)
  12. (en) Judith Hurwitz - Robin Bloor - Marcia Kaufman et Fern Halper,Cloud Computing For Dummies,For Dummies - 2009,(ISBN 9780470484708)
  13. (en) Michael J. Jipping,Smartphone operating system concepts with Symbian OS: a tutorial guide,John Wiley and Sons - 2007,(ISBN 9780470034491)
  14. (en) Maximum PC,déc. 2008,(ISSN 1522-4279)
  15. (en) Michael A. Davis - Sean Bodmer et Aaron LeMasters,Hacking exposed malware & rootkits: malware & rootkits security secrets & solutions,McGraw Hill Professional, 2009,(ISBN 9780071591188)

Liens externes[modifier | modifier le code]