22 - Virtuelle Maschinen [ID:10971]
50 von 781 angezeigt

Moin.

Jo, okay, dann machen wir mal weiter.

Wo waren wir gestern?

Gestern waren wir, du hattest gerade das Stichwort Liste, da waren wir noch nicht ganz fertig

mit. Ich hatte links so zwei Stichpunkte noch hingeschrieben. Das eine war die Geschichte mit

den Flex. Da hatte ich jetzt mit ein paar Leuten nach der Vorlesung noch so eine kleine Gesprächsrunde.

Irgendwie haben wir ja während der Vorlesung noch darüber geredet, wie ist denn das mit den

Flex. Wir haben gesagt, die Idee war bei OVP, es gibt für die Addition ein kleines Unterprogrammchen,

was einem einen Schnipsel generiert. Und diesem Unterprogramm, das diesen Schnipsel generiert,

kann man noch Parameter mitgeben. Das soll 16-bit sein, er soll das Carry-Flex im positiven Sinne

mitberechnen, er soll usw. Und jetzt war ja die Frage, jetzt kann man ja vielleicht noch

was wegoptimieren. Zum Beispiel, was weiß ich, man kann sich die nächste Instruktion angucken und

wenn die natürlich wieder in die Flex berechnet, dann vergisst das mit dem Flex. Während der Vorlesung

die Frage, vielleicht berechnet die nächste aber gar nicht die Flex. Und dann müsste man sich die

nächste und nächste und nächste und nächste und man weiß eigentlich gar nicht, wie weit man

vorausblicken soll. Da hatte ich dann noch einigen erzählt, wollte ich allen nochmal kurz erzählen.

Also wenn wir dann sagen wir mal, das Beispiel von gestern hatten, wir haben so eine Addition,

1 zu eax dazu addieren. Dann bauen wir das um in Schnipsel und ich nenne die Schnipsel jetzt mal,

gestern hatten wir vier solche Schnipsel und danach kommt dann vielleicht ein Compar,

irgendwas, dann haben wir Schnipsel e f oder vielleicht auch ein Beispiel,

was weiß ich, der Schnipsel a kommt nochmal vor a e f. So haben wir das dann weiter. Und das was

man jetzt macht bei Qemu und Co., also alle die diese Art von Just-At-Nime-Kompilierungreihe

machen, die schreiben sich wirklich gar nicht die einzelnen Schnipsel erst hin, sondern Schnipselnummern

oder Schnipsel-IDs oder irgend sowas. Und dann gehe ich von hinten her nach vorne und gucke,

was brauche ich denn eigentlich alles. Am Ende weiß ich, ich brauche alle Register, ich brauche

zum Beispiel auch den EIP und am Ende brauche ich die Flex. Weil was danach kommt, weiß ich nicht.

Ja, dann gehe ich jetzt rückwärts. Hier werden die Flex nicht berechnet, aber ich brauche die Flex.

Also zurückrechnen, da werden die Flex als letztes berechnet. Den Schnipsel brauche ich.

Ich muss den EIP am Ende berechnet haben, also gehe ich von hinten her und gucke, wer als letztes

sozusagen den Instruction-Point berechnet. Davor brauche ich ihn eigentlich nicht mehr.

Beside, was weiß ich, hier ich sehe, der berechnet die Flex, aber der braucht

zwischenzeitlich nochmal die Flex, also muss ich von da aus wieder suchen, wer vorher produziert

sie mir dann. Und dann kann ich mir merken, ja den Schnipsel brauche ich, den Schnipsel brauche ich,

den brauchen wir nicht, den brauchen wir, den brauchen wir nicht, den brauchen wir nicht,

den brauchen wir. Das mache ich im Prinzip in einer Art Array. In dem Array stehen erstmal die

ID's drin. Ja, man merkt dann, ja A brauche ich nicht, dann ersetze ich A sozusagen durch NOB.

Und dann fliegen so ein paar Dinge hier raus, da steht dann überall noch ein NOB drin. Dann kann

ich hierher gehen, ich gehe sozusagen von oben durch. Ich weiß, dieser Schnipsel braucht 5 Byte,

dieser Schnipsel braucht 10 Byte, dieser Schnipsel braucht 8 Byte, dieser Schnipsel braucht so viel.

Dann kann ich, wenn ich das Array von oben bis unten durch gehe, den Platzbedarf ermitteln,

könnte dann so eine Art Malloc aufrufen. Wir hatten uns verschiedene Strategien angeguckt,

wie man sich dann Speicher für diesen Cache holt. Ja, und kann dann passend zur ID A,

kann ich dann den Schnipsel kopieren. Passend zum NOB kann ich den Schnipsel kopieren. Okay,

der Schnipsel ist Null Byte, da kopiere ich nichts. Den kopiere ich hinten dran, den kopiere ich,

den kopiere ich und dann klebe ich mir im zweiten Schritt letztendlich im Cache meinen Code zusammen.

Also da brauche ich dann gar nicht immer vorausblicken, was kommt dann als nächstes,

als nächstes, als nächstes. Da weiß ich auch gar nicht, wie weit ich vorausblicken müsste.

Nee, ich mache es eher von hinten, dann am Ende weiß ich, was ich brauche. Und von da aus rückwärts

gehen, viel einfacher.

Ich kenne den Bereich, den ich wieder ankoppe, das ist wieder, wie ich auswähle,

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:36:55 Min

Aufnahmedatum

2013-01-25

Hochgeladen am

2019-05-06 17:39:04

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