thumb|Machine virtuelle des assistants personnels Palm.

En informatique, une machine virtuelle (anglais virtual machine, abr. VM) est une virtualisation ou émulation d'un appareil informatique créée par un logiciel d'émulation ou instanciée sur un hyperviseur. 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 Karen Hazzah, Writing Windows VxDs and device drivers, Focal Press - 1996, .

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), ce qui permet une forte portabilité des logiciels et la gestion de systèmes hérités 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).

D’autre part, il y a la récupération de données, dans ce cas, la machine virtuelle agit comme un conteneur qui a tous les journaux d’activité, cependant, le disque dur de la machine virtuelle peut être chiffré.

La machine virtuelle peut être utilisée pour tester des outils d’origine douteuse. Pour tester un logiciel douteux sur une machine virtuelle, vous devez désactiver la machine virtuelle de la carte réseau avant de tester les logiciels malveillants.

Les inconvénients des machines virtuelles sont d'une part des performances brutes sensiblement inférieures à une exécution sur le matériel en natif (ce qui peut rendre malaisé le test de jeux 3D), d'autre part de consommer une petite partie de la mémoire réelle pour leur propre fonctionnement. Leurs avantages sont de permettre des tests de variantes d'installation sur des machines simulées possédant des tailles de RAM, de mémoire graphique et des nombres de processeurs très divers.

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

Histoire La notion de machine virtuelle fait son apparition dès 1936 dans le domaine de la logique, lorsque Turing invente la machine de Turing universelle. Celle-ci permet de 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 qui tout seul n'offrait pas la possibilité d'utilisation en temps partagé Computerworld, Vol. 9 - N° 33, août 1975, .

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 (CP). Il a évolué depuis en z/VM aux capacités d'adressage plus étendues, toujours utilisé en 2016.

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 InfoWorld, Vol. 11 - N° 7, févr. 1989, .

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 fussent 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 Network World, Vol. 12 - N° 50, décembre 1995, .

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, la section Virtualisation) InfoWorld, Vol. 21 - N° 16, avril 1999, . 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 vignette|capture d'écran du logiciel Oracle VM VirtualBox utiliser pour exploiter des machines virtuelles

Émulation

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, un système d'exploitation 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 Harry Henderson, Encyclopedia of computer science and technology, Infobase Publishing - 2009, James Edward Smith et Ravi Nair, Titre Virtual machines: versatile platforms for systems and processes, Elsevier - 2005, .

Multitâches

Les machines virtuelles sont utilisées depuis les années 1970 pour mettre en œuvre du multitâches, c'est-à-dire 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 F. J. M. Laver, An introduction to the uses of computers, CUP Archive - 1976, .

Machine virtuelle de haut niveau

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 James Edward Smith et Ravi Nair, Virtual machines: versatile platforms for systems and processes, Elsevier - 2005, .

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

La spécification technique de la machine virtuelle Java ou JVM, définie en 1995 par la société Sun Microsystems, mentionne le jeu d'instructions du processeur, le format des fichiers 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 » (« é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) Joshua Engel, Programming for the Java virtual machine, Addison-Wesley Professional - 1999,.

Il existe plusieurs implémentations de la JVM, dont la plus utilisée est HotSpot de l'entreprise Oracle Corporation.

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 Ivanka Menken et Gerard Blokdijk, Virtualization: The Complete Cornerstone Guide to Virtualization Best Practices, Lulu.com - 2008, .

KVM, QEMU, VMware, VirtualBox, VirtualPC, Xen et Bochs sont quelques logiciels de virtualisation. Serveur dédié virtuel

Un serveur dédié virtuel (anglais : virtual private server, abr. VPS) est une machine virtuelle qui simule un serveur informatique destiné à un consommateur en particulier. La machine utilisée pour la simulation sert 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 Judith Hurwitz - Robin Bloor - Marcia Kaufman et Fern Halper, Cloud Computing For Dummies, For Dummies - 2009, . Un serveur informatique physique peut ainsi accueillir plusieurs serveurs dédiés virtuels partageant les ressources et cloisonnés les uns des autres.

Machine virtuelle parallèle 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 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 Michael J. Jipping, Smartphone operating system concepts with Symbian OS: a tutorial guide, John Wiley and Sons - 2007, .

Techniques

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 Maximum PC, décembre 2008, .

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 de mémoire dans une machine réellement équipée de , l'overbooking est mis en œuvre en copiant le contenu inutilisé de la mémoire vers le disque dur Michael A. Davis - Sean Bodmer et Aaron LeMasters, Hacking exposed malware & rootkits: malware & rootkits security secrets & solutions, McGraw Hill Professional, 2009, .

Le juste à temps La compilation juste-à-temps (anglais just-in-time, abr. 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.