11 - Virtuelle Maschinen [ID:10960]
50 von 763 angezeigt

Jo, letzte Woche haben wir uns angeschaut, haben überlegt, wie muss eine echte Hardware

aussehen, dass man sich gut virtuell nahe machen kann.

Dann haben wir ja so gesagt, Interrupt soll man weglassen, Exception müssen wir irgendwie

auf ein Minimum beschränken. Das mit dem Flex, wie immer zu berechnen, ist doof. Dann haben

wir ja so alles Mögliche an Infos zusammengesammelt. Bis wir drauf gekommen sind, dann ist das

doch genau das, was Java macht. Das wollte ich euch heute nochmal genauer erzählen, wie

Java unter der Haube eigentlich aussieht. Also nicht Java-Programmiersprache, sondern

die Java Virtual Machine, was die unter der Haube macht.

Jo, wir haben uns das schon im Wesentlichen angeguckt. Wir brauchen einfache Instruktionen,

die man gut nachmachen kann. Wir brauchen, wenn es irgendwie geht, was, dass wir keine

Exceptions haben wollen. Gut, Divisionen durch Null, die werden wir nicht los. Bisher haben

wir immer gesagt, wenn irgendetwas Exceptions produzieren kann, dann lassen wir es weg.

Also beispielsweise Pointer-Rechnerei kann ja irgendwelche schlechten Speicherzellen

erwischen oder so. Dann haben wir das weggelassen. Aber Divisionen weggelassen, das ist jetzt

keine gute Idee. Also diese Exceptions, die kriegen wir noch. Und ihr wisst alle aus Java,

letztendlich Null Pointer muss es irgendwie geben können. Die müssen wir auch irgendwie

zulassen. Interrupts haben wir nicht, stattdessen Multiswetting, Condition Codes haben wir gesagt,

weglassen, MMU wollen wir nicht, keine Segmentierung, stattdessen sichere Pointer, nichts springen

wir berechnen, nichts selbst modifizierender Code. Genau das, was wir an letzter Woche

uns überlegt haben.

Jo, und wie schaut denn der Code aus? Es gibt beispielsweise, da kommen jetzt ein paar

Folien der Reihe nach, die Befehle, also die Assembler-Befehle sozusagen. Also jetzt nicht

I386, sondern Java Virtual Machine Code Befehle. Ja, und es gibt immer letztendlich hier für

Referenzen, die Dinge kennt ihr, Character, Double Load Long Int und so weiter, gibt es

die entsprechenden Befehle, also beispielsweise gibt es ein Befehl, um eine Integer-Konstante

auf den Stack zu holen. Es gibt das gleiche für Long, das gleiche für Fließkomma, das

gleiche für Double. Statt eine Konstante auf den Stack zu pushen, kann ich auch eine

lokale Variable mir holen von dem entsprechenden Typ. Ich kann eine, was auf dem Stack liegt,

mit einer Art Push, wieder herunterschreiben in eine lokale Variable und das ganze gibt

es auch noch, auch nochmal Load und Store, jetzt aber nicht lokale Variable, sondern

ARIE. Ich kann aus einem ARIE einen Doppelwert holen und auf den Stack legen oder umgekehrt

auf dem ARIE wieder abspeichern. Ja, und jetzt sieht man hier, da sind schon so einige Plätze

frei, es geht nicht alles mit allem. Zum Beispiel kann ich keine Short-Konstante pushen. In

sofern nicht so schlimm, ich pushe eine Integer-Konstante. Ich kann keine Short-Variable auf den Stack

legen. Gut, das ist dann stattdessen die hier oben, das sind nämlich die, die aus dem Short

erstmal einen Integer machen und den dann auf den Stack legen bzw. hier entsprechend.

Also im Prinzip gerecht oder auf den Stack pushen kann ich immer nur diese vier hier

bzw. Referenzen. Die anderen Typen, Character, Short, Wide, die muss ich immer erstmal in

ein Integer umwandeln. Ihr wisst sowieso, intern arbeitet Java sowieso mit dieser Hierarchie-Kette

sozusagen, Wide ist das kleinste, Short, Integer, Long. Und wie man hier sieht, Rechnen tut er

immer nur mit Intern-Schan. Man kann eventuell dann das, was auf dem Stack liegt, eine Integer-Zahl,

die kann ich als Short in ein ARIE speichern oder als Wide in ein ARIE. Aber ansonsten,

es gibt keine Short-Lokale-Variable. Gerechnet sieht man jetzt auch hier, wird mit Wide, Short,

Character, Referenz überhaupt nicht. Das sind jetzt nämlich die ganzen Rechenbefehle. Ganz

einfach, ich muss immer erst mein Wide in ein Integer umwandeln, dann kann ich damit

rechnen und dann kann ich ihn eventuell wieder zurückkonvertieren. Auch hier interessant sind

Referenzen und bleiben Referenzen, die werden nicht geändert. Sichere Point an. Das, was ich

mit einem New mir geholt habe, da kriege ich eine Zahl und die Zahl habe ich und bleibt dabei.

Klar, hier für die Fließkommas, da können wir rechnen mit Fließkommas, Shiften und XOR und

und und so. Das gibt es halt auch nicht, also ist hier alles frei. Das hier ist, denke ich,

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:37:02 Min

Aufnahmedatum

2012-11-29

Hochgeladen am

2019-05-05 20: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