Login
Newsletter
Werbung

Mi, 23. August 2006, 00:00

Virtualisierung

Anwendung, Technologie und Forschung

Grundsätzlicher Aufbau einer Virtualisierungsumgebung

Der Aufbau einer Virtualisierungsumgebung sieht wie folgt aus. Direkten Zugriff auf die Hardware erhält nur das jeweilige Host-Betriebsystem. Alternativ zu einem Anwenderbetriebssystem wie Windows oder Linux kann auch ein speziell für die Virtualisierung entwickeltes minimales Betriebssystem eingesetzt werden, das dann als Hypervisor bezeichnet wird. Auf diesem Betriebssystem läuft eine Anwendung, die Virtual Machine Monitor (VMM) genannt wird. Parallel dazu laufen mehrere Gast-Betriebssysteme, welche - im Gegensatz zu Anwendungen, die immer nur für ein bestimmtes Betriebssystem entwickelt werden -lediglich mit der bestehenden Hardware kompatibel sein müssen (bei der Para-Virtualisierung muss das Gastbetriebssystem allerdings auch kompatibel zum VMM sein, wie im Folgenden noch genauer erläutert wird). Zugriffe der Gastbetriebssysteme auf Hardwareressourcen werden nicht mehr direkt durch den Host-Betriebssystemkern durchgeführt, sondern weitergereicht an den VMM.

Der VMM ist nun in der Lage, Gerätzugriffe so aufzuteilen bzw. zu verschieben, dass kein Gast den anderen behindert. Dies bewirkt die gewünschte Gast-Isolation. Eine knifflige Stelle bei der Aufteilung der Gerätezugriffe sind im übrigen Interrupts, da die direkte Zustellung der Interrupts nicht immer gewährleistet werden kann; der VMM muss daher eine Verzögerungstechnik einsetzen, weil beim Eintreffen von Interrupts die betreffende VM eventuell gar nicht läuft, sondern eine andere.

Emulation

Emulation ist ein der Virtualisierung verwandter Ansatz. Emulationsumgebungen wie Bochs [5] oder Virtual PC [6] von Microsoft ersetzen alle Instruktionen der virtuellen Maschine durch eigenen Simulationscode. Das Hauptziel dieses Vorgehens - und der Hauptunterschied zur Virtualisierung - ist es, die Ausführung von Software zu ermöglichen, die für die verfügbare Hardware eigentlich nicht entwickelt wurde. Zum Beispiel gestattet es Virtual PC, für Windows entwickelte Software unter Mac OS auszuführen. Diese gewaltige Flexibilität wird jedoch durch einen hohen Leistungsverlust erkauft, weil für jede auszuführende Instruktion Emulationscode zur Laufzeit erzeugt und ausgeführt werden muss. Hierzu verwandt sind im übrigen auch Java und .Net, die ebenfalls mittels Laufzeitumgebungen und Just-In-Time kompiliertem Binärcode ähnliche Flexibilität erzielen.

Vollständige Virtualisierung

Der bekannteste Vertreter vollständiger Virtualisierung ist mit Sicherheit VMWare Workstation [4]. Unveränderte Betriebssysteme können hier als Gast eines Host-Systems laufen.

Vollständige Virtualisierung kommt der Definition einer virtuellen Maschine nach Goldberg zunächst am nächsten. Die virtuellen Maschinen führen Instruktionen teilweise direkt auf der Hardware aus und teilweise nicht. Dieser Vorgang ist komplexer, als er sich zunächst anhört, enthält er doch zwei jeweils selbst schon komplizierte Vorgänge. Zunächst müssen die sensitiven Instruktionen erkannt werden. Nach der Auswertung und Neuerzeugung des Emulationscodes muss dieser anstelle der ehemaligen Instruktion ausgeführt werden. Und nicht zuletzt geschieht dies alles zur Laufzeit. Damit können Betriebssysteme und deren Anwendungen ohne weitere Veränderungen in der virtuellen Maschine ausgeführt werden. Um eine neue Hardware-Plattform zu unterstützen, muss nur der VMM angepasst werden, um die neuen Instruktionen und Fähigkeiten der Hardware-Plattform zu unterstützen.

Der größte Nachteil der vollständigen Virtualisierung ist der Leistungsverlust, der sich durch das Auswerten von Instruktionen und dem Einfügen von Emulationscode ergibt. Der Vorgang erfordert desweiteren häufige Wechsel zwischen dem Gast-System und dem VMM, da das Einfügen durch den VMM geschieht. Der Wechsel selbst ist jedoch ein recht teurer Vorgang und führt daher zu weiterem Leistungsverlust.

Para-Virtualisierung

Den größten Leistungsverlust erfährt die vollständige Virtualisierung durch das Erkennen sensitiver Instruktionen und das Einfügen von Emulations-Code zur Laufzeit. Diese beiden Vorgänge versucht die Para-Virtualisierung zu umgehen [7], indem sie das Gastbetriebssystem ein wenig modifiziert und an die Schwachstellen der Virtualisierung anpasst. Der bekannteste Vertreter der Para-Virtualisierung ist Xen.

Ein VMM einer Para-Virtualisierungsarchitektur stellt Schnittstellen zur seinem Emulations-Code zur Verfügung, welche vom Gastbetriebssystem benutzt werden können. Dazu wird der Gast so portiert, dass er beim Auftreten einer sensitiven Instruktion stattdessen den zugehörigen Emulations-Code des VMM aufruft, beispielsweise wenn auf ein Gerät zugegriffen werden muss. Als weitere Optimierung erlaubt es die Paravirtualisierung, Teile des VMM in den Adressraum des Gastes zu verlegen, da nun nicht mehr die Illusion eines vollkommen leeren Adressraums aufrechterhalten werden muss - das Gastbetriebssystem kann ja einfach ein wenig verändert werden. Dies reduziert die teuren Wechsel der Adressräume und die ebenfalls teuren Wechsel von Gast zum VMM. Aufgrund dieser Optimierung verlieren so virtualisierte Systeme nur noch sehr wenig Leistung.

Die Nachteile sind jedoch recht offensichtlich. Während man bei vollständiger Virtualisierung einfach ein bestehendes System nimmt und unverändert installieren kann, benötigt man bei der Para-Virtualisierung eine Portierung des Betriebssystemkerns auf die entsprechende Virtualisierungsarchitektur. Dies ist zweifellos kompliziert und erfordert neben dem nötigen Fachwissen auch viel Zeit und Geld. Nicht zuletzt können auch nur Systeme portiert werden, für die der Quellcode verfügbar ist.

Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung