Virtualisierung für virtuelle Computer
- 11 Minuten
Virtuelle Computer bilden das Rückgrat von Cloud Computing. Wenn Sie eine EC2-Instanz in AWS oder einem virtuellen Computer in Azure erstellen, stellt der Clouddienstanbieter keinen dedizierten physischen Server für die Instanz oder den virtuellen Computer bereit. Stattdessen wird ein virtueller Computer auf einem physischen Server erstellt. Dieser virtuelle Computer ist u. U. einer von vielen, die auf dem Server gehostet werden. Wegen der Virtualisierung sieht der virtuelle Computer aber wie ein dedizierter Server aus. Er ist logisch von anderen virtuellen Computern isoliert und ein fehlerhaftes Programm, das einen virtuellen Computer zum Absturz bringt oder anderweitig schädigt, kann sich nicht auf Programme auswirken, die auf anderen virtuellen Computern ausgeführt werden, selbst wenn sie einen physischen Host gemeinsam nutzen. Außerdem kann ein Server, auf dem zwei virtuelle Computer gehostet werden, ein Betriebssystem (z. B. Linux) auf einem virtuellen Computer und ein anderes Betriebssystem (z. B. Windows) auf dem anderen ausführen.
Virtuelle Computern werden auch außerhalb von Cloud Computing eingesetzt. Ein gängiges Produkt namens Parallels bietet Mac-Benutzern beispielsweise die Möglichkeit, Windows und macOS nebeneinander ausführen, indem Windows auf einem virtuellen Computer gehostet wird. Softwareentwickler verwenden häufig virtuelle Computer, um Programme zu testen, da virtuelle Computer eine konsistente und isolierte Umgebung bereitstellen, die problemlos von einem Computer auf einen anderen repliziert werden kann.
Alle diese virtuellen Computer sind Instanzen von System-VMs, die ein gesamtes System (physischer Computer) virtualisieren. Es gibt aber auch Prozess-VMs, die die Grundlage für beliebte Programmiersprachen wie Java und C# bilden. Lassen Sie uns beide Typen genauer betrachten, ihre Funktionsweise diskutieren und verstehen, warum es die System-VMs sind, die die Grundlage für Cloud Computing bilden.
Prozess-VMs
Eine Prozess-VM (Abbildung 1) ist ein virtueller Computer, der einen einzelnen Prozess unterstützt, solange der Prozess aktiv ist. Eine Prozess-VM wird beendet, wenn der gehostete Prozess beendet wird. Aus der Sicht einer Prozess-VM besteht ein Computer aus einem virtuellen Speicheradressraum, Registern auf Benutzerebene und Anweisungen zum Ausführen eines Programms. Entsprechend dieser Definition kann ein Prozess in einem universellen Betriebssystem auch als „Computer“ bezeichnet werden. Ein regulärer Prozess kann jedoch nur Programmbinärdateien unterstützen, die für die Prozessorarchitektur oder die Anweisungssatzarchitektur (Instruction Set Architecture) (ISA) des Hostcomputers kompiliert wurden. Die Ausführung von Binärdateien, die für eine andere ISA kompiliert wurden als die des Hostcomputers, z. B. die Ausführung von Programmen, die für ARM-Prozessoren kompiliert wurden, auf Computern mit Intel-CPUs, wird von regulären Prozessen nicht unterstützt. Dies ist bei einer Prozess-VM jedoch möglich.

