machine virtuelle (VM) qui fournit une plateforme système complète et prend en charge l' exécution d'un système d'exploitation (OS) complet . Ces machines virtuelles émulent généralement une architecture existante et sont conçues soit pour fournir une plateforme permettant d'exécuter des programmes lorsque le matériel physique n'est pas disponible (par exemple, sur des plateformes obsolètes), soit pour disposer de plusieurs instances de machines virtuelles, ce qui permet une utilisation plus efficace des ressources de calcul, tant en termes de consommation d'énergie que de rentabilité (phénomène connu sous le nom de virtualisation matérielle , élément clé du cloud computing ), soit les deux. Une VM a été initialement définie par Popek et Goldberg comme « une réplique efficace et isolée d'une machine physique ».
émulés différents de l' architecture du jeu d'instructions (ISA) de l'hôte, par émulation ou en utilisant la compilation juste-à-temps .Les principaux inconvénients des machines virtuelles sont les suivants :
- Une machine virtuelle est moins efficace qu'une machine physique lorsqu'elle accède indirectement au disque dur de l'hôte.
- Lorsque plusieurs machines virtuelles s'exécutent simultanément sur le disque dur de l'hôte, leurs performances (vitesse d'exécution et protection contre les logiciels malveillants) peuvent varier et/ou être instables. Cela dépend de la charge de données imposée au système par les autres machines virtuelles, sauf si le logiciel de virtualisation choisi assure une isolation temporelle entre elles .
- Les protections contre les logiciels malveillants pour les machines virtuelles ne sont pas nécessairement compatibles avec celles de l'hôte et peuvent nécessiter un logiciel distinct.
Plusieurs machines virtuelles exécutant leur propre système d'exploitation invité sont fréquemment utilisées pour la consolidation de serveurs afin d'éviter les interférences entre des machines virtuelles distinctes sur la même plateforme physique.
Le désir d'exécuter plusieurs systèmes d'exploitation a été la motivation initiale des machines virtuelles, afin de permettre le partage du temps entre plusieurs systèmes d'exploitation monotâches. À certains égards, une machine virtuelle système peut être considérée comme une généralisation du concept de mémoire virtuelle qui l'a historiquement précédée. Le CP/CMS d'IBM , premier système à permettre une virtualisation complète , implémentait le partage du temps en fournissant à chaque utilisateur un système d'exploitation monoposte, le CMS . Contrairement à la mémoire virtuelle, une machine virtuelle système autorisait l'utilisateur à écrire des instructions privilégiées dans son code. Cette approche présentait certains avantages, comme l'ajout de périphériques d'entrée/sortie non autorisés par le système standard.
Avec l'évolution de la technologie de la mémoire virtuelle pour la virtualisation, de nouveaux systèmes de surallocation de mémoire peuvent être appliqués pour gérer le partage de mémoire entre plusieurs machines virtuelles sur un même système d'exploitation. Il est possible de partager des « pages mémoire » au contenu identique entre plusieurs machines virtuelles s'exécutant sur la même machine physique, ce qui peut permettre de les mapper sur une même page physique grâce à une technique appelée fusion de pages identiques du noyau (Kernel SamePage Merging ). Ceci est particulièrement utile pour les pages en lecture seule, telles que celles contenant des segments de code ; c'est notamment le cas pour plusieurs machines virtuelles exécutant le même logiciel ou des logiciels similaires, des bibliothèques logicielles, des serveurs web, des composants intermédiaires, etc. Les systèmes d'exploitation invités n'ont pas besoin d'être compatibles avec le matériel hôte, ce qui permet d'exécuter différents systèmes d'exploitation sur le même ordinateur (par exemple, Microsoft Windows , Linux ou des versions antérieures d'un système d'exploitation) afin de prendre en charge les futurs logiciels.
L'utilisation de machines virtuelles pour prendre en charge des systèmes d'exploitation invités distincts est courante dans le domaine des systèmes embarqués . Un cas d'utilisation typique consiste à exécuter un système d'exploitation temps réel simultanément avec un système d'exploitation complexe de préférence, tel que Linux ou Windows. Une autre application concerne les logiciels novateurs et non éprouvés, encore en phase de développement, qui s'exécutent alors dans un environnement isolé (sandbox) . Les machines virtuelles présentent d'autres avantages pour le développement de systèmes d'exploitation, notamment un accès amélioré au débogage et des redémarrages plus rapides.
Techniques
Différentes techniques de virtualisation sont utilisées selon l'usage souhaité. L'exécution native repose sur la virtualisation directe du matériel sous-jacent, offrant ainsi de multiples « instances » de la même architecture qu'une machine physique, capables d'exécuter des systèmes d'exploitation complets. Certaines machines virtuelles peuvent également émuler différentes architectures et permettre l'exécution d'applications et de systèmes d'exploitation conçus pour un autre processeur ou une autre architecture. La virtualisation au niveau du système d'exploitation permet de partitionner les ressources d'un ordinateur grâce à la prise en charge par le noyau de plusieurs instances d'espace utilisateur isolées , généralement appelées conteneurs et dont l'apparence et le comportement peuvent être similaires à ceux de machines physiques pour l' utilisateur final . Certaines architectures informatiques sont compatibles avec la virtualisation assistée par matériel , qui permet une virtualisation complète et efficace grâce aux capacités matérielles spécifiques à la virtualisation, principalement celles des processeurs hôtes.
Virtualisation du matériel brut sous-jacent (exécution native)
Le système pionnier utilisant ce concept fut le CP-40 d'IBM , première version (1967) du CP/CMS d'IBM (1967-1972) et précurseur de la famille VM d'IBM (1972-présent). Avec l'architecture VM, la plupart des utilisateurs exécutent un système d'exploitation monoposte interactif relativement simple, le CMS , en tant qu'« invité » par-dessus le programme de contrôle de la machine virtuelle ( VM-CP ). Cette approche permettait de conserver une conception simple du CMS, comme s'il fonctionnait de manière autonome ; le programme de contrôle assurant discrètement les services multitâches et de gestion des ressources « en arrière-plan ». Outre le CMS, les communications et autres tâches système sont effectuées par des machines virtuelles multitâches (RSCS, GCS, TCP/IP, UNIX), et les utilisateurs peuvent exécuter n'importe quel autre système d'exploitation IBM, tel que MVS , voire un nouveau CP ou désormais z/OS . Même le CMS simple pouvait être exécuté dans un environnement multithread (LISTSERV, TRICKLE). z/VM est la version actuelle de VM et permet de prendre en charge des centaines, voire des milliers de machines virtuelles sur un mainframe donné. Certaines installations utilisent Linux sur IBM Z pour exécuter des serveurs web , Linux faisant office de système d'exploitation au sein de nombreuses machines virtuelles.
La virtualisation complète est particulièrement utile dans le développement des systèmes d'exploitation, car elle permet d'exécuter simultanément du code expérimental et des versions plus anciennes et plus stables, chacune dans une machine virtuelle distincte. Ce processus peut même être récursif : IBM a débogué de nouvelles versions de son système d'exploitation pour machines virtuelles, VM , dans une machine virtuelle exécutée sous une version antérieure de VM, et a même utilisé cette technique pour simuler du nouveau matériel.
L' architecture standard du jeu d'instructions x86, telle qu'utilisée dans les PC modernes, ne répond pas aux exigences de virtualisation de Popek et Goldberg . En particulier, il n'existe aucun mode d'exécution où toutes les instructions machine sensibles sont systématiquement interceptées, ce qui permettrait une virtualisation par instruction.
Malgré ces limitations, plusieurs logiciels parviennent à virtualiser l'architecture x86 , même si la recompilation dynamique du code privilégié, initialement implémentée par VMware , engendre une certaine surcharge de performances par rapport à une machine virtuelle exécutée sur une architecture nativement virtualisable comme l'IBM System/370 ou le Motorola MC68020 . Aujourd'hui, d'autres logiciels tels que Virtual PC , VirtualBox , Parallels Workstation et Virtual Iron parviennent à implémenter la virtualisation sur du matériel x86.
Intel et AMD ont introduit des fonctionnalités dans leurs processeurs x86 pour permettre la virtualisation matérielle .
Outre la virtualisation des ressources d'une seule machine, plusieurs nœuds indépendants d'un cluster peuvent être combinés et accessibles comme une seule machine virtuelle NUMA .
Émulation d'un système non natif
Les machines virtuelles peuvent également jouer le rôle d' émulateur , permettant ainsi d'exécuter des applications logicielles et des systèmes d'exploitation conçus pour une autre architecture de processeur .
Virtualisation au niveau du système d'exploitation
Par exemple, Solaris Zones prend en charge plusieurs systèmes d'exploitation invités exécutés sous le même système d'exploitation, tel que Solaris 10. Les systèmes d'exploitation invités peuvent utiliser le même niveau de noyau avec la même version du système d'exploitation, ou être une copie distincte du système d'exploitation avec une version de noyau différente grâce à Solaris Kernel Zones. Solaris Native Zones exige également que le système d'exploitation hôte soit une version de Solaris ; les autres systèmes d'exploitation d'autres fabricants ne sont pas pris en charge. Toutefois, Solaris Branded Zones est nécessaire pour utiliser d'autres systèmes d'exploitation en tant que zones.celui des partitions de charge de travail système (WPAR), introduites dans la version 6.1 du système d'exploitation IBM AIX. Les WPAR système sont des partitions logicielles s'exécutant sous une instance de l'environnement global du système d'exploitation AIX.
L'architecture au niveau du système d'exploitation présente une faible surcharge, ce qui contribue à optimiser l'utilisation des ressources serveur. La virtualisation n'induit qu'une surcharge négligeable et permet d'exécuter des centaines de serveurs privés virtuels sur un seul serveur physique. En revanche, des approches telles que la virtualisation complète (comme VMware ) et la paravirtualisation (comme Xen ou UML ) ne peuvent atteindre un tel niveau de densité, en raison de la surcharge liée à l'exécution de plusieurs noyaux. Par ailleurs, la virtualisation au niveau du système d'exploitation ne permet pas d'exécuter différents systèmes d'exploitation (c'est-à-dire différents noyaux), bien que différentes bibliothèques, distributions, etc. soient possibles. Différentes techniques de virtualisation sont utilisées, selon l'usage souhaité. L'exécution native repose sur la virtualisation directe du matériel sous-jacent, fournissant ainsi de multiples « instances » de la même architecture qu'une machine physique, capables d'exécuter des systèmes d'exploitation complets. Certaines machines virtuelles peuvent également émuler différentes architectures et permettre l'exécution d'applications et de systèmes d'exploitation conçus pour un autre processeur ou une autre architecture. La virtualisation au niveau du système d'exploitation permet de partitionner les ressources d'un ordinateur grâce à la prise en charge par le noyau de plusieurs instances d'espace utilisateur isolées, généralement appelées conteneurs et qui peuvent apparaître et se comporter comme de véritables machines pour l'utilisateur final. Certaines architectures informatiques sont capables de virtualisation assistée par matériel, ce qui permet une virtualisation complète et efficace grâce aux capacités matérielles dédiées à la virtualisation, principalement celles des processeurs hôtes.
Matériel compatible avec la virtualisation
Voici quelques exemples de matériel compatible avec la virtualisation :
Zone de confiance ARM- AMD-V (anciennement nommé Pacifica)
- Intel VT-x (anciennement nommé Vanderpool)
Exemples de matériel doté de fonctionnalités permettant l'émulation de systèmes non natifs :
Systèmes Honeywell 200/2000 Liberator remplaçant les systèmes IBM 14xx