17 - Virtuelle Maschinen [ID:10991]
50 von 717 angezeigt

Die Technik läuft. Moin moin andersalz. Erste Frage, gibt es Fragen?

Okay, dann machen wir los.

Jo, letzten Mittwoch, letzte Folie.

Wie basteln wir bei Hardware-basierter Virtualisierung uns eine MMI-Simulation?

Haben wir uns das letzte Mal angeguckt und haben gesagt, möglich wäre, dass eine Hardware mehrere CR3-Page Directory-Basisregister-Werte zur Verfügung stellt.

Und wenn man da was reinlässt, dann ist das okay, wenn es in einem dieser vier Zahlen drin steht.

Jo, waren auch die Ideen, dass der Pointer in Ordnung ist, ist die eine Geschichte.

Aber das, wo der Pointer hin zeigt, die Tabelle muss eigentlich auch in Ordnung sein.

Da haben wir uns schon angefangen zu überlegen, wie man da aufpassen kann, wie man die Tabellen checken kann.

Und die Idee, das Problem war, man muss jedes Mal checken, wenn der CR3-Wert umgesetzt wird auf die Tabelle, dass die Tabelle in Ordnung ist.

Von den Tabellen haben wir grob mal überschlagen, maximal eine Million Pages, die da drin liegen.

Jedes Mal eine Million Pages überprüfen.

Oberkühl, keine Chance.

Aber, und das war dann die Idee, naja, dann machen wir die Page-Tabellen doch Read-Only.

Dann kann der Gast nicht dran rumfummeln.

Jo, ich mache nochmal wieder kleine Tabelle hin.

Das ist auch von der Art her, wir haben einen Pointer auf einer obersten Tabelle.

Und daran hängen dann mehrere Tabellen.

Und an den Tabellen hängen die eigentlichen Pages.

Gut, die Idee, Mittwoch war schon, naja,

wenn denn nachträglich der Gast hier was eintragen will,

dann und nur dann müssen wir ja checken.

Gut, Idee, machen wir die ganze Tabelle Read-Only.

Dann kann er nicht ungefragt eintragen.

Er muss aber eintragen können.

Jo, wie machen wir das, dass er eintragen kann?

Na ja, wenn wir merken, PageFault, weil er will da was einschreiben,

dann tragen wir ihn hier oben raus.

Und machen wir ihm diese Seite Read-Write und lassen ihn weiterlaufen.

Dann kann er da was eintragen, was er lustig ist.

Und dann, wenn er darauf zugreift, auf die neu eingetragene Page,

kriegt er wieder einen PageFault, weil hier oben nicht eingetragen.

Und im PageFault-Händler können wir dann gucken,

wo wollte er denn eigentlich hin langen?

Ach, da sollte eigentlich die Tabelle eingetragen sein.

Dann überprüfen wir diesen kleinen Abschnitt, ob der in Ordnung ist.

Wenn ja, tragen wir ihn da oben wieder ein.

Dann lassen wir ihn dann wieder weiterlaufen.

Jo, das war so die grundsätzliche Idee.

Also ihr werdet noch merken, die MNU ist für viele Sachen gut.

Das ist zwar auch immer ein Hinterungsgrund, was so die Simulation angeht,

ein mühsames Geschäft das Ding zu simulieren,

aber wenn man sie hat, kann man viele Sachen mitmachen.

Jo, und jetzt hatte ich am Mittwoch aber angedeutet,

erstens weiß ja die virtuelle Maschine eventuell gar nicht,

was sie überhaupt eintragen darf.

Woher weiß sie dann, welche Pages sie verwenden darf?

Weiß man doch so, gewöhnlicherweise nicht,

denn wir müssen ja irgendwo einen Sack voll Pages herkriegen.

Und gewöhnlicherweise habe ich gesagt, kennt eine MNU oder kennt ein Betriebssystem

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:29:27 Min

Aufnahmedatum

2015-12-11

Hochgeladen am

2019-05-07 04:49:02

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