25 - Virtuelle Maschinen [ID:10974]
50 von 950 angezeigt

Die Technik läuft. Dann begrüße ich die drei wackeren Helden hier. Ich weiß ja nicht ob der Rest noch kommt.

Was machen wir heute noch? Zwei Sachen habe ich heute noch mit euch vor. Beides kann man machen, muss man nicht machen.

Es gibt noch ein paar Ideen, ein paar wissenswerte Details zu den virtuellen Maschinen.

Das erste KVM. Das Tool habe ich euch schon gezeigt. Ich habe euch schon erklärt was VTX letztendlich macht.

In so einem virtuellen Prozessormodus schalten und mit diesen Exit Events kann man dann darauf reagieren, wenn spezielle Instruktionen ausgeführt werden.

Das Problem ist, eine virtuelle Maschine auf der einen Seite ist normalerweise was im Userland. Das will ich nicht im Kernel programmieren.

Auf der anderen Seite ist VTX eine CPU Erweiterung, die man nur im Kernel programmieren kann.

Wenn ihr einen VmEnter oder VmXon im Userland aufruft, dann BOOM Endstation. Macht er nicht.

Wie bekommt man das unter einen Hut? Da nehme ich das sogenannte KVM Modul.

Das ganze Konzept ist 2007 aufgetaucht. Entwickler von Qamret haben zu den Körner Entwicklern einen Patch geschickt.

Hier gibt es ein KVM Modul. Macht doch mal. Die waren alle ganz überrascht. Was das dann? Kennen wir nicht?

Das ist eigentlich ganz praktisch.

Wir haben das dann auch in den Kernel reingepackt.

Auf der anderen Seite brauchen wir für den User Modus, für die ganzen Nicht-CPU-Angelegenheiten,

da ist noch Graphik, Platte, tausend Sachen, die man neben der CPU auch noch simulieren muss.

Da haben die Qamret Leute einfach QEMO hergenommen.

Heutzutage sehr populär bei den Distributoren.

Inzwischen würde ich auch sagen, nicht nur bei den Distributoren, sondern auch bei den Studenten.

Wenn ich von euch gehört habe, was ihr nutzt, dann war KVM immer weiter oben auf der Liste.

Was es zurzeit gibt, ist Support für X86. Das ist wahrscheinlich auch das, was ihr benutzt.

Es ist in Bearbeitung, mein letzter Stand war, man hat damit angefangen.

Ich weiß nicht, ob es inzwischen das eine oder andere sogar schon funktioniert.

Also im Prinzip geht das natürlich auch für andere Prozessoren.

Ich habe es euch erklärt für X86, diese VTX Erweiterung.

Es gibt andere Prozessoren, PowerPC oder so, die haben VTX und Co. nicht nötig.

Da hat man gleich dran gedacht, dass man das auch nicht macht.

Das soll heißen, man kann dieses KVM Modul eigentlich für PowerPC oder Etanium schreiben.

Dann ist es halt kein X86, den ich nachmache, sondern dann ein PowerPC auf PowerPC.

Aber das ist natürlich auch ganz neckisch, wenn ich dann einen Macintosh-Rechner mit PowerPC habe

und ich habe ein KVM Modul namens PowerPC, dann kann ich auf meinen Macintosh-Rechner einen Macintosh-Rechner nachmachen.

So wie man eben auf dem PC vielleicht einen PC nachmachen kann.

Das Kernel-Modul ist jetzt aufgeteilt auf mehrere verschiedene Sachen.

Einmal ein architekturunabhängiger Teil, wofür ist der gut?

Letztendlich ist es ein Kernel-Modul.

Module werden generell immer über Open, Close, Read, Write und gegebenenfalls IOControl angesprochen.

In diesem Falle macht Read und Write nicht wirklich Sinn.

Ein Open und Close macht für Dateien eigentlich auch so und direkt nicht Sinn.

Aber das ist die einzige Methode, unter allen Unix-Varianten an Geräte dranzukommen.

Gerät im Sinne von irgendwas Objekt.

Da muss man natürlich jetzt diese Schnittstelle bedienen, man muss einen Open-System-Call bereitstellen,

einen Close-System-Call bereitstellen, einen IOControl-System-Call bereitstellen.

Das Zeug ist jetzt in dieser Kommunikationsschicht drin.

Dann gibt es entsprechende IOControl-Aufrufe, um jetzt eine neue virtuelle CPU zu kreieren,

um sie wieder totzumachen, um sie zu konfigurieren usw.

Das muss natürlich jetzt passieren, je nachdem ob man jetzt einen x86 oder einen PowerPC oder was weiß ich was hat.

Also gibt es für die einzelnen Architektur entsprechend spezifische Teile.

Hier ist aufgeschrieben nur der x86, weil das der einzige der fertig ist.

Der wiederum muss jetzt nochmal unser Teil sein, einmal natürlich, weil VTX, SVM, AMD bzw. Intel

das natürlich wieder nicht gleich gemacht haben.

Dieses schubst jetzt mal die CPU an, lasse mal machen ein paar Schritte.

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

01:43:09 Min

Aufnahmedatum

2013-02-08

Hochgeladen am

2019-05-06 17:59: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

  • untersuchen CPU-Emulationen

  • untersuchen Geräte-Emulationen

Einbetten
Wordpress FAU Plugin
iFrame
Teilen