18 - Virtuelle Maschinen [ID:10992]
50 von 624 angezeigt

LinkedIn elsewhere

Im Namen der petite HerrЛ smokes

Neuguern

Pods

Leit totalement

Jugoghn

Jo.

Kleines Nebenkapitel.

Wer kennt den 6510 Prozessor? Ja.

Einer oder andere kennt ihn.

Aus der Reihe der Commodore Rechner vor, oder was war das, 1985, so um den Dreh.

Der Hauptprozessor, der damals so gebaut worden ist, millionenfach im Commodore 64 verbaut.

Hier seht ihr die Liste der Befehle, bzw. die Hälfte der Befehle, also zweite Hälfte da.

Was man sieht, 16 mal 8 verschiedene Befehle und erst mal 2 16 mal 16 256 Befehle.

Also sprich 8 Bit, ein Befehl und fertig.

Ihr würdet euch freuen, wenn so ein X86 auch einmal genau einbeibt, dann könnte man das schön dekodieren.

Jetzt wollte ich mit euch mal angucken, ob man das vielleicht nicht noch schöner dekodieren kann.

Also ihr habt mir ja alle eure virtuellen Maschinen geschickt.

Mehr oder weniger komplizierte Dekodierung.

Zugegebenermaßen bei X86 ist die auch nicht einfach.

Ja, gut, sie war früher mal einfacher. Inzwischen durch die vielen Erweiterungen ist das immer mehr verwurstet geworden.

Gucken wir uns mal einen Prozessor an, der mehr oder weniger so from scratch neu designt worden ist.

Und dementsprechend damals zumindest noch einigermaßen sauber war.

Jo, wie würdet ihr das dekodieren? Hat jemand Vorschläge?

Also ich kletter jetzt ab und zu mal hinten zurück, dass ihr euch die mal so grob angucken könnt.

Sie passen leider nicht auf eine Folie, sonst wäre es zu klein geworden.

Okay, die, die ihr euch wegdenken könnt, sind die, die als Jam bezeichnet sind.

Ja, die stehen in der Liste, die wir hier haben.

Die, die als Jam bezeichnet sind, die, ja, die stehen in der Liste nur als...

Und heutzutage wird man eher embedded sagen, aber in dem Sinne waren sie nicht embedded.

Sie haben nämlich alle irgendwas getan.

Und wir werden vielleicht auch gleich rauskriegen oder ahnen, was sie vielleicht kriegen könnten.

Also in der Hand, das ist bei den Gizeprocessor tatsächlich auch nicht so.

Aber gut, bei der, bei 16x16 BDM würde ich jetzt sagen, könnte man im Grunde genommen das am Kertel aufziehen.

Ja, so, also wirklich viele sind es ja nicht.

Gut, ist jetzt eine Jumptable besser oder ist jetzt ein Switchcase besser?

Ich verstehe nicht, das bleibt dir bei uns, wenn du das von keiner anderen schreibst.

Wenn ihr euch das überlegt, ein Switchcase ist im Prinzip eine Tabelle, wo er dann zu welchem Label springt, bei welchem Argument von der Jumptable.

Wenn ihr guter habt, dann eine Liste von 256 Einträgen mit Unterprogramm aufrufen.

Wenn der Compiler schlauer ist, macht er inlining, dann macht er auch nichts anderes als einen Sprung dahin.

Jo, okay, das habt ihr, glaube ich, auch, da habe ich da ein bisschen überwähnt, jetzt glaube ich nicht.

Also ich glaube im Wesentlichen habt ihr alle irgendwie entweder Jumptable oder so ein Switchcase auch für x86 gebastelt.

Manchmal natürlich erstmal Switchcase und in dem einen Case dann vielleicht nochmal ein Switch, weil wenn das erste ein 0f ist, dann bis der dann kommt das nächste byte, also muss da noch ein Switchkommen oder so.

Ja, okay, wenn ihr euch die Codierung jetzt nochmal genauer anguckt, dann werdet ihr sehen, zum Beispiel hier gibt es dann OR, A, also was heißt das?

Ja, verOder den Akku mit dem, was dahinter kommt, Ent, verUnde den Akku mit dem, was dahinter kommt, Exklusiv oder Adir mit Carry.

Jo, wenn ihr euch die Reihe so anguckt und die Reihe so anguckt, kommt einem irgendwie bekannt vor.

Ja, und wenn ihr die zweite Hälfte der Tabelle anguckt, dann seht ihr hier, die Tabelleinträge, die Tabelleneinträge, das heißt die kommen, also jeder kommt genau viermal vor.

So, wenn ihr das nochmal anguckt, dann seht ihr hier so einen ASL Rollnob und so weiter. ASL Rollnob, nicht ganz gleich, aber ähnlich.

Und man zurückblättert. Auch hier sieht man dann wieder noch ein A, also Arithmetic Shift Left, Rotate Left, Logical Shift Right, Rotate Right.

Ja, hier stehen es alles, also auch da, die kommen im Prinzip viermal vor, also die sind ja alles undefiniert markiert, könnte man ja, also wenn nichts definiert ist im Handbuch, könnte ich an der Stelle ja auch ein Arithmetic Shift irgendwas machen.

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:29:49 Min

Aufnahmedatum

2015-12-16

Hochgeladen am

2019-05-07 08:49: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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen