19 - Virtuelle Maschinen [ID:10968]
50 von 680 angezeigt

Jo, womit soll es weitergehen? Also gestern haben wir geguckt. Das war die letzte Folie.

Hatten uns überlegt, wie schaut das mit den Segmenten aus. Wir haben gesagt, er holt die

Instruktion von der Adresse, die sich bildet, aus der Basisadresse vom Kurzsegment plus dem

Instruction Pointer. Dann hat er die Instruktion, ein paar Zugriffe. Dann muss er den Operanten

holen. Das soll heißen, er soll aufs Datensegment zugreifen, weil das ist BX und nicht BP.

Datensegment zugreifen heißt, Basisadresse vom Datensegment nehmen, EBX draufhalten,

aufwadieren und das als Adresse verwenden zum Laden. Dann die Addition durchführen

und dann das Speichern ins Datensegment. Also den ganzen Kram noch einmal. Habe ich gestern

gesagt, schon aus Performancegründen macht man es natürlich nicht jedes Mal, dass man

die Basisadresse vom Datensegment, vom Kurzsegment aus der Deskripto-Tabelle holt. Das wäre

halt in diesem Fall noch einmal drei Speicherzugriffe zusätzlich. Sondern die Dinger werden einmal

geladen in dem Moment, wo ich in mein Datensegment was reinschreibe. Also wenn wir haben, unsere

DIN, hier gibt es einen Eintrag mit der Adresse 8. Da steht drin, die haben wir gestern als

Beispiel, die 2000 als Basis und die 1000 als Limit. Und ich kopiere eine Move-Konstante

8 nach Datensegment, dann kopiert er einmal die 8 sozusagen nach DS und er kopiert die

2000 nach, ja, eben jemand hat gestern gefragt, wie heißen die Dinger denn jetzt eigentlich?

Die haben keinen Namen, die registren. Das ist jetzt irgendwie so DS-Basis und 1000 nach

DS-Limit. Und was passiert noch?

Nein, aber es wird in der Tabelle was markiert, nämlich es wird hier noch, also das sind ein,

zwei Werte. Ja, und es gibt noch hier, es wird noch eine 1 gesetzt für das Excessed

Bit. Also das Segment wurde auch wirklich gebraucht. Ihr kennt es wahrscheinlich vielleicht

schon aus den Page-Tabellen, da gibt es dann Excessed Bit und ein Dirty Bit, wenn man mal

die Page benutzt hat, kann das Betriebssystem dann nutzen, so für irgendwie Swapping, nach

dem Motto, die Page wurde nie gebraucht, also kann man sie mal rauslagern, so ähnlich hier,

wenn das Segment nie gebraucht wurde, dann kann man das Segment eventuell als Ganzes

mal rauskopieren auf Platte. Es stehen hier noch ein paar andere Werte und das sind die,

wie heißen denn eigentlich die Attribute, also die gehen sozusagen nach DS-Attributeil.

Da steht zum Beispiel drin, ob man lesen darf, ob man schreiben darf, ob man das Segment ausführen

darf. Jo, also, das schreibe ich hin, unter der Haube passiert hier viel mehr. Hatte damals

einfach den Vorteil, naja, das war jeder Programmierer schon gewohnt, dass es solche Segmente gibt

und wie man sie benutzt und naja, den Unterschied, jetzt, früher war halt die 8 sozusagen gleichzeitig

die Basisadresse, jetzt ist die 8 irgendwie nur noch so eine Nummer und die Basisadresse,

die ist jetzt vom Betriebssystem dann eben variabel einstellbar. Zum Beispiel kann man

dann eben so eine Art Swapping machen, also 80286 konnte man Segmente rausschmeißen

vom Betriebssystem und andere wieder nachladen, also so eine Art Overlay-Technik oder sowas

in der Art. Jo, wie macht man denn damit einen Kontextwechsel?

Na ja, wenn jetzt ein Prozess läuft und es kommt der nächste dran, der soll ja doch andere

Segmente kriegen. Okay, die ignoriere ich hier völlig, die brauchen wir nicht, die sind

einfach noch viel grausam. Das will ich euch mal nicht zumuten. Ja, mit dem, was wir bisher

missen. Also von der Idee her, nochmal genauer gleich darüber nachdenken, also von der Idee

her ist ein Switch irgendwie ein Push-DS, Push-ES und da hernach, dann ein Move, neue

GDT, Quatsch, nicht Move, sondern LGDT, neue GDT laden, ja so. Und dann kommt es wieder

umgekehrt ein Pop und irgendwann ein Ratan. Also so von der Idee her geht es. Gut, was

ist die Sicherheit dabei? Also hier schreibe ich, was weiß ich, die vorher geladene 8 einfach

auf den Stack. Steht halt eine 8 auf dem Stack, nur die 8, es steht nicht die 2000, nicht

die 1000, der ganze andere Kram, der steht nicht auf dem Stack, nur die 8 und dann halt

noch ein paar andere Zahlen gespeichert. Dann hole ich mir die neue GDT, dann habe ich eine

neue Tabelle für den neuen Prozess und wenn ich jetzt ein Pop, sag mal Pop 8 aufrufe,

dann schreibe ich die 8 wieder in ein Segmentregister und beim Pop holt er sich halt aus der Tabelle

wieder die ganzen Werte, die da drin stehen und schreibt die ganzen Schattentabellen.

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:26:17 Min

Aufnahmedatum

2013-01-11

Hochgeladen am

2019-05-06 12: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

  • untersuchen CPU-Emulationen

  • untersuchen Geräte-Emulationen

Einbetten
Wordpress FAU Plugin
iFrame
Teilen