Virtualbox, Vmware und Co.

Crashkurs: Wie funktionieren eigentlich virtuelle PCs?

Prozessoren von AMD und Intel: Ringe regeln die Privilegien

Ganz gleich, welche Methode der Virtualisierung zum Einsatz kommt, eins ist allen gemeinsam: Einige Befehle, die das Gastsystem an die CPU sendet, müssen über die Virtualisierungsschicht abgefangen werden. Der Grund liegt im Design der x86-CPUs von Intel und AMD. Lediglich das zuerst gestartete Betriebssystem darf privilegierte CPU-Instruktionen verwenden, die später gestarteten Anwendungen dagegen nicht. Schließlich soll das Betriebssystem die Kontrolle darüber behalten, was Anwendungen anstellen. Der privilegierte Zugriff findet im „Ring 0“ der CPU statt, auch „Kernel-Mode“ genannt. Dieser Ring umfasst den direkten Zugriff auf Interrupts und Speicher.

Die internen Privilegien einer x86-CPU sind historisch bedingt in Ringe eingeteilt. Nur im Ring 0 (Kernel-Modus) darf ein Betriebssystem nach Belieben schalten und walten.
Die internen Privilegien einer x86-CPU sind historisch bedingt in Ringe eingeteilt. Nur im Ring 0 (Kernel-Modus) darf ein Betriebssystem nach Belieben schalten und walten.

Die Ringe darüber, Ring 1, 2 und 3, gehören alle zum „User-Mode“. Betriebssystemtreiber dürfen zum Beispiel in Ring 1 und 2 arbeiten. Normale Programme im Betriebssystem arbeiten nur ab Ring 3. Ein Problem dieser historisch bedingten Prozessoreinteilung ist, dass ein Virtualisierer zwar als Programm im Ring 3 läuft, dort aber Gastbetriebssysteme ausführen muss. Dies ist allerdings nicht ohne Weiteres möglich, weil Betriebssysteme stets Code enthalten, der nur im Ring 0 funktioniert.

Die prozessornahen Assembler-Befehle „CLI“ (Clear Interrupts) und „STI“ (Set Interrupts) zur Interrupt-Steuerung laufen etwa in den höheren Ringen des User-Modes nicht und die CPU verweigert deren Ausführung. Da ein Betriebssystem wie Windows oder der Linux-Kernel in der Annahme programmiert ist, dass es auf Ring 0 läuft, funktioniert es außerhalb des Kernel-Modes überhaupt nicht.


Der Hypervisor übersetzt die jeweiligen Systemanfragen

Damit die virtuellen Systeme trotzdem laufen, bedienen sich Virtualisierungsumgebungen eines Tricks: Jeder Befehl einer virtuellen Maschine wird vom Hypervisor analysiert und die Befehle werden bei Bedarf umgebaut, damit sie im Ring 3 ausgeführt werden. Frühe Virtualisierungsprogramme erledigten dies noch ausschließlich über Software und waren gut damit beschäftigt, das Gastsystem stabil zu halten, was auch nicht immer gelang. VMs in den Zeiten der Vmware Workstation 3.x waren langsam und ressourcenhungrig.

Mit aktuellen Hypervisoren stellen Geschwindigkeit und Stabilität kein Problem mehr dar – allerdings müssen die Software-Hersteller von Virtualisierungslösungen für neue Windows-Versionen immer wieder Updates bereitstellen, damit diese als Gast laufen. Auf einer alten Version von Virtualbox läuft zum Beispiel Windows 8/8.1 nicht zufriedenstellend. Das liegt daran, dass Betriebssysteme verschiedene Anpassungen verlangen, damit Befehle für den Ring 0 auch im Ring 3 laufen. Bei Virtualbox und Vmware müssen Sie daher immer den Typ des Gastsystems angeben, wenn Sie einen neuen virtuellen PC erstellen. Sie müssen etwa vorgeben, um welche Windows-Version es sich handelt und ob das System für die 32-Bit- oder 64-Bit-Plattform vorliegt. Nach diesen Angaben entscheidet der Hypervisor, welche Prozessorbefehle übersetzt werden müssen.