»Mache alles so einfach wie möglich,
doch nicht einfacher.«
– Albert Einstein
29 Virtualisierung und Emulatoren
In diesem Kapitel beschäftigen wir uns mit Emulatoren und virtuellen Maschinen (VMs) unter Linux.
Durch Virtualisierung oder Emulation einer Systemumgebung wird es möglich, unter Linux auch Anwendungen für andere Betriebssysteme beziehungsweise sogar komplette Betriebssysteme zu betreiben.
29.1 Einführung
Zuerst einmal wollen wir die Begriffe klären. Virtualisierung und Emulation sind zwar verwandt, aber nicht zu verwechseln.
29.1.1 Betriebssystem-Virtualisierung
In Kapitel kap_kernel, »Der Kernel«, wurde Virtualisierung bereits so definiert, dass dabei vorhandene Ressourcen wie Speicher oder CPU-Rechenzeit unter den laufenden Prozessen aufgeteilt werden.
Virtuelle Maschine
Wenn von der Virtualisierung ganzer Systeme die Rede ist, meint man den Betrieb verschiedener Betriebssystem-Instanzen oder virtueller Maschinen auf einem physischen System. Damit man nun zwei oder mehr unabhängige Linux-Systeme oder auch Windows und Linux parallel auf derselben Maschine betreiben kann, benötigt man einen Hypervisor.
Ein Hypervisor ist eine Software, die eine Umgebung für virtuelle Maschinen bereitstellt bzw. diese verwaltet.
Für die Virtualisierung von Betriebssystemen gibt es unterschiedliche Hypervisor-Technologien mit jeweils eigenen Vor- und Nachteilen:
- Virtualisierung mittels Container / Zone / Jail
Hier wird eine komplette Betriebssystemumgebung innerhalb eines abgeschlossenen Containers zur Verfügung gestellt. Charakteristisch für diese Virtualisierungsform ist, dass nur ein Kernel des Betriebssystems läuft, der die jeweiligen Container verwaltet und eine saubere Trennung sicherstellt. Mit dieser Virtualisierungsform können selbstverständlich jeweils nur gleiche Betriebssysteme virtualisiert werden, die Virtualisierung eines Windows-Systems unter Linux ist hier nicht möglich. - Virtualisierung in Software
Bei der Virtualisierung in Software läuft der Hypervisor als eigenes Programm auf einem vollwertigen Betriebssystem und nutzt dessen Treiber. - Hardware-Virtualisierung
Im Gegensatz zur Software-Virtualisierung läuft der Hypervisor hier direkt auf der Hardware und bringt in der Regel seine eigenen Treiber mit. Alle virtuellen Gastsysteme laufen somit direkt auf der zugrunde liegenden Hardware parallel neben dem »kontrollierenden« Hypervisor, was im Vergleich zur Software-Virtualisierung deutliche Performance-Vorteile mit sich bringt. Das in einer virtuellen Maschine ausgeführte Gastsystem muss somit jedoch auch kompatibel zur eingesetzten Hardware sein. Selbstverständlich nutzen die virtuellen Gastsysteme ebenfalls einen eigenen Kernel.
Diese Virtualisierung existiert unter verschiedenen Unix-Varianten: Unter Solaris spricht man von Zones, unter FreeBSD von Jails. [Fn. Unter OpenBSD lässt sich durch Kombination von chroot und systrace Ähnliches bewirken.] Unter Linux gibt es User Mode Linux, das ebenfalls eine Variante eines Containers darstellt. [Fn. Jedoch wird hier – im Widerspruch zur »reinen Lehre« – innerhalb eines Containers wieder ein spezieller User-Mode-Linux-Kernel gestartet.]
Bei dieser Virtualisierung ist der Hypervisor eigentlich der Kernel selbst.
Vorteil ist hier, dass kaum Anpassung an das zugrunde liegende Wirtssystem notwendig ist. Weiterhin hat jede virtuelle Maschine im Gegensatz zu einer Container-Virtualisierung einen eigenen vollwertigen Kernel. Ein wesentlicher Nachteil können jedoch Performanceinbußen sein, die aufgrund eventuell mangelnder Hardwareunterstützung für solche Virtualisierungslösungen entstehen können – schließlich laufen die virtuellen Gastsysteme nicht parallel auf einer geteilten Hardware, sondern mehr oder weniger innerhalb des Wirts-Betriebssystems.
Beispiele für diese Art der Virtualisierung wären VMware Workstation, VirtualBox oder QEMU (ohne KVM).
Paravirtualisierung
Eine besondere Form der Hardware-Virtualisierung ist die Paravirtualisierung: Hier wird die gemeinsam genutzte Hardware vom Hypervisor zu einer generischen Schnittstelle abstrahiert, was in der Folge nur spezielle Gastsysteme beziehungsweise Gastsysteme mit speziell angepassten Kerneln erlaubt. Durch die vorgenommene Abstraktion kann die virtuelle Maschine aber besonders schlank und effizient gestaltet werden, was im Betrieb wiederum weitere Geschwindigkeitsvorteile bringt.
Beispiele für eine Hardware- beziehungsweise Paravirtualiserung sind beispielsweise VMware ESX Server oder auch Xen unter Linux.
Aber Achtung: Die Literatur ist in diesen Definitionen nicht eindeutig, auch viele Hersteller nutzen dieselben Begriffe in teilweise unterschiedlichen Bedeutungen. Passen Sie also auf, wenn Sie anderswo mit diesen Begriffen konfrontiert werden und hinterfragen Sie gegebenenfalls den Kontext. Für unser Verständnis und das weitere Kapitel sind diese Definitionen aber eindeutig und mehr als ausreichend.
29.1.2 Emulation
Während eine Virtualisierung also immer etwas vorhandenes – im Regelfall Systemressourcen – aufteilt, wird bei einer Emulation etwas nachgebildet, was eigentlich nicht da ist. Meist handelt es sich bei diesen »Nachbildungen« um spezielle Schnittstellen oder gleich ganze Systemumgebungen.
Analog zum Hypervisor ist ein Emulator eine Software, die eine fremde Systemumgebung (gegebenenfalls in Teilen) nachbildet.
Ein Emulator ist nach dieser Definition im Gegensatz zum Hypervisor immer ein Programm, das innerhalb Ihres Betriebssystems läuft.
Hardware-Emulator
Ein spezielles Beispiel für Emulatoren ist dabei der Hardware-Emulator Bochs, der beispielsweise einen PowerPC-Prozessor unter einem normalen x86-Linux nachbilden kann. Innerhalb dieser Hardware-Emulationen können nun wieder ganze Betriebssysteme installiert (und gegebenenfalls auch betrieben) werden. In der Praxis wird der Bochs-Emulator vor allem zur Entwicklung und zum Testen diverser Betriebssystem-Portierungen benutzt.
Die meisten Emulatoren beschränken sich jedoch typischerweise darauf, Anwendungen auszuführen, die eigentlich für andere Betriebssysteme programmiert wurden. Der Einsatz eines solchen Emulators würde den Betrieb einer virtuellen Maschine mit einem separaten Betriebssystem ersetzen – ein wichtiger Aspekt, wenn Ressourcen knapp sind und nur einzelne Fremdanwendungen betrieben werden sollen.
[zB]Zum besseren Verständnis des Unterschieds zwischen Hypervisor und Emulatoren wollen wir Ihnen noch ein konkretes Beispiel geben: Sie haben auf Ihrem Computer Linux installiert, möchten aber unbedingt dieses tolle Windows-Spiel spielen. Für diesen Fall benötigen Sie entweder eine virtuelle Maschine, innerhalb derer Sie nun Windows und darin das jeweilige Spiel installieren können, oder Sie verwenden einen Emulator, der alle benötigten Schnittstellen nachbildet und direkt Windows-Programme ausführen kann – und installieren das Spiel innerhalb dieses Emulators.
In den folgenden Abschnitten werden wir auf konkrete Virtualisierungstechnolo- gien und Emulatoren eingehen – und das auch, aber nicht nur, um Windows-Spiele unter Linux nutzen zu können.
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.