Der PC im PC

Virtualisierung: So arbeitet die Technik unter der Haube

08.02.2015 von David Wolski
Virtuelle Umgebungen wie etwa Virtualbox, Vmware, Hyper-V und andere Lösungen erlauben es, mehrere Betriebssysteme gleichzeitig auszuführen. So kommt das System ins System.

Ein Computer, ein Betriebssystem - diese Gleichung stimmt so schon länger nicht mehr. Moderne PC-Hardware ist darauf ausgelegt, ohne große Umstände mehrere Betriebssysteme zur gleichen Zeit auszuführen, bei Bedarf anzuhalten und wieder fortzusetzen. Der Schlüssel dazu ist Virtualisierung, die die erforderlichen Software-Voraussetzungen für mehrere gleichzeitig laufende Betriebssysteme auf der Hardware schafft. Obwohl die Technik dahinter nicht neu, sondern schon seit rund zehn Jahren auf Desktop-Rechnern und Servern im Einsatz ist, bleibt Virtualisierung ein heißes Thema.

Virtualisierung: So arbeitet die Technik unter der Haube
Foto: kobes - Fotolia.com

Denn trotz sinkender Hardware-Preise haben virtuelle Maschinen bei steigenden Energie- und Lohnkosten einen Vorteil gegenüber dedizierten Rechnern: Ein leistungsfähiger Server kann mehrere virtuelle PCs beherbergen und den dort laufenden Systemen ganz nach Bedarf mehr oder weniger Systemressourcen zuweisen, um die Auslastung zu optimieren. Es ist auch kein Zufall, dass erste Virtualisierungstechnologien auf Großrechnern wie dem IBM S/370 entwickelt wurden. Auf dieser Mainframe liefen Anfang der 70er Jahre bereits mehrere virtuelle Maschinen auf der gleichen Hardware unter dem Betriebssystem VM/CMS.

Virtualisierung ist eine gute Methode, um die Zahl dedizierter Rechner zu reduzieren und die vorhandene Hardware optimal zu benutzen - dies spart Energie und Administrationsaufwand. In Firmennetzwerken und Rechenzentren gehört die Technologie schon länger zum Alltag. Für Heimanwender bieten Desktop-Virtualisierungslösungen eine ausgereifte Möglichkeit, ohne großen PC-Fundus verschiedene Betriebssysteme zu testen, Linux unter Windows zu nutzen oder auch Windows unter Linux, und um eigene, virtuelle Server aufzusetzen. Da die Festplatte(n) eines virtuellen Systems meist nur als Image-Dateien vorliegen, ist es ein Leichtes, den vorherigen Zustand eines virtuellen Systems wiederherzustellen.

Ist sein eigenes Betriebssystem: Virtualisierungsumgebungen wie Vmware ESX/ESXi übernehmen selbst die volle Kontrolle über die Hardware und lassen sich wie ein Betriebssystem installieren und konfigurieren.

Begriffe: Simulation, Emulation, Virtualisierung

Rund um das Thema Virtualisierung stößt man häufig auf die Begriffe Simulation und Emulation, die zwar Ähnliches, aber nicht dasselbe bedeuten. Fälschlicherweise werden die Begriffe noch oft synonym verwendet, obwohl sie nicht das Gleiche bedeuten. Zwar sind die Unterschiede zwischen Emulation und Virtualisierung häufig fließend, so haben zum Beispiel Virtualbox und Vmware stellenweise die Merkmale von Emulatoren, um virtuellen Gastsystemen das Leben zu erleichtern. Bei den Konzepten der Simulation, Emulation und Virtualisierung handelt es sich allerdings um ganz unterschiedliche, technische Ansätze mit jeweils anderen Zielen und Anwendungsgebieten. Die folgende Aufstellung bringt Licht ins Dunkel der grundlegenden Begriffe rund um das Thema Virtuelle PCs.

