21 - Virtuelle Maschinen [ID:10995]
50 von 535 angezeigt

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

Teil einer Videoserie :

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen