Moin Moin an der Seite. Jo, gibt es Fragen? Fangen wir mal damit an.
Also ich glaube ich habe alle Eure Einsendungen inzwischen abgearbeitet. Jeder müsste eine
Antwort gekriegt haben. Leider ist irgendwas in Spam gelandet. Jo, auch die letzten Varianten
fand ich gut. Also ausprobiert bis ins Detail tue ich natürlich nichts. Habe ich schlicht nicht
die Zeit dazu. Aber das sieht alles sehr ordentlich aus. Ihr programmiert alle glaube ich nicht das
erste Mal, wenn ich das so sehe. Ich habe da schon Sachen gesehen. Jo, ich weiß jetzt gar nicht,
Aufgabe 2 habe ich jetzt etliche gesehen. Fehlen mir dann Aufgabe 2? Alle die nicht da sind,
die haben es fertig und alle die da sind, die müssen noch. Ok. Ja, also wie üblich, man muss
es nur machen. Kein prinzipielles Problem oder nur machen. Ok. Ja gut, hilft nichts. Irgendwann
muss es mal sein. Jo, gut, wenn ihr keine Fragen habt, dann machen wir da weiter. Ihr erinnert euch
letzte Woche hoffentlich die Geschichten hier mit Segmentierung im 386 aufwärts. Also wir hatten
gesehen das Ding budet erstmal im Real Mode, soll heißen Segmente, wenn ich irgendwas in meinen
Segmentregister lade, wird es sozusagen um 4 geschiftet ins Basisregister rein, Kopette und
Limit auf 64K. Jo und ganz am Anfang, das war so die Initialisierung. Dann geht es weiter. Was
muss man noch wissen? Ja, wie schalte ich jetzt in den Protected Modus um? Also einfach jetzt nur
das Bit anknipsen, das geht in die Hose. Bit anknipsen heißt jetzt ab sofort sind alle, ja
kopiere irgendwas nach Segmentregister, die machen es jetzt halt anders. Die kopieren jetzt nicht mehr
den Wert geschiftet um 4 darein, sondern sie laden jetzt aus der Segmenttabelle, also dieser
Global Descriptor Tabelle. Wenn sie von da laden, dann müssen sie erstmal wissen wo die GDT ist.
Dementsprechend muss man das dem Prozessor sagen. Da gibt es jetzt keinen Standardplatz oder so,
ich glaube das Ding ist mit Null vorinitialisiert, wobei bei Null liegt auch die IDT, die man durchaus
mischen kann. Sie haben auch gewisse Ähnlichkeiten miteinander. Ja, das war glaube ich ursprünglich
sogar mal so gedacht, dass die zusammen in einem Bereich liegen, weil man kann in die IDT und in die
GDT ähnliche Einträge reinpacken. Also die Segmentdescriptoren, die Callgit, die Ignoreme hier mal,
die Taskgit, Ignoreme mal und die Interrupt Descriptoreinträge, die haben alle, die sehen alle
ähnlich aus. Da sehen wir nachher noch ein Beispiel für. Jo, also wenn ich jetzt umschalte in den
Protected Mode, muss ich erstmal die GDT laden. Jo, und wenn ich sie geladen habe, dann kann ich
alle Segmentregister initialisieren. Aber da habe ich auch schon gesagt, ja man muss wirklich alle
initialisieren, sonst stehen einfach die alten Werte noch drin, die ich im Real Mode irgendwann
mal geladen habe. Das um vier geschiftete Zeug steht da drin und das bleibt so lange drin stehen,
bis ich neu was da reinschreibe. Jo, wenn ich jetzt aber natürlich hier so hin und her irgendwie
mache, dann muss ich aufpassen, dass in der Zeit kein Interrupt kommt. Ja, warum?
Also rein theoretisch kann das funktionieren, da müsste man sich aber genau überlegen, ob oder
ob nicht. Nach dem Protected Mode einschalten und oder während des Segmentregisterladens.
Wie könnte ich das hinkriegen, dass da nichts passiert?
Könnte vorher in dem D-Segment, ja in dem D-Segment, das Datensegment, könnte eine Basis
drinstehen und wenn ich hier aus der GDT was lade in das DS-Segment, könnte natürlich ich
genau das gleiche wieder reinladen, was vorher mit vier geschiftet reingelangt ist,
hole ich mir jetzt als Basis aus der GDT. Das könnte funktionieren. Also ich kann sozusagen
eins zu eins umschalten, wenn ich will. Ja, das andere ist, da muss man gegebenenfalls auch noch
darauf aufpassen, in der IDT, da stehen natürlich auch noch Segmentzahlen drin. In der IDT steht
drin, ja wenn der Interrupt so und so, dann bitte schön, machst eine Art Long Jump da und dahin.
Und da steht das Code-Segment-Register drin und da steht dann halt ein Offset der neue Instruction
Point. Ja gut, wenn ich alles umgeschaltet habe, entsprechend initialisiert habe, kann ich die
Interrupt wieder anschalten. Letztes Mal haben wir schon geguckt, ja da steht ja alle Segmentregister
initialisieren, Code-Segment initialisieren mit Long Jump oder Far Jump. Die haben wir schon.
Jo, jetzt brauchen wir noch neben den Interrupts noch mehr. Es geht ja jetzt hier um Segmentierung
und Segmentierung heißt, jetzt gibt es plötzlich so Sachen wie, das Segment gibt es nicht. Wenn ich
dann irgendwie was in mein DS-Segment zum Beispiel laden will und in der GDT steht drin, das Segment
gibt es nicht, ja dann gibt es Exceptions. Das gibt es einmal, wenn das Segment als Ganzes gar
Presenters
Zugänglich über
Offener Zugang
Dauer
01:34:05 Min
Aufnahmedatum
2013-01-17
Hochgeladen am
2019-05-06 17:29:05
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