Simulation: In einer Simulation wird ein fremdes System mit seiner Hardware vollständig abgebildet. Das bedeutet, dass eine Simulation eine meist abgeschlossene Umgebung nachstellt, aus der kein direkter Hardware-Zugriff möglich ist, da alle Systemkomponenten mittels Software nachgebildet sind. Das besondere Merkmal ist, dass eine Simulation nicht nur Äußerlichkeiten nachbildet, sondern auch die interne Logik bis ins Detail nachstellt. Simulationen sind beispielsweise nützlich, um eine andere Prozessorplattform auf einem System nachzubilden sowie um Betriebssysteme oder einzelne Anwendungen zu entwickeln. So gibt es etwa Simulatoren von alten Großrechnern, wie etwa die PDP-8, oder Prozessorsimulatoren des Motorola 68000er, um alte Programme zu kompilieren. Der bekannteste Vertreter dieser Klasse ist das Linux-Programm Wine , dessen Name sinnigerweise "Wine Is Not an Emulator" bedeutet und das einen Windows-Simulator auf API-Ebene bereitstellt. Damit lässt sich Windows-Software unter Linux ausführen und Wine simuliert dabei mit eigenen Programmbibliotheken eine (unvollständige) Windows-Umgebung.

Emulation: Im Gegensatz zur Simulation geht die Emulation nicht so weit, die Interna eines Systems komplett abzubilden. Für die Emulation genügt es, die Äußerlichkeiten nachzuahmen, damit Programme kompatible Soft- und Hardware-Schnittstellen vorfinden. Ziel einer Emulation ist es, nur das definierte, sichtbare Verhalten nachzustellen, während die Interna aber ganz anders funktionieren. Ein aktuelles Beispiel für einen Emulator findet sich zum Beispiel in der offiziellen Android-Entwicklungsumgebung von Google: Um die Entwicklung von Apps zu erleichtern, ist hier ein Emulator enthalten, der sowohl das Hardware-Verhalten als auch die Bildschirmgrößen von Smartphones nachbildet.

Virtualisierung: Virtualisierungsumgebungen, die virtuelle Maschinen bereitstellen, sollen möglichst wenig simulieren oder emulieren. Stattdessen werden Hardware-Zugriffe möglichst immer an die tatsächlichen Systemkomponenten wie Prozessor, Grafikkarte und Festplatte durchgereicht und von der Virtualisierungsumgebung nur verwaltet. Zusätzlich jedoch emulieren Virtualisierungsumgebungen auch Hardware-Komponenten, um den idealen Betrieb von Gastsystemen sicherzustellen. So emulieren der Vmware Player und Virtualbox beispielsweise Netzwerkkarten, die mit den Standardtreibern von Gastsystemen funktionieren. Für den unproblematischen Zugriff auf virtuelle Festplatten kommt ebenfalls ein emulierter Standard-SATA- oder IDE-Chipsatz zum Einsatz, damit keine Extratreiber im Gastsystem erforderlich sind. Außerdem kann die Installation von Gasterweiterungen dabei helfen, vorhandene Hardware-Komponenten ohne Emulationsschicht besser zu nutzen. Aktuelle Prozessoren von AMD und Intel bieten zudem neue Befehlserweiterungen, damit VMs ihre CPU und Speicherzugriffe direkt auf Hardware-Ebene erledigen können, falls der Hypervisor das erlaubt. Virtualisierte Systeme (Virtuelle Maschinen) laufen aus diesem Grund mit Abstrichen bei der Grafikausgabe und Festplattenzugriffen nur minimal langsamer als nativ laufende Betriebssysteme.