Abbildung 1: Prozess-VM.
Prozess-VMs unterstützen ISAs, die sich von der Host-ISA unterscheiden, durch Emulation. Dadurch können die Schnittstellen und Funktionen eines Systems (der Quelle) auf einem System mit anderen Schnittstellen und Funktionen (dem Ziel) implementiert werden. Ein Beispiel für Emulation ist die Ausführung eines Programms, das für die in frühen Apple-Computern verwendete 6502/6510-Prozessorfamilie kompiliert wurde, auf einem x86-Prozessor. Die Abstraktion der Prozess-VM wird durch eine Virtualisierungssoftware ermöglicht, die als Runtime bezeichnet wird. Die Runtime ist über dem Hostbetriebssystems und der zugrunde liegenden Hardware angesiedelt. Diese Runtime emuliert die Anweisungen und/oder Systemaufrufe, wenn Gast- und Host-ISA nicht identisch sind.
Prozess-VMs gibt es seit Mitte der 1960er Jahre. Sie wurden primär zum Konvertieren der von Compilern generierten Zwischensprachen in Computercode für den Hostprozessor und teilweise zum Vereinfachen der Portierung von Compilern auf neue Prozessorarchitekturen verwendet. Sie werden heute für ähnliche Verwendungszwecke eingesetzt. Eine Java Virtual Machine (JVM) ist beispielsweise eine Prozess-VM, die Java-Bytecode (die von einem Java-Compiler erzeugten Anweisungen) in nativen Computercode kompiliert und auf dem Hostcomputer ausführt. Programme, die in C# und anderen Sprachen geschrieben wurden und von der Common Language Runtime (CLR) von Microsoft unterstützt werden, verwenden ebenfalls Prozess-VMs, um die von Compilern erzeugten CIL-Anweisungen (Common Intermediate Language) in Computercode zu kompilieren. Prozess-VMs, deren Zweck die Ausführung der von Sprachcompilern erzeugten Zwischensprachen ist, werden mitunter als High-Level-Language-VMs oder kurz HLL-VMs bezeichnet.
Zusammenfassend gilt: eine Prozess-VM ähnelt einem normalen Prozess, der unter einem Betriebssystem ausgeführt wird. Eine Prozess-VM ermöglicht durch Emulation jedoch die Ausführung von Anwendungen, die für eine andere ISA als die des Hostcomputers kompiliert wurden. Außerdem stellen HLL-Prozess-VMs die Grundlage für beliebte verwaltete Sprachen wie Java und C# bereit. Der Begriff „verwaltet“ bezieht sich in diesem Kontext auf die Tatsache, dass Java und C# Arbeitsspeicher für die zugehörigen Anwendungen verwalten und Schutz vor häufigen Programmierfehlern bieten, z. B. missbräuchliche Verwendung von Zeigern und Überschreitung der Grenzen von speicherinternen Arrays.
System-VMs
Im Gegensatz zu Prozess-VMs virtualisiert eine System-VM einen ganzen Computer, indem alle zugehörigen Hardwareressourcen wie Prozessoren, Arbeitsspeicher und E/A-Geräte virtualisiert werden. Die Virtualisierungssoftware (Hypervisor), die auch als Virtual Machine Monitor (VMM) bezeichnet wird, befindet sich zwischen der Hardware und dem Betriebssystem und täuscht vor, dass das Betriebssystem und die gehosteten Anwendungen auf eigenständigen Computern ausgeführt werden (Abbildung 2).

Abbildung 2: System-VM.
Der Hypervisor verwaltet die Zuordnung der zugrunde liegenden Hardwareressourcen und den Zugriff darauf. Er ermöglicht die parallele Ausführung mehrerer virtueller Computer und gaukelt jedem virtuellen Computer vor, dass er über alle betreffenden Ressourcen verfügt. Der physische Computer wird als Host bezeichnet. Ein Betriebssystem, das in einer VM auf einem Host ausgeführt wird, wird Gastbetriebssystem genannt (Abbildung 3). Jede VM kann wie ein normaler Host gestartet, heruntergefahren und neu gestartet werden. Eine VM kann jeweils nur auf einem Host ausgeführt werden. Sie kann jedoch heruntergefahren, auf einen anderen Host übertragen und dort gestartet werden. Obwohl eine VM zu einem bestimmten Zeitpunkt nur auf einem Host ausgeführt werden kann, besteht die Möglichkeit, die VM im Lauf der Zeit auf andere Hosts zu migrieren.

