HALT 9, Moin Moin allerseits, gibt's Fragen?
Okay, von mir die Frage, hat jeder ein Zettelchen?
Sind drei Stapeln.
Alle anderen mögen sich gebeten fühlen Feedback dann auch abzugeben.
Ich habe zwar inzwischen zwölf Zettel, glaube ich, verteilt, aber zwei Rückmeldungen.
Der Rest hat noch diese Woche Zeit.
Jo, okay, was machen wir heute?
Heute machen wir den Rest von der Aufgabe, oder die Aufgabe kennt ihr, für die Leute, die 7,5 ECTS haben wollen,
Segmentierungen und Exceptions in ihre Wirt der Maschine einbauen.
Und das, was jetzt hier steht, ist das, was man auch vermissen muss.
Teil davon haben wir am Freitag gemacht, jetzt noch der Rest.
Ihr habt gesehen, GDT, Einträge, acht Beut jeweils und irgendwie so zusammengefrickelt die Info, die man halt braucht, um ein Segment zu beschreiben.
Jo, wie wird das Ganze jetzt initialisiert? Ja, initialisiert wird es in dem Sinne, dass man sagt, der Prozessor, also egal AMD, Zyrex, Intel, wie auch immer,
wir starten alle im Real Mode, also sprich Segmentierung so halbeingeschaltet, nur mit halber Funktionalität.
Ja, warum im Real Mode?
Kompatibilität, damit auch das alte MS-Los damals noch funktioniert hat.
Jo, wenn Real Mode, dann habt ihr gesehen, dann wird einfach das Segment, was ich eingestellt habe, als Bit 19 bis 4 zur Adresse dazu gradiert.
Ihr kennt das, nichts aufregendes.
Jo, und wie wird es dann benutzt?
Ja, also alle Segmente sind so eingestellt, dass sie Basis 0 und Limit 64k haben.
Das ist einfach. Eine Ausnahme, logisch, Ausnahmen gibt es immer.
Das ist das Code-Segment und das Code-Segment liegt bei Adresse FFFF0000, auch Limit 64k.
Wo kommt das jetzt her? Ja, ursprünglich war es mal die Basis F0000.
Da war es halt nur ein 21-Bit-Rechner.
Und jetzt, nachdem man gesagt hat, ja, das BIOS mit seinen 128kB, was an der Stelle damals lag, ist ein bisschen kleiner geraten, da braucht man ein bisschen mehr Platz.
Deshalb hat man sich jetzt am Ende des Speichers verbangen, am Ende der 32-Bit.
Ja, dementsprechend ist die Basis dann entsprechend größer geworden.
Wie ist das bei 64-Bit?
BIOS ist ja trotzdem weiter in Modus 2.
Genau. Er startet im Real-Mode, aber an einer Adresse, die man im Real-Mode eigentlich gar nicht erreichen kann.
Also wenn ihr die Basis habt, ist gut, dann läuft damit der Basis. Wenn ihr allerdings da hinspringen wollt im Real-Mode, schafft er das nicht.
Weil da kann man bloß Adresse 19-4 dazu addieren, also da kommt der Maximal bis dahin.
Also einmal von da weggesprungen, nie wieder dahin. Jedenfalls nicht im Real-Mode.
Genau, das kommt gleich.
Ja, okay, also das ist so, wie der Zustand der CPU beim booten oder beim Anschalten des Rechners aussieht.
Wie kommen wir dann eine Etage weiter, also sprich in den Protected-Mode?
Protected-Mode heißt normaler, also das eigentliche Schalten ist trivial.
Einfach nur im Controlregister 0 ein Bit anknipsen und dann ist man im Protected-Mode.
Das ändert aber natürlich, hab' der letzte Woche gesehen, an dem Inhalt der Schattenregister von dem Segmentierungsteil gar nichts.
Da stehen nach wie vor die Werte drin, die man vorher reingeladen hat.
Und wenn das 16 Bit-Segmente waren, 64K-Segmente, dann stehen die halt da immer noch drin.
Dementsprechend erst einmal die Global Descriptor-Tabelle laden, also nicht die Tabelle als Ganzes, aber den Pointer auf die Tabelle laden.
Dann in den Protected-Mode schalten und dann alle Segmentregister initialisieren im Sinne von, ja, ich lad' da jetzt Werte rein, soll heißen, erholt sich aus der GDT dann Einträge und schreibt die in diese Schattenregister rein.
Und erst dann ist man eigentlich im wirklichen, zum Beispiel, 31 Bit-Modus. Vorher ist und bleibt man im 16 Bit-Modus.
Joa, vorher Interrupt aus, hinterher, wenn man's braucht, Interrupts wieder an. Warum nicht zwischenzeitlich Interrupts haben wollen?
Aber es ist halt irgendwie eine Form von unkonsistenten Speicher zwischen uns. Also die konsistente Speicher, die können wir halt erst wieder in dem Moment danach tun.
Ja, also ihr habt gesehen, in den Interrupt-Descriptor-Tabellen, da steht immer Code-Segment und Infraction-Pointer drin.
Also sprich, wenn ein Interrupt kommt, schaltet er auf ein anderes Code-Segment um und springt da irgendwo rein.
Ja, aber das sind natürlich die anderen Segmentregister noch nicht initialisiert gegebenenfalls.
Dann habt ihr so ein, ja, zwar ein Code-Segment im Protected-Mode, aber Daten, Stack und so ist alles noch im Real-Mode, 16 Bit-Mode.
Presenters
Zugänglich über
Offener Zugang
Dauer
01:35:54 Min
Aufnahmedatum
2016-01-20
Hochgeladen am
2019-05-07 23:09: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
-
entwickeln selbst CPU-Emulationen
-
entwickeln selbst Geräte-Emulationen
-
verteilen Implementierungsaufgaben in ihrer Gruppe