La machine virtuelle fournit-elle un environnement qui est fondamentalement indiscernable d'une machine physique ? Bien sûr, il y aura certaines différences pratiques (comme les hachures d'échappement des appels de l'hyperviseur noms de composants matériels factices, etc.) qui permettent de détecter une machine virtuelle, mais y aura-t-il des incompatibilités ?
Les accès au matériel passent toujours par le système d'exploitation hôte.
Les systèmes d'exploitation des PC sont découplés de la plupart des matériels depuis longtemps maintenant. Windows et Linux utilisent tous deux des pilotes qui sont les mandataires de l'accès au matériel. De ce fait, il est possible de fournir des pilotes "paravirtualisés" qui sont un proxy pour travailler dans un environnement virtuel, ce qui rend les choses beaucoup plus faciles à mettre en œuvre que l'émulation - où vous devriez concevoir des programmes qui reproduisent à 100% tous les comportements bizarres et parfois non documentés des CPU et du matériel.
Si l'environnement est entièrement compatible avec une machine physique, alors les machines virtuelles imbriquées sont-elles possibles ?
L'instruction VMXON qui "active" la virtualisation du CPU ne fonctionnera pas lorsque le CPU est "dans" une machine virtuelle. Dans ce cas, une "sortie de la VM" se produit - ce qui signifie que le contrôle est renvoyé à l'hyperviseur - et le système d'exploitation hôte doit alors décider de ce qu'il doit faire (en émulant généralement une exception "instruction illégale"). Le système d'exploitation hôte peut émuler cette instruction et le reste du comportement de virtualisation du CPU s'il le souhaite (mais cela serait difficile et plus lent).
Si non, cela signifie-t-il que le système d'exploitation invité doit être spécifiquement adapté pour fonctionner dans une machine virtuelle ? Si oui, est-ce que cela signifie-t-il que la plupart des systèmes d'exploitation actuels ont déjà été adaptés à la plupart des machines virtuelles ? vendeurs ?
Voir mon premier point. Des pilotes paravirtualisés pour VMWare et d'autres hyperviseurs existent. Le système d'exploitation de base lui-même n'a pas vraiment besoin de changer, sauf si A) il s'agit d'un système étroitement lié à un matériel spécifique, comme DOS, et B) il est décidé qu'il vaut mieux changer le système d'exploitation que d'émuler le matériel qu'il attend.
Ces éléments sont-ils différents pour la virtualisation basée sur un logiciel par rapport à la virtualisation basée sur un ordinateur ? matériel ?
La virtualisation basée sur des logiciels est plus lente et probablement moins sûre.
Quelle est la différence exacte entre la virtualisation basée sur un logiciel et la virtualisation matérielle ?
En simplifiant un peu, les processeurs x86 ont depuis longtemps généralement deux niveaux de privilèges, le mode utilisateur et le superviseur, ou mode noyau. La prise en charge de la virtualisation matérielle ajoute un niveau de privilège supérieur au superviseur, c'est-à-dire l'hyperviseur. Un exemple de différence est que la MMU que le système d'exploitation d'un processeur utilise pour gérer les pages de mémoire est étendue pour permettre aux hyperviseurs de travailler avec elle. Cela permet à un hyperviseur d'allouer et d'isoler plus facilement la mémoire pour une VM spécifique. L'IOMMU est également une fonctionnalité matérielle qui offre de nombreuses facilités qui rendent la virtualisation plus efficace.