13 - Virtuelle Maschinen [ID:10987]
50 von 565 angezeigt

Musik

Ja Moin Moin, wo ist der Rest? Steckt noch fest beim Essen oder wollte nicht in

das müssen wir daraus. Jo, mal neun, euch fünf, euch sechsen. Gibt's Fragen?

Dankeschön, einmal von mir an die Gruppe, die schon mal eine Abgabe gemacht hat.

Die Gruppe ist nicht da, glaube ich. Okay, Aufforderung an euch. Demnächst sollte,

ne, jeder erinnert euch, sollte da was passiert sein. Wie weit seid ihr denn?

Das kann man so und so sehen. Also das meiste geht schon so, Motor im, zerpücken und...

Okay, das war's schon gut. Also eigentlich Ende diesem Monat sollte das eigentlich fertig sein, damit dann...

Ah, so dringend wollte ich das nicht ausdrücken, aber genau. Wie gesagt, es ist keine tödliche Deadline,

die ihr nächste Woche nie verliefert, bin ich im Prinzip auch zufrieden, aber das geht ab von der Zeit, die ihr habt,

die nächsten Aufgaben zu implementieren und das wird nicht weniger, das ist das Problem.

Jo, okay, ja gut, dann sollen wir hier mal weitermachen. Ich füge mal so eine kleine Übungsstunde wieder ein.

Wir haben uns letzten Mittwoch angeguckt, Java wird schon im Messien.

Und hatten uns überlegt, wie jetzt, ja, was macht CDN, damit die Instruktionen einfach sind,

warum sie leicht zu immunieren sind, warum es keine Exceptions gibt, naja, mit kleinen Ausnahmen, das ganze Zeugs.

Jetzt haben wir ja gesehen, Java, naja, so ein Ausbund von Geschwindigkeit nicht unbedingt.

Ein paar Sachen habt ihr damals ja auch letzten Mittwoch schon erklärt, so von wegen,

man muss es erstmal kompilieren, das dauert natürlich ein bisschen,

dass man ständig für jeden Quatsch Objekte anlegen muss und wieder freigeben muss,

was zum Teil der Compiler wegoptimieren, der JIT wegoptimieren kann, aber auch nur zum Teil.

Also da habt ihr euch schon ein bisschen überlegt, wo jetzt die ganzen Probleme sind.

Jetzt würde ich mit euch gerne so eine Art kleines Brainstorming mal machen.

Welche dieser Probleme könnte man denn noch wegkriegen, wenn man Java oder wie auch immer das dann genannt wird,

ein bisschen umdesignt.

Also, eins, angedacht haben wir es am letzten Mittwoch schon,

wie können wir dieses ständige malloc und free auf dem Hieb, wie können wir denn das wegkriegen?

Nicht komplett, ich meine auch ein normales C-Programm braucht malloc und free, aber zumindest zum Teil wegkriegen.

Jetzt weiß ich, was du meinst.

Gut, wie nimmt man das so in der Wald- und Wiesenwelt, Programmiererwelt?

Also so eine Art, ich sag mal, wer das kennt, malloc A macht nichts anderes,

als auf dem Stack zu alluzieren statt auf dem Hieb. Und wie ist die Semantik?

Im Prinzip ist es erstmal ein malloc, aber...

Also ich muss jetzt kein free wieder hinschreiben, ne?

Genau. Okay, wann könnte man das nutzen?

Moin.

Woher weiß ich das?

Also das war das, was ich meine, denn da kann ein Compiler in vielen Fällen das wegoptimieren.

Wenn der Compiler nämlich sieht, das Objekt wird zwar angelegt in dem Unterprogramm,

das wird aber nicht an weitere Unterprogramme weitergegeben und auch nicht zurückgegeben,

dann kann der Compiler das auch selber auf dem Stack alluzieren.

Das ist ein moderner Konzept, an der Stelle wäre das eine Form von Smart Pointer.

Also wenn man die zu viel auf dem Hieb alluziert, dass man immer das Versprechen hat,

dass die alluzierten Daten in dem Moment aufgeräumt werden können,

wo diese einzelne Reparanzienkünftigkeit funktioniert.

Dann muss man auch gerade keine garbage collection machen, sondern kann halt ein klassisches Re-machen,

was im zweiten Fall dann auch schneller ist.

Wie funktioniert denn das?

Ich habe hier diese eine Referenz auf diesem Speicherbereich und das Versprechen ist,

ich brauche diesen Speicherbereich nur so lange, wie diese Referenz möglich wäre.

Das heißt, wenn ich dann an den Ende des Scopes komme, in dem diese Referenz angelegt wurde

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:31:27 Min

Aufnahmedatum

2015-11-27

Hochgeladen am

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen