27 - Virtuelle Maschinen [ID:11001]
50 von 734 angezeigt

HALT 9

Moin moin allerseits.

Vorletzter Teil der ganzen Geschichte hier.

Parallel-Simulation.

Worum soll es gehen?

Na ja, die Idee. Ihr kennt das alle.

Ihr habt auf dem Tisch bei euch zu Hause hier in der Uni

normalerweise heutzutage irgendwie Multicore-CPUs.

Typischer Fall. Irgendwie so Zip-Pool sind glaube ich alles Quad-Core-Maschinen.

Sprich vier eigentliche CPUs.

Wenn ihr jetzt einen Simulator startet, dann benutzt ihr genau eine.

Typischer Fall. Wir hätten ganz viel zu rechnen.

Haben wir uns ja angeguckt. Eigentlich unsere CPU-Simulation,

aber auch die gesamte Rechnersimulation ist eigentlich immer zu langsam.

Und eigentlich hätte man noch ein Faktor 4, je nachdem, an Rechendeistung zur Verfügung.

Nur die Frage, wie geht das? Und wenn ja, wie geht das?

Da müssen wir uns heute noch ein paar Gedanken drum machen.

Generell sag ich mal, gibt es grob mal zwei Möglichkeiten.

Eine Variante wäre, wir haben vier Swats für unsere vier CPUs, für die echten.

Und die haben letztendlich einen Pool von Aufträgen.

Dann sagen wir mal beispielsweise unsere Step-Funktion von unseren CPUs,

von dem Hinterradcontroller, von der Grafikkarte, von was es alles gibt.

Und jede CPU nimmt sich dann immer einen einzigen Auftrag.

Ach, ich soll eine CPU-Step-Funktion aufrufen. Naja, simulieren wir mal fünf Instruktionen.

Nächsten Auftrag. Ach, der Pick muss einen Schritt machen.

Ich mach mal beim Pick sowieso einen Schritt.

Ach, Grafik muss auch gemalt werden. Ja, ich mach nebenläufig die Grafik.

Ja, dann haben wir alle mal durch.

Dann müssen sich alle nur einigen, wenn sie alle einmal durch sind,

dass danach dann normalerweise die Uhrzeit hochgeschaltet werden muss.

Ein Step ist fertig. Das ist ein Takt oder eine Nanosekunde, keine Ahnung.

Danach also die Uhrzeit hochdrehen und dann machen wir den ganzen Kram wieder.

An sich klingt das erstmal nach einem Plan.

Ein sehr langsam Plan, leider.

Das eine ist, ihr müsst natürlich immer mit den verschiedenen CPUs drängeln um die Aufträge.

Sprich, da muss man irgendwas locken.

Oder mein Chef wird sofort sagen, eh, also locken schon mal gar nicht.

Okay, das kann man auch aus einer scherketten Liste irgendwie mit Compare and Swap rausholen.

Ändert aber nichts dran, dass sich dann vier CPUs um mehr oder weniger eine und die gleichen Aufträge prügeln

und sich da koordinieren müssen. Das ist der eine Punkt.

Und der zweite Punkt ist, wenn die dann alle fertig sind, also der Pool letztendlich geleert wurde,

dann müssen sich alle darüber klar werden, dass alle gemeinsam jetzt fertig sind.

Das soll heißen, da müssen sie dann irgendwie hochzählen zum Beispiel, dass alle vier wieder da sind

und alle vier sich einig sind, ja es gibt nichts mehr zu tun und alle vier sich einig sind,

ja jetzt muss die Uhrzeit hochgedreht werden.

Ah, da müssen sich noch wieder darüber einigen, wer von uns Vieren zählt denn jetzt die Uhr hoch?

Nicht alle vier auf einmal, auch wieder nur einer.

Und wenn einer das getan hat, dann müssen sich alle wieder einigen,

die Uhr ist jetzt hochgedreht, jetzt können wir alle wieder anfangen zu arbeiten.

Ja, das ist das eigentliche Problem, man muss sich ständig einigen.

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:32:36 Min

Aufnahmedatum

2016-02-03

Hochgeladen am

2019-05-08 02:19: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

  • entwickeln selbst CPU-Emulationen

  • entwickeln selbst Geräte-Emulationen

  • verteilen Implementierungsaufgaben in ihrer Gruppe

Einbetten
Wordpress FAU Plugin
iFrame
Teilen