Praktische Einführung mit Virtualisierung
Stefan Bosse
Universität Koblenz - FB Informatik
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen ::
Abstraktion von Rechnern, Betriebssystemen und Software
Virtuelle Maschinen und Virtualisierung sind zentraler Bestandteil im Betrieb moderner Rechneranlagen und Bestandteil von Betriebssystemen
Die Virtualisierung von Rechnerressourcen bringt in verschiedener Hinsicht neue Nutzen. Sie kann auf verschiedenen Stufen erfolgen und ist bereits teilweise in den Konzepten des Prozessmodells und des virtuellen Speichers realisiert.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Anwendungsbereiche
Eine Reihe von Virtualisierungsansätzen im Umfeld des Betriebssystems:
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Taxonomie der Virtuellen Maschinen
Es können zwei wesentliche Klassen unterschieden werden:
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Taxonomie der Virtuellen Maschinen
VM,Smith,2005
Übersicht und Klassendiagramm der VM Architekturen und Methodem
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Virtualisierung
VM,Smith,2005
Virtualisierung. Formal ist Virtualisierung die Konstruktion eines Isomorphismus zwischen einem Gastsystem und einem Host; e' ◦ V(Si) = V ◦ e(Si). Dabei ist e eine Funktion im Gastsystem, die den Zustand Si in Sj überführt. Die Virtualisierung V "übersetzt" den Zustandsübergang in das Hostsystem. Im Host gibt es eine entsprechende Abfolge von Operationen e', die eine äquivalente Änderung des Hostzustands vornimmt (Änderungen S'i zu S'j).
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Virtualisierung
VM,Smith,2005
Implementierung virtueller Festplatten. Virtualisierung bietet eine andere Schnittstelle und / oder Ressourcen auf derselben Abstraktionsebene. Das Dateisystem ist Virtualisierung!
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Sandboxing (virtuelles Laufzeitsystem)
Jede Sandbox ist ein separater User Space, der sich mit anderen Sandboxen lediglich den geschützten Kernel Space teilt.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Sandboxing (virtuelles Laufzeitsystem)
Die im Unix-Bereich klassische Lösung der chroot-Umgebung kann nicht dieselbe Isolation gewähren wie das Sandboxing-Konzept, da die damit realisierbare Isolierung unvollständig ist.
Anwendung findet das Sandboxing bei Anbietern von Virtual Hosting, zur erhöhten Isolierung kritischer Applikationen bei sich wechselseitig nicht trauenden Systembenutzern, zur feineren Kontrolle der Ressourcenzuteilung und zur Ermöglichung einfacher Migrierungen von Applikationen.
Im Vergleich zu Lösungen mit einem Virtual Machine Monitor ist der Zusatzaufwand gering, da stets dieselbe Systemprogrammierschnittstelle genutzt wird und spezielle Hardware unnötig ist. Allerdings wird nicht dieselbe Flexibilität erreicht, da nur Applikationen für dieselbe Betriebssystemplattform lauffähig sind.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Sandboxing (virtuelles Laufzeitsystem)
Ein Schritt weiter: Ein ganzer Rechner wird aufgeteilt und wird mehreren Betriebssystemen und Betreibern (Kunden) zur Verfügung gestellt.
Beispiel: https://edu-9.de ist Virtual Private Server Hosting!
Auf einem virtuellen privaten Server wird eine eigene Kopie eines Betriebssystems (OS) ausgeführt, mit möglicherweise Zugriff auf die Superuser-Ebene dieses Betriebssysteminstanz, sodass sie nahezu jede Software installieren können, die auf diesem Betriebssystem ausgeführt wird.
Für viele Zwecke entspricht es funktional einem dedizierten physischen Server und kann softwaredefiniert einfacher erstellt und konfiguriert werden (z.B. webbasierte Installationd eines Betriebssystems).
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Sandboxing (virtuelles Laufzeitsystem)
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Eine virtuelle Systemmaschine. Virtualisierungssoftware übersetzt die von einer Hardwareplattform verwendete ISA in eine andere und bildet eine virtuelle Systemmaschine, die in der Lage ist, eine Systemsoftwareumgebung auszuführen, die u.U. auch für eine andere Hardware entwickelt wurde.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Beispiele für Anwendungen virtueller Maschinen. (a) Emulieren eines Befehlssatzes mit einem anderen; (b) Replizieren einer virtuellen Maschine, so dass mehrere Betriebssysteme gleichzeitig unterstützt werden können; (c) Komponieren von Software für virtuelle Maschinen zu einem komplexeren, flexibleren System.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Neben der Speichervirtualisierung ist heute die Bereitstellung virtueller Rechnerumgebungen durch einen Virtual Machine Monitor (VMM) bzw. Hypervisor die wichtigste Virtualisierungsform.
VMM-Typen: Ohne (bare metal) und mit zwischengeschalteten Betriebssystem
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Ein VMM kann auf zwei Arten realisiert werden, die als Typ-I- und Typ-II-VMM bezeichnet werden.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Ein VMM muss nach Popek/Goldberg (1974) drei Kerneigenschaften unterstützen:
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
In der Anfangszeit der VMM in der PC-Welt fehlte eine passende Hardwareunterstützung, sodass sich der VMM und das in der VM ablaufende Betriebssystem den Kernmodus teilten.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Zustandsmodell für Privilegiensystem der CPU
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Was passiert nun, wenn ein Programm im Benutzermodus eine privilegierte Instruktion ausführen will? Die CPU wird in diesem Fall den Befehl nicht ausführen, sondern einen Software-Interrupt (trap) auslösen. Wird ein VMM eingesetzt, so läuft nur der VMM im privilegierten Modus. Aller restlicher Code, einschließlich irgendwelcher Betriebssysteme, läuft im Benutzermodus. Die Unterscheidung eines Betriebssystems zwischen Benutzer- und Kernmodus wird nämlich durch den VMM ebenfalls virtualisiert.
Sichere Virtualisierung mittels Privilegiensystem: KM*: virtualisiertes Privilegien-Bit (pro VM)
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Einsatz von VMM für ...
VMM für die Serverzusammenführung (Konsolidierung) auf einer Hardware
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Einsatz von VMM für ...
VMM-Einsatzszenario Applikationsmigration
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: System-VM
Einsatz von VMM für ...
VMM-Einsatzszenario Softwaredistribution (Beispiel) mit Replikation
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM
Beispiele für Hochsprachen Prozess-VMs:
Kompiler werden eine Programmiersprache in ein i.A. lineares Maschinenprogramm übersetzen. Dabei wird die Komplexität reduziert.
Für die zuvor beschriebenen Prozess-VMs ist die plattformübergreifende Portabilität eindeutig ein sehr wichtiges Ziel. Vollständige plattformübergreifende Portabilität lässt sich leichter erreichen, wenn die Prozess-VM in ein gesamtes Software-Framework integriert wird.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM
Hochsprachenumgebungen. (a) Ein herkömmliches System, in dem plattformabhängiger Objektcode erzeugt, verteilt und ausfgeführt wird → starke Betriebssystem- und Rechnerabhängigkeit; (b) eine HLL-VM-Umgebung, in der portabler Zwischencode von einer plattformabhängigen virtuellen Maschine "ausgeführt" wird → schwache Betriebssystem- und Rechnerabhängigkeit.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM
VM,Smith,2005
Eine virtuelle Prozessmaschine ist Virtualisierungssoftware die einen Satz von Anweisungen auf Betriebssystem- und Benutzerebene übersetzt, und eine Plattform auf eine andere abbildet - quasi ein Kompiler mit laufzeitumgebung (runtime).
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM
Klassen der Hochsprachen Prozess-VMs:
interpret(method) { while( code remains in sequence ) { read the next code from the sequence; if (the code needs more data){ read more data from the sequence; } perform actions specified by the code; } }
Der Interpreter
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM
int x; x=0; x=x+1; printf("%d",x);if (x<0) { x=-x; } else { x=1; };------------------------------------------------ALLOCATE(4) VARIABLE(x) NUMBER(0) WRITE VARIABLE(x) VARIABLE(x) READ NUMBER(1) ADD WRITE STRING("%d") VARIABLE(x) READ CALL(printf)VARIABLE(x) NUMBER(0) LT BRANCHZ(5) VARIABLE(x) VARIABLE(x) READ NEG WRITE BRANCH(3) VARIABLE(x) NUMBER(1) WRITE
Beispiel Überstzung C Programm in lineare Instruktionssequenz für abstrakte Stackmaschine
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM
Register Maschine
Stack Maschine
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM Interpreter Loop
CS[];ip=0;while(!terminated) { code=CS[ip] instr=decode(cmd) status=execute(instr) ip=next(instr,status)}
Die Main Loop
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM Interpreter Loop
struct command { opcode : opcodes[OPNAME], operands : operand [],};enum opcodes { OP1 = 1, OP2 = 2, ...}union operand { number_t constant; address_t address; address_t register;}
Instruktionsformat
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM Interpreter Loop
Wie bildet man einen (numerischen oder symbolischen) opCode auf eine Funktion effizient ab?
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM Interpreter Loop (Option 2)
while() { op=CS[ip] if (op==OP1) { status=doop1(arguments); } else if (op==OP1) { status=doop1(arguments); } else if (op==OP2) { status=doop2(arguments); } ... else if (op==OPN) { status=doopN(arguments); } ip=next(ip,op,status);}
Nicht effiziente Implementierung einer Instruktionsschleife in C mit linearer Ausführungszeit ohnen Möglichkeit der Optimierung durch Compiler - Option 1
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM Interpreter Loop (Option 2)
while() { op=CS[ip] switch (op.code) { case OP1: status=doop1(arguments); break; case OP2: status=doop2(arguments); break; ... case OPN: status=doop3(arguments); brak; } ip=next(ip,op,status);}
Effiziente Implementierung einer Instruktionsschleife in C mit linearer Ausführungszeit (Mulitplexer), aber mit Möglichkeit für den Compiler mittels Tabellen in konstanter Laufzeit zu realisieren - Option 2
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Prozess-VM Interpreter Loop (Option 3)
enum opCode { OP1, OP2, ... MAXOP};void op1(..); ...OPTABLE[MAXOP]={op1,op2,..}...while() { next=OPTABLE[op.code] next()}
Effiziente Implementierung einer Instruktionsschleife in C mit konstanter (?) Ausführungszeit (LUT) - Option 3
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: JIT Übersetzung
Die Ausführung von Maschineninstruktionen in Software führt zu geringer Verarbeitungsgeschwindigkeit. Typisch werden 100 native Maschineninstruktionen für die Ausführung einer abstrakte Instruktion benötigt.
Die erste Frage an JIT ist, wie der zu kompilierende Anwendungscode ausgewählt wird?
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: JIT Übersetzung
Eine Methode oder Funktion wird aufgrund ihrer genau definierten semantischen Grenze als Kompilierungseinheit betrachtet.
Bei Daten wird es schwieriger die semantische Grenze zu finden!
Googles V8 Engine als dominanter Vertreter einer JIT HLL Prozess-VM. Bei numerischen Berechnungen erreicht V8 nahezu native Code Performanz (z.B. Matrixmultiplikation)
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: JIT Übersetzung
DOI:10.1145/3067695.3082521
Java-Quellcode wird zuerst zu Bytecode kompiliert und anschließend als nativer Code interpretiert oder ausgeführt. Umfangreiche Optimierungen sind für die JIT-Kompilierungsphase reserviert. JAVA JVM JIT erzeugt aber schlechteren Code (langsamer) wie V8 JIT und die Konzepte konzentrien sich auf Programmcode (und nicht Daten). Dafür werden eine Vielzahl von Prozessoren und Rechneranlagen unterstützt - V8 ist nur für ia32/ia64 optimiert!
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: JIT Übersetzung
JIT benötigt Datentypen und Speicherinformation von Variablen, Funktionen und Funktionsargumenten!
Dynamisch typisierte Sprachen (JavaScript, Lua) können diese Informationen nicht liefern, sondern Typsignaturen müssen zur Laufzeit vom JIT Compiler abgeleitet werden. Zeitaufwändige Operation!
Statisch typisierte Sptachen wie Java haben dieses Problem nicht, jedoch ist fraglich woher die Typinformationen kommen. Im Bytecode sind nur sehr begrenzte Informationen verfügbar.
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: JIT Übersetzung
Ein abschließendes Beispiel:
goto <line>
10: a=115: goto 2020: b=a------------------------------------------------------------------------------------------------0 2 4 5 7 9 10 12LINENUMBER(10) VARIABLE(a) ASSIGN NUMBER(1) LINENUMBER(15) GOTO LINENUMBER(20) LINENUMBER(20) ...LINENUMBER(10) VARIABLE(a) ASSIGN NUMBER(1) LINENUMBER(15) GOTO ADDRESS(12) LINENUMBER(20) ...
Stefan Bosse - Grundlagen der Betriebssysteme - Modul V Virtuelle Machinen :: Vertiefende Literatur
[1] J. E. Smith and R. Nair, Virtual Machines Versatile Platforms for Systems and Processes. Elsevier, 2005.
[2] X.-F. Li, Advanced Design and Implementation of Virtual Machines. CRC Press, 2017.
[3] Reinhard Wilhelm , H. Seidl, Übersetzerbau VirtuelleMaschinen. Springer, 2007.
[4] lain D. Craig, Virtual Machines. Springer London, 2006.