Okay, dann machen wir los. Vielleicht kommt ja noch einer oder nicht.
Ich bin ein paar Folien zurückgegangen. Paravirtualisierung. Ihr erinnert euch an
vor Weihnachten. Die Idee für Paravirtualisierung war, wir haben eigentlich die echte Hardware.
Wir haben drauf ein ganz normales zum Beispiel Linux-Laufen und wir nehmen jetzt ein weiteres
Betriebssystem und das ändern wir so, dass es nicht Hardware zum Laufen braucht, sondern
stattdessen ein Betriebssystem als Hardware ansieht. Die Idee ist dann, man braucht ja nur
in dem Gastbetriebssystem die Hardware-Schicht anzupassen. Beispielsweise bei einem Linux-Kern.
Linux besteht zu, ich weiß gar nicht wie viele Megabytesaußen das inzwischen sind, aber da sind
bloß ein paar wenige Kilobyte vergleichsweise. Moin Moin, da seid ihr hier falsch. Moin Moin,
kommt doch noch einer, der eine oder andere. Also ein Linux-Kern, der an sich recht groß
ist. Die eigentliche Hardware-Abhängigeschicht, die ist nur ein paar Kilobyte groß und nur
diese paar Kilobyte, die müsste man versuchen anzupassen. Haben wir uns angeguckt vor
Weihnachten, wie man das machen könnte. Da haben wir gesehen, zum Beispiel, da war die
Liste, man nehme als physikalischen Speicher eine Datei. Da haben sich bei dem einen oder
anderen wahrscheinlich schon die Nackenhaare gekräuselt, weil irgendwie passt das ja eigentlich
nicht so wirklich. Virtuelle Speicher ist dann eine gemäppte Datei. Interrupts, dann
nehmen wir einfach Signale. Ihr wisst, das ist ja fast das gleiche, bei der Symantec her
jedenfalls. Und so weiter. Dann haben wir alles durchgekaut. Worauf ich hinaus möchte,
war, nochmal zurück möchte, ist der Teil mit dem Memory-Mapping. Da haben wir uns eine
Weite darüber unterhalten, wie das denn so funktioniert. Es gibt unter Linux ein, beispielsweise
POSIX allgemein, ein MMAP-Systemcall, wo man sagen kann, der Teil der physikalischen Datei
soll an der Stelle im Speicher eingeblendet werden. Geht, also von daher kein Problem.
Im Prinzip das, was eine MMU auch macht. Nur, das ist natürlich ein Systemcall und ich
muss für jede Page Map, Unmap, muss ich eigentlich ein Systemcall machen. Und da haben wir gesagt,
ja performantmäßig ist das eher dünn. Also beispielsweise beim Kontextwechsel, wenn ich
dann ein paar tausend Seiten unmappen muss und ein paar tausend neue mappen muss, das
dauert ewig und drei Tage. Ja, da kommt jetzt der zweite Teil und da wollen wir das Ganze
mal ein bisschen auf Performance trimmen. Gleiche Idee wie vorher. Also wir nehmen ein
Betriebssystem und passen das auf einen drunter liegenden Kern an. Aber da geht es jetzt drum.
Wir haben gesehen, das erste ist, wir brauchen eigentlich von dem User Mode, Linux User Mode,
Windows oder was auch immer das ist, eigentlich nur wenig Systemcalls. So ganze rechte Überprüfungen
brauchen wir nicht. Was haben wir damit? Was haben wir noch? Pipes, Sockets, alles mögliche Zeugs.
Vieles, vieles brauchen wir nicht. Und auf der anderen Seite haben wir gesehen, naja so ein
MMap Systemcall, der tut im Prinzip zwar das, was wir wollen, aber viel zu langsam. Und
das war eigentlich lieber. Und was wir brauchen ist ja eigentlich beim Kontextwechsel das,
was die echte Hardware macht. Ich habe ein CR3 und das setze ich auf eine neue Tabelle und
dann ist alles glücklich und zufrieden. Sowas bräuchte ich. Also ein MMap Systemcall,
der ein altes MMapping wegschmeißt und aus einer großen Tabelle das MMapping neu aufbaut.
Also ein Systemcall. Ja, das ist gut. Also jetzt könnte man sagen, naja dann bauen wir doch diese
speziellen Systemcalls in einen Linux Kern ein, dann könnte der virtuelle Maschinen optimal
unterstützen. Oder, und das ist das, was wir jetzt hier uns angucken wollen, in vielen Fällen ist es
aber auch gleich so, dass auf das neben den virtuellen Maschinen eigentlich gar keine
anderen Applikationen mehr drauf. Also stellt euch vor, ihr seid irgendwie so im großen,
weiten Internet, Internet Provider. Ihr wollt Maschinen vermieten, Webserver oder irgend sowas,
dann braucht ihr eigene, ja dann wollt ihr virtuelle Maschinen vermieten. Dann habt ihr
auf einem großen Server habt ihr 100 virtuelle Maschinen. Ja, daneben läuft gar nichts. Was
soll daneben laufen? Das Ding ist ja nur fürs Internet gut und am Internet hängen sollen die
ganzen virtuellen Maschinen. Ja, und dann könnte man natürlich sagen, ja wir brauchen nur wenige
Systemcalls, wir brauchen spezielle Systemcalls und vieles brauchen wir gar nicht. Dann schmeißen wir
doch das aus dem Gastgeberbetriebssystem alles raus, was wir nicht brauchen. Dann schrumpelt das schon mal
Presenters
Zugänglich über
Offener Zugang
Dauer
01:31:25 Min
Aufnahmedatum
2016-01-13
Hochgeladen am
2019-05-07 21:09:04
Sprache
de-DE
Vorgestellt werden verschiedene Virtualisierungs-Ansätze:
-
Emulation
-
Just-In-Time-Compiler
-
Para-Virtualisierung
-
Bibliotheks-basierte Virtualisierung
-
OS-Virtualisierung
Lernziele und Kompetenzen:
Studierende, die das Modul erfolgreich abgeschlossen haben:
-
erläutern verschiedene Motivationen für den Einsatz von VMs
-
unterscheiden verschiedene VMs
-
klassifizieren verschiedene Ziele unterschiedlicher VMs (z.B. Performance, Konfigurierbarkeit, Genauigkeit, ...)
-
hinterfragen verschiedene Simulationansätze für MMUs
-
erstellen virtuelle Komponenten und Busse
-
strukturieren Callbacks und entsprechendes Forwarding und Caching
-
unterscheiden zwischen Architektur, Chip und Komponente
-
klassifizieren unterschiedliche Just-In-Time-Compiler-Ansätze
-
erzeugen JIT Code aus vorgefertigten Code-Teilen
-
bewerten unterschiedliche JIT-Code-Optimierungen
-
erläutern Probleme bei der JIT-Code-Invalidierung
-
nennen JIT Probleme mit Exceptions/Interrupts sowie berechnete Sprüngen und Return-Instruktionen
-
unterscheiden verschiedene JIT Cache-Verwaltungen
-
beschreiben Möglichkeiten der Fehlerinjektion durch VMs
-
entwickeln ein an JIT angepasstes virtuelles "Hardware"-Design
-
erläutern die Java-VM Instruktionssatz-Architektur
-
nutzen Hardware-basierte Virtualisierung
-
entwickeln Verfahren zum Ausfiltern bestimmter Befehle
-
erläutern Probleme der Speicherverwaltung bei HW-basierter Virtualisierung
-
nutzen User-Mode-Emulation zur Paravirtualisierung
-
diskutieren Möglichkeiten von Debuggern für die Umleitung von System-Calls und die Ausfilterung von Befehlen
-
nutzen einen Hypervisor zur Paravirtualisierung
-
unterscheiden verschiedene Ansätze zur Geräteverwaltung in paravirtualisierten Systemen
-
erläutern Betriebssystem-basierte Virtualisierung
-
entwickeln unterschiedliche Bibliotheks-basierte Virtualisierungen
-
erläutern Probleme beim Speicher-Layout bei Bibliotheks-basierte Virtualisierung
-
konzipieren Personalities für Bibliotheks-basierte Virtualisierungen
-
beurteilen Probleme bei der korrekten Zeit-Simulation
-
nennen Ideen für die dynamische Anpassung der Zeit-Simulation
-
klassifizieren bekannte VMs (z.B. VICE, FAUmachine, QEMU, Bochs, JVM, KVM, User-Mode-Linux, Xen, VServer, Wine)
-
diskutieren in der Gruppe Vor- und Nachteile von bestimmten VM-Ansätzen
-
entwickeln selbst CPU-Emulationen
-
entwickeln selbst Geräte-Emulationen
-
verteilen Implementierungsaufgaben in ihrer Gruppe