Comment le BIOS peut-il bloquer la virtualisation?

26

Je commence à travailler avec Docker et après quelques heures à essayer de le faire fonctionner, j'ai découvert que mon BIOS le bloquait et que je devais ajuster les paramètres du BIOS. On m'a dit que le BIOS était en quelque sorte lié à la carte mère.

Comment le BIOS peut-il bloquer ce type de processus, annulant le système d'exploitation?

Alvaro Joao
la source
14
Vous l'avez en arrière. Les paramètres du BIOS pour la virtualisation indiquent au CPU d'autoriser un type spécifique de traitement. si les extensions de virtualisation ne sont pas activées dans le bios, le CPU ne pourra pas exécuter le programme. La situation est un peu comme essayer d'exécuter un programme compilé pour une architecture de processeur DEC Alpha sur un système x64. sans les extensions, le programme tentera d'exécuter des instructions que le CPU ne comprend pas. Votre Docker se bloque de l'exécution car il a détecté que votre CPU tel qu'il est actuellement configuré ne peut pas l'exécuter.
Frank Thomas

Réponses:

37

Ce n'est pas que le CPU bloque un programme; il n'a pas un concept d'applications à ce niveau bas. Le problème est que Docker sur les systèmes d'exploitation non Linux peut nécessiter une virtualisation matérielle. Vous n'avez pas spécifié votre système d'exploitation, mais j'ai fait un tout petit peu de surveillance et j'ai découvert que vous utilisez probablement Windows.

La virtualisation matérielle est une fonctionnalité du processeur qui, comme vous pouvez le deviner d'après son nom, permet au processeur d'aider à la virtualisation. Sur de nombreuses machines, vous devez l'activer dans le BIOS. C'est en partie pour éviter les problèmes de sécurité . Fondamentalement, vous ne pouvez pas démarrer un programme car il a tenté d'utiliser une fonctionnalité qui était effectivement absente au lieu d'être activement bloquée.

Ben N
la source
14
a tiny bit of snoopingHa..ha
bs677
oui j'utilise un windows 7! Merci pour l'explication!!! Je comprends maintenant!
Alvaro Joao
Je connais ce paramètre mais je ne suis toujours pas clair, qu'est-ce que la virtualisation matérielle (dans le contexte du paramètre BIOS)?
Celeritas
2
@Celeritas Hardware virtualization est un ensemble de fonctionnalités fournies par le CPU et le BIOS qui rendent l'exécution des machines virtuelles plus efficace, par exemple en gérant de manière transparente les accès à la mémoire effectués par la machine virtuelle d'une manière plus efficace que ce qui peut être fait au niveau logiciel pur, et gérer / piéger des instructions "privilégiées" telles que les opérations d'E / S pour que le logiciel de virtualisation les gère plus efficacement.
Rétablir Monica - ζ--
2
@ RACING121 Le N signifie NSA :)
Ben N
41

La réponse de Ben N est clairement la plus utile et la plus claire.

Pour ceux qui se demandent encore, voici cependant toute l'histoire.


La virtualisation est réalisée avec l'assistance matérielle du CPU. Puisqu'un système d'exploitation virtualisé interférerait avec celui de l'hôte, car ils se disputent les mêmes ressources, un mécanisme est nécessaire pour empêcher l'invité d'avoir un accès incontrôlé au matériel. Cela peut être dû à un logiciel, à des techniques lentes ou à l'aide du processeur.

La virtualisation assistée par matériel est implémentée avec des instructions spécifiques et facultatives , vous pouvez en lire plus dans les chapitres 23, 24, 25, 26, 27 et 28 du manuel Intel 3B, partie 3 . Le logiciel doit d'abord vérifier que ces instructions sont prises en charge, avant de tenter de les utiliser.

Pour des raisons de sécurité, le CPU a un registre spécial, c'est un MSR , appelé IA32_FEATURE_CONTROL qui contient des bits indiquant avec une fonctionnalité à activer ou désactiver.
Citant

Le bit 0 est le bit de verrouillage. Si ce bit est clair, VMXON provoque une exception de protection générale. Si le bit de verrouillage est défini, WRMSR à ce MSR provoque une exception de protection générale; le MSR ne peut pas être modifié avant une condition de réinitialisation à la mise sous tension . Le BIOS système peut utiliser ce bit pour fournir une option de configuration permettant au BIOS de désactiver la prise en charge de VMX. Pour activer la prise en charge VMX dans une plate-forme, le BIOS doit définir le bit 1, le bit 2 ou les deux (voir ci-dessous), ainsi que le bit de verrouillage.

Le point fondamental est qu'une fois le registre verrouillé, il ne peut pas être déverrouillé avant la mise sous tension .

Étant donné que le BIOS / UEFI vient en premier, il a le pouvoir de désactiver la virtualisation en effaçant les bits appropriés et en verrouillant le registre avant qu'un système d'exploitation puisse empêcher cela. Lorsque la fonctionnalité de virtualisation est désactivée de cette façon, le processeur signale que l'extension d'instruction facultative est manquante (et en fait si elle est utilisée) et le logiciel ne peut donc pas utiliser la virtualisation matérielle.

Margaret Bloom
la source
2
C'est un très bon complément à la question. La plupart des gens ne savent pas que le paramètre nécessite une réinitialisation pour changer, il ne peut donc pas être activé "à la volée" lorsque le système d'exploitation est en cours d'exécution.
Tonny
OHH donc c'est comme ça que ça marche! Je l'ai googlé et j'ai trouvé votre réponse (c'est ce qui m'intéresse, pour mes concepts personnels)
Paul Stelian