Rückentag. Ich habe den Leuten, die gesagt haben, dass sie heute vielleicht nicht unbedingt
kommen wollen, versprochen, dass ich heute nichts mache, was man wissen muss, um den Rest zu
verstehen. Aber ich mache jetzt nichts unnötiges. Wir machen einfach heute mal ein paar Sachen,
die man ganz schön brauchen kann, wenn man eine gute virtuelle Maschine konstruieren will. Was,
glaube ich, aber auch ganz meckig zu wissen ist, wenn man andere Programme schreibt. Nämlich
erstes Thema Performance-Messung. Wir haben ja immer schon geguckt bei den virtuellen Maschinen,
wie könnte man es machen und gleich im zweiten Satz ist das auch schnell genug. Jetzt mit dem
ist das auch schnell genug, ist natürlich immer so eine Sache. Wie schnell ist es denn jetzt wirklich?
Jetzt die Frage an euch, was habt ihr an Ideen? Wie kann man dann Zeiten messen?
Ja, nicht ganz verkehrt. Ich wollte mit euch einfach heute ein paar Programme durchgehen,
beispielsweise mit Time einfach mal Zeit messen. Wir basteln uns ein kleines Programmchen.
Wir haben irgendeine Funktion test, die irgendwas tut und wir wollen mal gucken,
wie lange braucht die Funktion. Das wäre sozusagen das normale Programm. Jetzt die
Frage, wie messen wir das? Deine Variante war einfach Time. Also machen wir ein
int start int end start gleich int from time end gleich int from time print version
einverstanden
den können wir gleich mit ausprobieren
oder du meinst das ding kommt auch nichts anderes aus. Ja, das ist so das ganz übliche
Problem, was man so hat. Time zur Erklärung für die anderen, die es vielleicht noch nicht wissen.
Time liefert die Zeit in Sekunden seit dem ersten ersten 1970. Und da jetzt die Funktion,
die wir gerade aufgerufen haben, nicht eine Sekunde braucht, können wir da viel voneinander
abziehen. Aber 99,9999% der Fälle wird da einfach rauskommen. Also wir brauchen irgendwie
eine Zeitmessung mit höherer Auflösung. Dann ist es jetzt ein Struct timewall. Wie heißt
das da? Das ist dann ein get time of day. Da soll er mir start und end reinschreiben.
Und nun wer weiß, was in timewall drin steht. Genau. Da haben wir es. Die Time t, das sind
die Sekunden wieder seit dem ersten ersten 1970 und die Mikrosekunden also von 0 bis
9999999. Jetzt wird das hier ein bisschen mühsam mit dem Rechnen. Gibt es die? Ich weiß es
ehrlich gesagt gar nicht möglicherweise. Also möglicherweise gibt es die, aber ich kenne
sie nicht. Ich habe die gerade wieder vertauscht.
Und dann, die natürlichen Birsen von 2 Kredites atmen, das ist der wenigste Wert. Richtig attraktiv
Ist das jetzt richtig?
Ist das jetzt falsch?
Ist das jetzt fast richtig?
Schon mal besser als Null.
Null war definitiv falsch.
Null kann nicht sein als Zeit.
Er hat ja was gemacht in der Zwischenzeit.
Ist eins jetzt richtig?
Ja, ja.
Machen wir es da drin einfach mal ein bisschen länger.
Nicht auszuschließen, ja.
Da kommt immerhin eine Zwanzig raus.
19, 18, 19, 18, 19, 20.
Oberdaumen.
Ist das jetzt richtig?
Ist das jetzt falsch?
Warum schwankt es?
Das ist schon mal ein wichtiger Punkt, den wir eigentlich immer beachten müssen bei
der Zeitmessung.
Scheduler.
Presenters
Zugänglich über
Offener Zugang
Dauer
01:39:06 Min
Aufnahmedatum
2012-11-02
Hochgeladen am
2019-05-05 03:39:27
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