Enge Verwandte von virtuellen Maschinen sind übrigens die virtuellen PCs sowie die Laufzeitumgebungen von Java und von .NET. In der Java Virtual Machine bekommt der zum Ausführungszeitpunkt kompilierte Programmcode automatisch eine eigene, virtuelle Maschine zugewiesen, aus der das Programm nicht ausbrechen darf und die den direkten Zugriff auf Hardware und Betriebssystem verwehrt. Alle Zugriffe müssen über diese Laufzeitumgebung und deren Bibliotheken gehen. Dies erfolgt nicht nur aus Sicherheitsgründen, sondern sorgt auch dafür, dass Java-Programme unabhängig von der physikalischen Hardware auf verschiedenen Plattformen laufen.

Hardware-Zugriffe Grenzen der Virtualisierung

Während Virtualisierungsumgebungen die Befehle des Gastbetriebssystems an CPUs und Speicher mit geringen Geschwindigkeitseinbußen übersetzen können, ist dies bei anderen Hardware-Komponenten nicht so einfach. Der direkte Hardware-Zugriff ist verwehrt, denn auf Geräte wie Soundkarten, ISDN-Karten, Netzwerkkarten, Controller und Chipsätze hat bereits das Host-System exklusiven Zugriff. Eine gleichzeitige, konkurrierende Verwendung durch ein weiteres Betriebssystem könnten Standardkomponenten gar nicht verarbeiten. Virtualisierungsumgebungen begnügen sich deshalb damit, per Software Geräte wie Chipsatz, Controller, Netzwerkkarte und Grafikchip zu emulieren. Lediglich die KVM (Kernel Virtual Machine) von Linux kann momentan PCI-Geräte direkt an virtuelle Maschinen weitergeben, sofern diese nicht auch schon das Host-System verwendet.

Einigen Virtualisierungsumgebungen wie Vmware Workstation und Virtualbox gelingt es, über ihre Treiber eine Schnittstelle zum physikalischen Grafikchip zu schaffen, wobei die Grafikleistung nicht für aufwendige Spiele reicht. Nur Microsofts Hyper-V für Server kann mit der Technik "RemoteFX" den Grafikchip einer separaten Grafikkarte direkt für eine virtuelle Maschine verfügbar machen.

Mit und ohne Betriebssystem: Ein Typ-1-Hypervisor wie Citrix Xenserver und Vmware ESX/ESXi unterscheidet sich vom verbreiteten Typ 2 durch den kompletten Verzicht auf ein Host-Betriebssystem.

Virtualisierung mit und ohne Betriebssystem

Es gibt verschiedene Techniken, um Gastbetriebssysteme auf einem Rechner in virtuellen Umgebungen zu starten. Bei diesen Techniken unterscheidet man meist danach, auf welcher Ebene die Abstraktionsschicht angesiedelt ist, auf der die Virtualisierung vonstatten geht. Die unterschiedlichen Methoden liefern je nach angestrebtem Einsatzzweck, beispielsweise auf Desktops, Servern und für den Zugriff über das Netzwerk, die beste Leistung bei niedrigem Verwaltungsaufwand.

Typ-2-Hypervisor: Setzt eine Virtualisierungsumgebung als Startbasis ein ausgewachsenes Betriebssystem voraus, dann spricht man von einem Typ-2-Hypervisor. Generell handelt es sich bei einem Hypervisor, auch "Virtual Machine Monitor" genannt, um jene Verwaltungs-Software, die die Kontrolle über die virtuellen Maschinen hat, diese starten und anhalten kann und Ressourcen zuweist. Beispiele für den Typ 2 liefern etwa die verbreiteten Virtualisierungs-Tools für den Desktop Vmware Player/Workstation, Oracle Virtualbox wie auch Microsoft Virtual-PC.

Typ-1-Hypervisor: Läuft der Hypervisor direkt auf der Hardware und ersetzt dabei das Betriebssystem, handelt es sich um einen Typ-1-Hypervisor. Diese Virtualisierungsumgebungen werden beim Einsatz auf Servern und in Rechenzentren auf Computern bevorzugt, die sowieso nur virtuelle Maschinen beherbergen sollen - dann allerdings gleich dutzendweise. Beispiele dafür sind Vmware ESX/ESXi, Oracle VM Server und Citrix Xenserver.

