14 - Virtuelle Maschinen [ID:10963]
50 von 768 angezeigt

Dann offiziell Moin Moin. Wir haben gestern aufgehört mit dem Problemchen MMU. Ihr erinnert euch,

wir müssen die MMU dem Gast irgendwie vorgaukeln. Wir kriegen mit, wenn er mit CR3 irgendwas versucht

anzustellen. Dann haben wir gesagt, wenn er CR3 setzt auf seine neue Tabelle, dann durchwühlen

wir die Tabelle, passen die Tabelle an und dann lassen wir ihn machen und machen die Tabelle in

der Zwischenzeit Read-Ondi. Oder nicht nur Read-Ondi, sondern ganz weg, damit er auch die getürkten

Werte nicht sieht. Und wenn er was dran ändern will oder wenn er es wieder lesen will, dann knipsen

wir die Tabelle wieder aus oder zumindest einen Teil von der Tabelle und switchen da immer hin und her.

Es gäbe eine ganz andere Variante, weil jemand noch eine ganz andere Idee, wie man das machen könnte.

Ein Problem der ganzen Geschichte ist, wir müssen die Tabelle immer hin drehen und wir müssen wieder

zurück drehen. Wir müssen sie wieder hin drehen, wir müssen wieder zurück drehen. Je nachdem,

ob er sie jetzt nutzen will oder ob er sie lesen, schreiben will. Da könnte man sagen,

naja warum jetzt immer hin und wieder hinten. Dann nehmen wir doch einfach eine zweite Tabelle.

Wohin führt uns die Idee? Man könnte das als Shadowtable bezeichnen. Das hat im Prinzip die

gleiche Struktur. Wenn die echte Tabelle 10 Einträge hat, dann hat die Schattentabelle

auch 10 Einträge, dann sehen sie halt ein bisschen anders aus. Was würde das heißen?

Er hat uns eine Tabelle gegeben, die baut er sicher in seinem Speicher auf,

mit den entsprechenden Pointeren drin und er sagt, da möchte ich meinen CH3 draufsetzen.

Was machen wir dann?

Vielleicht meinst du das richtig, ich verstehe es nur falsch. Also das ist das, was er uns gibt.

Wir haben ihm ihr Speicher gegeben und in dem Speicher beschreibt er eine Tabelle und er sagt,

da möchte ich CH3 draufsetzen. Also das ist jetzt hier Gast.

Vielleicht meinst du das Richtige.

Genau, das jetzt eben in einer Schattentabelle, also nicht die modifizieren, sondern wir nehmen

sozusagen den Speicher, den der Host hoffentlich noch übrig hat und bauen im Prinzip die gleiche

Tabelle nochmal auf. Von der Form her sieht sie identisch aus. Wenn hier zwei Einträge

drin sind, die hier drauf verweisen, dann sind es hier auch genau die zwei Einträge an den

entsprechenden Stellen. Hier steht natürlich jetzt ein Pointer auf die Tabelle, hier steht

ein Pointer auf die Tabelle. Nun setzen wir das CH3 nicht da hin, sondern CH3 zeigt jetzt

auf die Tabelle. Ein Vorteil hast du schon genannt, wenn der Gast jetzt da drin liest,

zum Beispiel wenn jemand einen Mellok macht und er sucht jetzt die nächste freie Page,

dann kann er hier drüben rühlen und suchen und machen und tun, kann er gerne tun, kein

Problem. Wie schaut das mit den anderen Operationen aus, die wir ja sonst auch noch so haben?

Wenn er verändert, dann müssen wir uns markieren, für unser CH3 müssen wir kurzfristig

den Ch3 verändern lassen und wenn er das in der nächsten Phase Zugriff wieder machen

möchte, dann müssen wir ihn komplett durchwühlen. Er will ändern, er will hier einen Eintrag

reinschreiben. Dann, wie kriegen wir das mit? Page fault write protected. Jetzt könnten

wir den Eintrag gleich übernehmen, wir simulieren die eine Instruktion. Da haben wir schon gesehen,

man kann das natürlich auch drauf addieren, man kann es reinschreiben, man kann es wegodern,

das war gestern die Lösung. Welche Tabelle einen Eintrag invalidieren wir? Wenn er jetzt

verändert hat, dann müssen wir den Page directory und Phasensregister einbreiten.

Wenn wir merken, den ändert er, was können wir da reinschreiben? Richtig reinschreiben

wird mühsam, dann müssen wir sämtliche Befehle nachmachen. Man kann ja auch noch

die Tabelle einbreiten, wenn man das nicht befreit. Wir schreiben einfach eine große

Null rein, die Seite gibt es nicht. Jetzt haben wir ja normalerweise etwas falsches

eingetragen, er hat ja eine sinnige Page eingetragen. Wann merken wir, dass wir etwas

falsches eingetragen haben? Wenn er jetzt die Tabelle nutzt und jetzt auf die, die Adresse

zeigt, benutzt, dann kriegt er einen Page fault. Dann gucken wir mal nach, war das jetzt

eigentlich ein berechtigter Page fault? Ja oder nein? Dann werden wir merken, bei uns

steht eine Null, bei ihm steht inzwischen aber was anderes. Dann hätten wir ihm wohl was

geben sollen, dann können wir gucken, was hat er dann reingeschrieben? Umrechnen, da

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:34:20 Min

Aufnahmedatum

2012-12-07

Hochgeladen am

2019-05-05 15:39: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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen