Wie kann das BIOS die Virtualisierung blockieren?

26

Ich fange an, mit Docker zu arbeiten, und nachdem ich einige Stunden lang versucht hatte, es zum Laufen zu bringen, stellte ich fest, dass mein BIOS es blockierte und dass ich die BIOS-Einstellungen anpassen musste. Mir wurde gesagt, dass das BIOS irgendwie mit dem Motherboard zusammenhängt.

Wie kann das BIOS diese Art von Prozess blockieren und das Betriebssystem außer Kraft setzen?

Alvaro Joao
quelle
14
Du hast es rückwärts. Die BIOS-Einstellungen für die Virtualisierung weisen die CPU an, eine bestimmte Art der Verarbeitung zuzulassen. Wenn die Virtualisierungserweiterungen im BIOS nicht aktiviert sind, kann die CPU das Programm nicht ausführen. Die Situation ähnelt dem Versuch, ein für eine DEC Alpha-Prozessorarchitektur kompiliertes Programm auf einem x64-System auszuführen. Ohne die Erweiterungen versucht das Programm, Anweisungen auszuführen, die die CPU nicht versteht. Ihr Docker blockiert die Ausführung, da festgestellt wurde, dass Ihre CPU in der derzeit konfigurierten Form diese nicht ausführen kann.
Frank Thomas

Antworten:

37

Es ist nicht so, dass die CPU ein Programm blockiert. Es gibt kein Konzept für Apps auf diesem niedrigen Niveau. Das Problem ist, dass Docker auf Nicht-Linux-Betriebssystemen eine Hardwarevirtualisierung erfordern kann. Sie haben Ihr Betriebssystem nicht angegeben, aber ich habe ein bisschen geschnüffelt und festgestellt, dass Sie wahrscheinlich Windows verwenden.

Hardwarevirtualisierung ist eine CPU-Funktion, mit der die CPU, wie der Name vermuten lässt, bei der Virtualisierung helfen kann. Auf vielen Rechnern müssen Sie es im BIOS aktivieren. Dies dient zum Teil der Vermeidung von Sicherheitsproblemen . Grundsätzlich konnte ein Programm nicht gestartet werden, da versucht wurde, eine Funktion zu verwenden, die effektiv nicht vorhanden war und nicht aktiv blockiert wurde.

Ben N
quelle
14
a tiny bit of snoopingHa..ha
bs677
ja ich benutze ein windows 7! Danke für die Erklärung!!! Ich verstehe es jetzt!
Alvaro Joao
Ich bin mit dieser Einstellung vertraut, aber immer noch unklar, was genau ist Hardware-Virtualisierung (im Kontext der BIOS-Einstellung)?
Celeritas
2
Die @ Celeritas-Hardwarevirtualisierung ist eine Reihe von Funktionen, die von der CPU und dem BIOS bereitgestellt werden und die das Ausführen virtueller Maschinen effizienter machen, z "privilegierte" Anweisungen wie E / A-Vorgänge verarbeiten / abfangen, damit die Virtualisierungssoftware effizienter arbeitet.
ζ--
2
@ RACING121 Das N steht für NSA :)
Ben N
41

Die Antwort von Ben N ist eindeutig die nützlichste und klarste.

Für diejenigen, die sich noch wundern, ist hier jedoch die ganze Geschichte.


Die Virtualisierung erfolgt mit Hardware-Unterstützung der CPU. Da ein virtualisiertes Betriebssystem das Host-Betriebssystem stören würde, da es um dieselben Ressourcen konkurriert, ist ein Mechanismus erforderlich, um zu verhindern, dass der Gast unkontrollierten Zugriff auf die Hardware hat. Dies kann mit Software, langsamen Techniken oder mit Unterstützung der CPU geschehen.

Die hardwaregestützte Virtualisierung wird mit speziellen optionalen Anweisungen implementiert. Informationen hierzu finden Sie in den Kapiteln 23, 24, 25, 26, 27 und 28 des Intel Manual 3B Part 3 . Die Software muss zuerst prüfen, ob diese Anweisungen unterstützt werden, bevor sie verwendet werden.

Aus Sicherheitsgründen hat die CPU ein spezielles Register, es ist ein MSR mit dem Namen IA32_FEATURE_CONTROL , das Bits enthält, die mit der Funktion zum Aktivieren oder Deaktivieren angeben .
Zitieren

Bit 0 ist das Sperrbit. Wenn dieses Bit gelöscht ist, verursacht VMXON eine allgemeine Schutzausnahme. Wenn das Sperrbit gesetzt ist, verursacht WRMSR für dieses MSR eine allgemeine Schutzausnahme. Das MSR kann erst nach einem Neustart geändert werden . Das System-BIOS kann dieses Bit verwenden, um eine Setup-Option für das BIOS bereitzustellen, mit der die Unterstützung für VMX deaktiviert wird. Um die VMX-Unterstützung auf einer Plattform zu aktivieren, muss das BIOS Bit 1, Bit 2 oder beides (siehe unten) sowie das Sperrbit setzen.

Der grundlegende Punkt ist, dass das einmal gesperrte Register erst nach dem Einschalten entsperrt werden kann .

Da BIOS / UEFI an erster Stelle steht, kann es die Virtualisierung deaktivieren, indem die entsprechenden Bits gelöscht und das Register gesperrt werden, bevor ein Betriebssystem dies verhindern kann. Wenn die Virtualisierungsfunktion auf diese Weise deaktiviert wird, meldet die CPU, dass die optionale Befehlserweiterung fehlt (und tatsächlich fehlerhaft ist, wenn sie verwendet wird), und die Software kann die Hardwarevirtualisierung daher nicht verwenden.

Margaret Bloom
quelle
2
Das ist eine sehr gute Ergänzung zur Frage. Die meisten Leute haben keine Ahnung, dass die Einstellung einen Reset erfordert, damit sie geändert werden kann. Daher kann sie nicht "on the fly" aktiviert werden, während das Betriebssystem ausgeführt wird.
Tonny
OHH, so funktioniert es! Ich googelte es und fand Ihre Antwort (was mich für meine persönlichen Konzepte interessiert)
Paul Stelian