2015-09-26 21 views
10

Vor dem Aufkommen der hardwareunterstützten Virtualisierung gab es Anweisungen, die aus verschiedenen Gründen nicht virtualisiert werden konnten. Kann jemand bitte erklären, was diese Anweisungen sind und warum sie nicht virtualisiert werden können?Was sind "nicht virtualisierbare" Anweisungen in der x86-Architektur?

+0

Ich stimme ab, diese Frage als Off-Topic zu schließen, weil es keine Programmierfrage ist. Versuchen Sie http://cs.stackexchange.com/ –

Antwort

26

Um eine ISA zu virtualisieren, müssen bestimmte Anforderungen erfüllt werden. Popek and Goldberg verwendet in etwa wie folgt:

Eine Maschine weist mindestens zwei Betriebsarten (a) Benutzermodus und (b) Systemmodus. Normalerweise werden Anwendungen in Benutzermodus ausgeführt und das Betriebssystem wird in Systemmodus ausgeführt. In Systemmodus kann der Code/Programm die Maschine ohne Einschränkungen sehen und manipulieren. In Benutzermodus hat der Code/Programm einige Einschränkungen, was es tun kann, z. Es kann nicht auf den gesamten Speicher der Maschine zugreifen, ohne zuerst die Berechtigung zu erhalten.

Anweisungen sind entweder (a) privilegiert oder (b) nicht privilegiert. Privileg Anweisungen Trap bei Ausführung in Benutzermodus. Überfüllen bedeutet, dass die Maschine in den Systemmodus gezwungen wird, wobei sie einen Code des Betriebssystems ausführt, um mit der Situation umzugehen. In gewissem Sinne warnen sie das Betriebssystem bei der Ausführung.

Anweisungen können auch entweder (a) empfindlichen oder (b) nicht empfindlich sein. Empfindliche Anweisungen ändern einen Teil der Maschinenressourcen oder zeigen ein unterschiedliches Verhalten, abhängig davon, ob sie in Benutzermodus oder Systemmodus ausgeführt werden.

Bei der Virtualisierung einer ISA ist es wichtig, dass der Virtual Machine Monitor (VMM) alle Versuche des Programms oder des Gastbetriebssystems erkennt, die Ressourcen der Maschine zu ändern. Es muss in der Lage zu sehen, wenn empfindliche Anweisungen ausgeführt werden. Um dies zu tun, alle der empfindlichen Anweisungen müssen privilegierten und damit Trap bei der Ausführung sein. Wenn sie gefangen sind, können wir den Systemmodus eingeben und den Code vom VMM aufrufen, um die Ressourcenänderung zu übernehmen.

Das Problem ist, dass nicht alle des X86 sensiblen Anweisungen sind privilegierte Anweisungen. Dies bedeutet, dass eine Ressourcenmodifizierung stattfinden kann, ohne dass der VMM sie sehen und handhaben kann, was gefährlich sein kann. Alternativ könnte es bedeuten, einen Befehl innerhalb des Gastbetriebssystems in Benutzermodus auszuführen und einen anderen Effekt zu sehen, als ihn in Systemmodus ausgeführt zu haben. Gemäß this paper gibt es siebzehn Anweisungen in x86, die empfindliche sind, aber nicht privilegierte sind. Ein Beispiel ist POPF, wenn die Semantik je nach Modus der Maschine unterschiedlich ist.

+0

Danke für die tolle Antwort! Klare Erklärung. –