Paper送 auch neu collectorily- Sebastian B.
Mit initialen rienاضischen której
und begrüßen ein f 36
befreit sich immer mal offiziell
L LLC
maschinen
ambiguous in hat
brauchen Blöcke im Speicher, wo wir Platz haben, wo wir unsere ausgewählten Schnipsel
der Reihe nach hintereinander kleben können. Am Ende eine Rep dranbauen,
dass wir für so einen BASIC BLOC eine Sequenz von Instruktionen im Speicher
stehen haben. soy Oz problem war, wie viel Platz brauchen wir jetzt für diesen
Understand und
nur
viele Schnipselchen, Teilschnipseln rausschmeißen aus Optimierungsgründen, dann wird es ein
bisschen kürzer oder aus irgendwelchen Gründen lässt sich das schlecht optimieren, dann wird
es ein bisschen länger.
Weißen wir nicht so genau.
Nächstes Problem war, wir kriegen immer wieder neue Blöcke.
Das sieht natürlich, wenn wir einen Just-in-Time-Compiler haben für ein zum Beispiel Java-Programm,
sieht das Ganze anders aus.
Das Java-Programm wird einmal gestartet und wenn es gestartet ist, dann komponieren wir
es einmal und wenn wir es haben, dann haben wir es halt.
Da kommt in dem Sinne nichts mehr Neues hinzu bzw. einmal kommt es hinzu, bis alles da ist
und dann war es das.
Bei Java fliegt nie wieder was raus, standardmäßig, weil warum soll man ein Code invalidieren?
Der Code, den wir mal geschrieben haben, ist und bleibt richtig.
Bei einer normalen virtuellen Maschine im Sinne von PC oder so, sieht das Ganze anders aus.
Da fliegt ständig Code wieder raus.
Ihr zippt in eurer Shell ein Kommando ein, dann wird das Kommando ausgeführt, sprich
es muss mal komponiert werden, d.h. es kommen Blöcke neu dazu.
Dann terminiert euer Programm, was ihr gerade gestartet habt.
Man muss nicht, aber man kann die alten Blöcke dann natürlich wieder weghauen.
Wenn der Code cache voll ist, dann muss man mal entrimpeln, mindestens dann muss altes
Zeug wieder rausfliegen.
Ihr könnt euch vorstellen, wir haben gesagt, jeden Block immer schnell kompilieren heißt,
man muss natürlich auch schnell Platz zum kompilieren haben und umgekehrt natürlich
auch schnell wieder Platz freigeben können, das muss sofort passieren, nicht erst eine
halbe Stunde drüber nachdenken, wo jetzt ein bisschen Platz ist.
Da gibt es jetzt mal eine Handvoll verschiedener Varianten, wie man das tun könnte.
Einfachste Variante, ich sage, ich habe ganz genau einen großen Puffer, einen riesengroßen
Puffer und den fülle ich einfach von oben nach unten, von vorn nach hinten, wie auch
man man da sieht.
Immer wenn ich ein neues Stückchen komponiere, schreibe ich es dahinter, komponiere ich noch
etwas, schreibe ich es dahinter, komponiere ich etwas, schreibe ich dahinter.
Wenn ich etwas freigebe, das funktioniert nicht so wirklich, weil in der Mitte etwas
rausschneiden, in dem Sinne kann ich nicht.
Beziehungsweise wenn ich dann jetzt wieder versuche etwas rauszuschneiden, dann habe
ich wieder eine komplizierte Pufferverwaltung, die erst mal suchen muss, wo dann ein freier
Block ist.
Das will ich ja gerade vermeiden.
Presenters
Zugänglich über
Offener Zugang
Dauer
01:32:16 Min
Aufnahmedatum
2015-11-13
Hochgeladen am
2019-05-06 21:19: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
-
entwickeln selbst CPU-Emulationen
-
entwickeln selbst Geräte-Emulationen
-
verteilen Implementierungsaufgaben in ihrer Gruppe