Mischformen: Hyper-V von Microsofts Serverbetriebssystemen und die Technik KVM des Linux-Kernels sind Mischformen. Die Virtualisierungsfunktionen sind hier Teil des Betriebssystems selbst oder werden wie bei Linux direkt als Kernel-Modul geladen. Das Betriebssystem kann sich so selbst virtualisieren und mehrere unabhängige Instanzen starten.

Ein Ring, sie zu knechten: 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.

Prozessoren: Ringe regeln 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 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 die Virtualisierungs-Software 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 beispielsweise in den höheren Ringen des User-Modes nicht und der Prozessor 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 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.

CPU-Fähigkeiten: Moderne Prozessoren, hier ein Intel Core i3, unterstützen Virtualisierung. In den „Instructions“ zeigt das Tool CPU-Z daher die Erweiterung „VT-x“ an.

Intel und AMD Befehlssatz-Erweiterungen der CPU

Das Verhalten der x86-Prozessoren und deren Aufteilung der internen Berechtigungen in Ringe lässt sich aus Kompatibilitätsgründen nachträglich nicht mehr ändern. Intel und AMD haben deshalb mit steigender Popularität von Virtualisierungslösungen unabhängig voneinander Befehlserweiterungen entwickelt, um Virtualisierung in der CPU besser zu unterstützen. AMD nennt die Technik "Pacifica" beziehungsweise "AMD Virtualization" oder kurz AMD-V. Sie ist in AMD-Prozessoren seit dem Athlon 64 enthalten. Bei Intel heißt eine vergleichbare Erweiterung "Virtualization Technology" oder "Intel VT" und ist seit dem Pentium-4-Modell 662 verfügbar. Allerdings kann es vorkommen, dass bei Notebook- CPUs die Virtualisierungserweiterungen deaktiviert sind.

Genauen Aufschluss darüber, was eine CPU kann, gibt die Freeware CPU-Z . Nach dem Start des Programms, das zunächst eine Installation erfordert, finden Sie unter "CPU > Instructions" die Kürzel aller unterstützten Befehlssatzerweiterungen. Bei Intel-CPUs weist das Kürzel "VT-x" und bei AMD-Prozessoren die Angabe "AMD-V" Virtualisierungsunterstützung aus. Beachten Sie, dass Sie diese Erweiterung in den Bios- beziehungsweise Uefi-Einstellungen des PCs zumeist noch aktivieren müssen.

Typ-2-Hypervisor: Virtualbox, hier unter Linux mit Windows-Gastsystem, ist ein typischer Hypervisor für den Desktop, der als Anwendung läuft und die Befehle des Gastbetriebssystems übersetzt.

Paravirtualisierung und Betriebssystemvirtualisierung

Am meisten hat der Hypervisor bei einer Komplettvirtualisierung zu tun. Dieser Ansatz präsentiert jedem Gastsystem, unabhängig von der realen Hardware des Host-Systems, eine emulierte Hardware. Der Hypervisor muss den Ring 0 der CPU komplett abbilden sowie die CPU-Befehle des Gastsystems entsprechend umbauen. Das Gastsystem weiß in diesem Fall nichts davon, dass es in einer VM läuft und kann unverändert laufen, mit ein paar Treibern für die emulierte Hardware. Die Komplettvirtualisierung ist nicht die effizienteste Methode, da es durch die erforderlichen Übersetzungen von Speicher- und Prozessorzugriffen natürlich zu Leistungsverlusten kommt. Dafür ist die Methode allerdings unproblematisch für das Gastbetriebssystem. Die ersten Versionen der Desktop-Virtualisierer wie Virtual PC, Vmware Workstation und Virtualbox sind prominente Beispiele für diesen Ansatz. (PC WELT)