Abbildung 3: Einzelnes System, das mehrere VMs hostet.
Die ersten Hypervisoren wurden in den 1960er Jahren auf IBM-Mainframes ausgeführt. Frühe Hypervisoren wurden entweder vollständig in Software implementiert oder waren auf Hardware angewiesen, um die Leistung zu steigern. Tatsächlich wurden einige Mainframes mit spezieller Hardware ausgeliefert, die lediglich zur Unterstützung der Virtualisierung diente. Heutzutage ist die Virtualisierungsunterstützung in gängige Mikroprozessoren von Intel und AMD integriert. Sie kann auf den meisten Computern durch Firmwareeinstellungen aktiviert oder deaktiviert werden. Die native Virtualisierungsunterstützung in CPUs ist der Hauptgrund dafür, dass die Beliebtheit von virtuellen Computern in den mittleren bis späten 2000er Jahren explodiert ist. So entstand eine Generation von kostengünstigen Hypervisoren, z. B. VMware, Hyper-V und VirtualBox, sowie Open Source-Hypervisoren wie Xen1. Noch bevor Cloud Computing in Mode kam, wurden diese Hypervisoren zum Virtualisieren von Workloads bereits in unternehmenseigenen Rechenzentren verwendet. Dadurch wurde der Übergang zu Cloud Computing beschleunigt, da Organisationen bereits virtualisierte Server für eine Lift & Shift-Migration von Workloads in die Cloud verwenden können, indem vorhandene VM-Images hochgeladen und daraus virtuelle Computer erstellt werden.
Hypervisoren werden auch auf Desktopcomputern in Produkten wie Parallels und Docker Desktop für Windows verwendet. Letzteres verwendet einen Hosthypervisor (Hyper-V oder VirtualBox), um Docker-Container auf Linux-VMs auszuführen, die unter Windows gehostet werden. Sicherheitsexperten finden Hypervisoren als äußerst nützlich, da sich eine durch Schadsoftware kompromittierte VM nicht auf andere VMs, das Hostbetriebssystem oder die zugrunde liegende Hardware auswirkt. Ein kompromittierter virtueller Computer kann schnell außer Betrieb genommen und ggf. im nicht kompromittierten Zustand neu erstellt werden, ohne dass ein Risiko für das restliche System besteht.
Ebenso wie eine Prozess-VM kann eine System-VM andere ISAs als die ISA des Hostsystems unterstützen. VMs wie diese werden häufig in Emulatoren verwendet, damit Spiele, die für Xbox, PlayStation und andere Hardwareplattformen geschrieben wurden, auf Desktopcomputern ausgeführt werden können. Die Leistung von derart implementierten Emulatoren – d. h. mit Hypervisoren, die die Virtualisierungsunterstützung in CPUs nutzen, implementierte Emulatoren – ist in der Regel besser als die Leistung von Emulatoren in Prozess-VMs, die Befehlssätze komplett über Software virtualisieren.
Im Gegensatz zu Prozess-VMs kann eine System-VM dem Betriebssystem und gehosteten Anwendungen Ressourcen darstellen, die hinsichtlich Größe und Typ vom physischen Host abweichen. Eine System-VM kann beispielsweise mehr Prozessoren, die manchmal auch als virtuelle CPUs oder vCPUs bezeichnet werden, als das Hostsystem bereitstellen.
Rechenzentren, die Cloud Computing als Dienst für Kunden anbieten, verwenden System-VMs, um Workloads zu virtualisieren und Server zu konsolidieren. Ab hier wird in diesem Modul der Begriff "virtueller Computer" oder "VM", sofern nicht anders angegeben, für System-VMs verwendet. In der nächsten Lektion erfahren Sie, welche Vorteile System-VMs für das Cloud Computing bringen und warum es Cloud Computing ohne Virtualisierung möglicherweise noch nicht – und sicherlich nicht so kostengünstig – geben würde.
Literatur
- Barham et al. (2003). „Xen and The Art of Virtualization“ in „Proceedings of the nineteenth ACM symposium on operating systems principles“ (SOSP '03). ACM, New York, NY, USA.
Überprüfen Sie Ihr Wissen
Feedback
War diese Seite hilfreich?
No
Benötigen Sie Hilfe zu diesem Thema?
Möchten Sie versuchen, Ask Learn zu verwenden, um Sie durch dieses Thema zu klären oder zu leiten?