Okay, ihr seid beim austeilen, aber das könnt ihr auch nebenbei.
Dann möchte ich jetzt noch mal zurück, drei Wochen zurück.
Ihr erinnert euch vielleicht noch so ein bisschen.
Wir haben uns angeguckt, Paravirtualisierung, zweiter Teil.
Paravirtualisierung, erster Teil war User Mode Linux.
Da war das Linux auf den Linux-Kern angepasst.
Da haben wir gesagt, dass mit dem Linux-Kern darunter als Hardware das nicht so wirklich passt.
Dann haben wir gesagt, stattdessen nehmen wir jetzt lieber irgendwie ein abgespecktes Betriebssystem.
Viel braucht man nämlich schlicht nicht.
Und auf der anderen Seite, einiges könnte man stattdessen besser brauchen.
Dann nehmen wir das Betriebssystem halt nicht mehr Betriebssystem, sondern Hypervisor
und packen da drauf jetzt portierte Kerne, die jetzt eben nicht mehr auf i3-86 laufen
oder so, sondern die laufen jetzt auf dem Hypervisor XY.
Das, was wir uns zum Schluss angeguckt haben, waren die IO-Möglichkeiten, die es jetzt
geben muss irgendwie für die portierten Betriebssysteme.
Die wollen ja letztendlich alle irgendwie IO machen, da bleibt mir ja nicht alles übrig.
Und da waren diese drei Möglichkeiten.
Entweder kann man natürlich in den Hypervisor, wie bisher im Linux, irgendwelche IO-Möglichkeiten
einbauen.
Was weiß ich, ich sage dem Hypervisor, er soll mal ein Netzwerkbäckchen verschicken,
dann macht das.
Oder ich sage ihm, lies mal Block 13 von Platte und dann macht das.
Oder, das war die andere Variante, die uns angeguckt haben, haben gesagt, ob dem Hypervisor
das alles fürchterlich stürzt, der kümmert sich nicht drum, der sagt einfach, hier, virtuelle
Maschine, da hast du die Grafikkarte, mach damit was du willst.
Gut, und der Hypervisor kann es tun im Sinne von MMU, was weiß ich, er kann die MMU so
programmieren, dass nur die erste Domain überhaupt auf die Speicherbereiche der Grafikkarte
zugreifen kann.
Dann ist auch sichergestellt, nur die Domain 0, sagen wir mal, er kann auf die Grafikkarte
malen.
Dann könnte die anderen ja nicht dazwischenfummeln.
Und mit IOPorts geht es im Prinzip genauso, jedenfalls bei Intel, da kann man so einzelne
Bits anknipsen, mit denen man einzelne Prozesse sagen kann, du darfst auf die Grafikkarte,
du darfst auf die Netzwerkkarte, du darfst dahin.
Und der letzte Punkt, da waren wir nicht fertig geworden, haben wir gesagt, der Hypervisor
könnte auch die Kontrolle an eine virtuelle Maschine geben, Domain 0, da hast du alles,
mach damit was du willst.
Und alle anderen gestarteten virtuellen Maschinen kriegen gesagt, ja, wenn du IOPorts machen
willst, frag ihn.
Das sieht dann irgendwie so aus.
Wir haben unseren Hypervisor, der Hypervisor macht praktisch alles, was die CPU und den
Speicher angeht.
Also wenn da das Ding irgendwie Speicher anfordern will, Hypervisor fragen, wenn das Ding eine
weitere CPU sozusagen braucht, kann es hier einen Prozess kriegen und alles weitere geht
dann halt über die Domain 0, über die Treiber in der Domain 0 an die Grafikkarte, Netzwerkkarte,
was sonst so alles gibt.
Ja, dann haben wir gemeint, das ist an sich schon mal sehr schön, weil der Hypervisor
ist jetzt klein.
Gut, das sieht jetzt hier eigentlich so aus, Hypervisor groß, Treiber klein.
Wenn man sich das in der Praxis anguckt, dann sieht das allerdings aus, Treiber, Hypervisor.
Presenters
Zugänglich über
Offener Zugang
Dauer
01:32:50 Min
Aufnahmedatum
2013-01-10
Hochgeladen am
2019-05-06 13:09:03
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
-
untersuchen CPU-Emulationen
-
untersuchen Geräte-Emulationen