Virtuelle Maschinen
Virtuelle Maschinen
Designparadigma
Im Grunde genommen stellt jedes
eine virtuelle Maschine dar.
In diesem Sinne ist jede Schicht aus einem Schichtenmodell eine virtuelle Maschine
dar.
Virtualisierer
Virtual Machine Monitor VMM /Hypervisor
Ein Hypervisor schafft eine Umgebung für mehrere virtuelle Maschienen.
- Typ 1 läuft direkt auf der Hardware,
- Typ 2 setzt auf einem vollwertigen Betriebssystem auf
Verwaltet ein Hypervisor im Unterschied zu einem einfachen Virtualisierer mehrere Virtuellen Maschinen ? Ja, [GuZhao2012]
Wie ist der Zusammenhang zwischen dem Betriebssystemmechanismus Partitionierung und einem Hypervisor ? Es ist nach [GuZhao2012] zumindest eine Implementierung
Zweck
Hier steht die gemeinsame Nutzung einer supertollen Hardware und die
vereinfachte Verwaltung im Vordergrund.
Beispielsweise eine WWW-Hostingfirma könnte folgende
Vorteile haben:
- ein Großrechner statt 1000ende PCs aufstellen zu müssen.
- Schwach besuchte WWW-Server brauchen so fast keine Rechenzeit, die von
anderen genutzt werden kann, dasselbe gilt für den Plattenplatz
- Kunden können auch ihre virtuellen selber Systeme pflegen ohne daß
Pfuscher sich gegenseitig stören
- Wahrscheinlich ist auch ein Riesenpool von Plattenspeicher billiger und
ausfallsicherer als 1000ende PC-platten
Vorkommen:
- IBM z/VM
-
- seit VM/370 von 1972
- bis 8 mal mehr virtueller Speicher als realer Speicher
- VmWare ESXi
-
Erfahrungen mit ESXi
- Linux KVM
- Hier ist der Linux-Kern gleichzeitig der Hypervisor
Verwaltung:
oVirt
- Jailhouse
-
Linux wird zur Verwaltung eingesetzt, Betriebsmittel z.B.CPUs und Geräte werden einem Real-Time-System zugeordnet.
- Karma VMM
-
Virtual Maschine Monitor auf dem L4/Fiasco OC mit aggressiver Paravirtualisierung
- NOVA Microhypervisor
- (auch von TU Dresden)
die Mischung zwischen Hypervisoren und 3 Generationen von Mikrokernen, capability-basiert mit sehr kleiner Codebasis
(Nach den Copyright her bei https://github.com/IntelLabs/NOVA/ zu mutmaßen ist der Autor nun direkt bei Intel)
Vorteile
VMWare über Virtualisierung:
- bessere Resourcennutzung
- Die heutigen ix86-Systeme sind immer leistungsfähiger geworden und sond daher häufig nicht voll ausgelastet.
Virtualisierung kann mehrere (auch unterschiedliche Systeme) auf einem einzelnen pysikalischen Rechner laufen lassen.
- Erweiterte Schutzumgebung
-
eine einzelne Virtuelle Maschine ist eine Isolation, verschiedene virtuelle Maschienen dürfen/können sich nicht stören:
- Würde auf einer Virtuellen Maschine das System amok laufen, so
ist das Problem auf diese Virtuelle Maschine begrenzt.
- Sicherheit: auch für einen externen Angreifer muß jede virtuelle Maschine einzeln angegriffen werden.
Das Betriebssystem merkt selber nicht, daß es auf einer Virtuellen Maschine läuft, daher kann man es als Anwendungsprogramm nicht feststellen.
- Migration
- Skalierbarkeit
- Falls eine Menge von Viruellen Maschinen einen erhöhten Resourcenbedarf hat, kann man einen Teil auf einen anderen Server migrieren.
- Höherere Verfügbarkeit - schnellere Systemreperatur
- folgt aus der Migrierbarkeit - Vorraussetzung: Man hat auch die aktuellen Daten verfügbar.
- Einfrieren von Systemkonfigurationen
- Langlebige Entwicklungs/Wartungsprojekte brauchen einen festen Stand einer Softwarekonfiguration
u.a. für Tests
Die Migrationsmöglichkeit erlaubt auch die Nutzung von Resourcen auf verschiedenen Rechnern. und erzeugt daher eine Ortstransparentz. Heute wird das auch mit dem Business-Wort "Cloud Computing" bezeichnet.
Hardwareunterstützung
[SLW2009] berichtet von "faithful Virtualization": trap and emulate: Hier läuft das Gastsystem im einem virtualisierten Modus. Bei einer priviligerten Instruktion ruft die Hardware eine Operation des Virtualisieres auf dem Hostbetriebssystems auf. Damit läuft das Gastsystem direkt auf der Hardware.
Das Gastbetriebssystem bzw. sein Kern wird so modifiziert, dass es auf einem Host-Betriebssystem läuft. Dabei werden priviligierte Instruktionen und Codesequenzen durch Aufrufe auf dem Gastsystem ersetzt. [SLW2009]
(da muß der Betriebssystemhersteller mitmachen - Vorteil bei Opensource)
Vorteile:
- Verschiedene Gastsysteme können die Mechanismen des Gastgebersystems nutzen (Softwaretechnisch, systemtechnisch: schlanker)
- Dieses kann effizienter realisiert werden
[SLW2009] zitiert Papiere, die schreiben, dass die Leistung nahe an die direkte Hardware ausführung des Gastsystems herankommt
Vorkommen:
- Xen (Wikipedia)
- erlaubt echte Virtualisierung mit Hardwareunterstützung, Effizenter ist jedoch eine Unterstützung im Gastsystem.
- L4Linux
- ist die Paravirtualisierung des Linuxkerns auf L4 Kerne
weitere Literatur
- [GuZhao2012] Gu,Zhoa: "A State-of-the-Art Survey on Real-Time Issues in
Embedded Systems Virtualization",Journal of Software Engineering and Applications 2012
-
betrachtet Virtualisierung für Echtzeitsysteme, u.a. mit Microkernen wie L4. Hier wird auch der Einsatz zur Virtualisierung für Smartphones bestätigt.
Umgebung für ein unmodifiziertes Gastsystem auf einem existierendem System (host) (siehe Virtual Box Wiki)
- VMware
- Hier kann man ein Betriebssystem mit VMware auf einem Hostsystem booten
Wikipedia
- VirtualBox
- frei: GPL V2
- MS Virtual PC
Vorteile
- in einem Virtualisierer kann man Anwendungen ausführen ohne ein anderes system zu booten [VB Wiki]
- gegenüber Emulator: keine Geschwindigkeitseinbussen [VB Wiki]
- keine Modifikationen am Host [VB Wiki]
- Testumgebungen/Konfigurationen zur Reproduktion von Lieferzuständen für Systeme [VB Wiki]
- Infrastruktur: Einfachere Migration zur Lastbalancierung (wird genannt z.B. [VB Wiki], aber verschiedene Gastsysteme könnten ja Dienste teilen, und dann kommen wir wieder zu klassischen Betriebssystemen)
Bemerkungen
Exokerne partionieren die Hardware.
Wie ist die Beziehung zu den Exo-Kernen und Hypervisors ?
Emulatoren:
hier wird ein ganzer Rechner simuliert, d.h. die Maschinenbefehle werden von einer Softwarebasierten virtuellen Maschiene interpretiert (anstatt von einem Hardwareprozessor direkt.
Damit kann man auch noch nicht/nicht mehr verfügbare Systeme simulieren.
- Bochs IA33 Emulator
- simuliert PC
- PowerPC-Emulator
- C64-Emulator in Java
- QEmu
-
Emulationen von einem System auf Linux.
Ubuntuwiki über qemu
Wikibook über QEMU
KVM macht das Kernunterstützt
QEMU-Buch Beschreibt QEMU und KVM
[GuZhao2012] beschreibt in Kap.4 Versuche, die KVM realtimefähig zu machen und Realtime Gäste (RTOS) und allgemeine Gäste (GPOS - general purpose OS) nebeneinander laufen zulassen.
- Betriebssystemkerne im Usermode
- sind auch virtuelle Maschinen (Überlegung von Walter Jäger)
- Captive
- ist eine virtuelle Maschine, die die Umgebung eines Treibers liefert.
- jslinux
- ist ein PC-Emulator auf javascript-Basis, der gleich ein kleines Linux im Browser startet.
Nutzen
- Nutzung und Entwickung von Anwendungssoftware auf Rechnern, die es noch nicht oder nicht
mehr gibt.
Bei neuer Hardware kann so parallel entwickelt werden und die
Brauchbarkeit eines Befehlsmixes kann evaluiert werden.
- Nutzung von Software eines anderen Betriebssystemarchitektur
- Betriebssystemkerne im Usermode sind einfacher zu debuggen, weil man dann
eine komfortable Hostumgebung hat.
Komponenten für virtuelle Umgebungen
- Open vSwitch
- ist eine Switch-Emulation
(gefunden im Linux-Kern)
- Openflow
- emuliert router, switches,vswitches und Zugangssysteme
- Open Network Platform
Emulatoren für Laufzeituntersuchungen
- Valgrind
- Virtuelle Maschine von i586 auf i586 um diverse Laufzeituntersuchungen
machen zu können, unter anderem auch Speicherallokationsfehlersuche
Kennzeichen:
- Ein Befehlsmenge wird dynamisch interpretiert
- Die Maschine ist nicht in Hardware gebaut (Vom Microcode mal abgesehen).
- ist eine normaler Prozess im Betriebssystem, mit der Lebensdauer der Applikation. (Daher wird dies auch in engl.Wikipedia als Prozess VM oder Application VM bezeichnet.)
Vorkommen
- 1970 : Firma Datapoint für Programmiersprache PL/B
- HP hatte um 1970 JIT-Compiler für BASIC-Maschinen
- 1980: Orginalimplementierung von UCSD-Pascal: p-code wird auf virtueller
Maschine ausgeführt
- Java Virtual Machine
- Die JVM ist die weit verbreiteste und es gibt sie in verschiedenen Implementierungen.
- Dalvik VM ist eine Register VM für Java
- .NET
- eine virtuelle Maschine für mehrere Sprachen.
(Leider war die Betriebssystemunabhängigkeit aus firmenstrategischen Gründen weniger das Ziel, ist aber möglich)
- The LLVM Compiler Infrastructure
-
- Virtuell Instruction Set
- sprachunabhängige Compiler-Infrastuktur, Optimierer
Vorteile
- Portabilität
- Sun-Paradigma: Write Once, run Everywhere
- Sicherheitsumgebung
(Ada on JVM Kap. 2)
Nachteil: Emulationen kosten immer Leistung
Anwendung
- Applets im Browser
- Browser auf verschiedenen Prozessorarchitekturen wollen Applets nutzen.
- Pervasive Computing
- http://www.nist.gov/pc2000/
- Software Agenten
- Ein Softwareagent möchte über verschiedene Rechenknoten mit
verschiedenen Prozessorarchitekturen migrieren.
Links
- Konzepte und Implementierung virtueller Maschinen Ernst Schneider Diplomarbeit 2000 Uni Hamburg
- Wikipedia über Virtualisierung
- http://virt.kernelnewbies.org/
über Virtualisierung mit Linux
Informatik- und Netzwerkverein Ravensburg e.V
Rudolf Weber
(Der Anfang war die Überlegung von Walter Jäger, dass User Mode-Betriebssysteme auch Virtuelle Maschinen seien in einer Diskussion mit Rudolf Weber)