Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik

Virtuelle Maschinen (VM) - Vorlesung (WS 2018/19)

UnivIS-Informationen zur Vorlesung

Virtuelle Maschinen (VM)

Dozent/in
Dr.-Ing. Volkmar Sieh, Akad. ORat

Angaben
Vorlesung
2 SWS, ECTS-Studium, ECTS-Credits: 2,5, Sprache Deutsch
Zeit und Ort: Mo 12:15 - 13:45, 0.031-113 (außer Do 8.11.2018); Einzeltermin am 8.11.2018, Raum n.V.

Studienfächer / Studienrichtungen
WF IuK-BA ab 3 (ECTS-Credits: 2,5)
WPF CE-BA-TW ab 3 (ECTS-Credits: 2,5)
WPF INF-BA-V-RA ab 3 (ECTS-Credits: 2,5)
WPF INF-MA ab 1 (ECTS-Credits: 2,5)
WF IuK-MA ab 1 (ECTS-Credits: 2,5)

Inhalt der Vorlesung

Es gibt virtuelle Maschinen schon seit Jahrzehnten. Doch jetzt kommen sie mehr und mehr in Mode. Alles wird "virtuell".

Doch wer weiß, wie sie funktionieren? Wie schafft man es, auf einem Rechner einen anderen so schnell zu simulieren, dass man mit der virtuellen Maschine sinnvoll etwas arbeiten kann?

Die Vorlesung wird einen Einblick in die wichtigsten Virtualisierungstechniken geben. Am Beispiel vieler neuer Open-Source-Projekte werden die Techniken erläutert und in den Übungen ausprobiert.

bochs

Das Bochs-Projekt emuliert einen kompletten PC, auf dem sich heutige Standard-Betriebssysteme installieren lassen. Zwar ist die Emulation relativ langsam, läuft aber stabil und der virtuelle PC ist vom Verhalten her sehr ähnlich zu echter Hardware.

In der Vorlesung wird gezeigt, wie eine derartige Emulation durchgeführt werden kann.


qemu faumachine

Um die Emulation zu beschleunigen, kann man versuchen, häufig auszuführende Instruktion einmal zu dekodieren und sie zu compilieren. Beim Compilieren sind Optimierungen möglich. QEMU und FAUmachine (Projekt des Lehrstuhl 4) nutzen diese Just-In-Time-Compilierung und erziehlen damit eine gute Performance.

Welche Möglichkeiten derartige Just-In-Time-Compiler bieten, wie man sie im Bereich der virtuellen Maschinen einsetzt und wo die Probleme liegen, wird in der Vorlesung erklärt.


kvm

Moderne Prozessoren von Intel und AMD bieten die Möglichkeit, sich selbst "nachzumachen". Die Virtualisierungserweiterungen erlauben es, virtuelle Maschinen mit sehr hoher Performance zu entwickeln. Das Projekt KVM nutzt die Erweiterungen und bietet damit einen PC, mit dem man sehr gut z.B. Windows unter Linux laufen lassen kann.

Die Prozessor-Erweiterungen und die Möglichkeiten, die sich daraus für virtuelle Maschinen ergeben, werden in der Vorlesung vorgestellt.


Mit Java und der dazugehörigen Java-Virtual-Machine ist man einen anderen Weg gegangen. Hier wurde nicht versucht, eine bestehende Hardware-Architektur mit ihrer Instruktionssatzarchitektur nachzuahmen. Statt dessen wurde eine "Hardware" definiert, die sich besser emulieren lässt. Herausgekommen ist eine Instruktionssatzarchitektur, die sehr einfach aufgebaut ist, sich leicht Just-In-Time compilieren und sehr schnell ausführen lässt.

Die Vorlesung zeichnet die Überlegungen nach, die zur speziellen Java-Virtual-Machine-Instruktionssatzarchitektur geführt haben.


umlinux

Ein völlig anderer Ansatz zu einer virtuellen Maschine zu kommen wurde mit dem UMLinux-Projekt begangen. Statt auf einer nachgeahmten echten Hardware Linux laufen zulassen, hat man statt dessen Linux auf eine neue "Hardware" portiert. Als "Hardware" wurde wiederum Linux gewählt. Da hier die im Allgemeinen aufwändige Emulation fehlt, ist die Performance dieses Ansatzes sehr hoch.

Welche Möglichkeiten Linux bietet, Hardware nachzuahmen, wird in der Vorlesung erklärt. Dieses Wissen lässt sich auch in eigenen Projekten häufig gut einsetzen.


xen

Portiert man z.B. Linux nach dem UMLinux-Verfahren auf eine neue "Hardware", merkt man recht schnell, dass man vom genutzten Gastgeber-Betriebssystem nur sehr wenige System-Calls braucht. Auf der anderen Seite könnte man andere, spezialisierte System-Calls brauchen, um noch mehr Performance zu erreichen. Dieser Weg wurde von dem Xen-Projekt beschritten. Das Gastgeber-Betriebssystem wurde von überflüssigen System-Calls befreit und mit für Simulationszwecke sinnvollen System-Calls ergänzt.

In der Vorlesung werden die notwendigen System-Calls herausgearbeitet. Damit wird gleichzeitig klar, wie schnell eine Emulation nach der Xen-Methode in etwa sein wird, wo ihre Stärken und Schwächen liegen.


vserver

Schaut man sich die Rechner von Web-Hostern an, stellt man fest, dass die überwiegende Mehrzahl der zur Verfügung gestellten Rechner sehr ähnlich sind. Auf den meisten läuft ein Linux-Betriebssystem mit den entsprechenden Utilities sowie ein Apache-Webserver. Hat der Web-Hoster 1000 Kunden, so hat er auf seinen Servern 1000-mal die (fast) gleiche Installation. Das VServer-Projekt versucht, all dieses Server auf virtuelle Maschinen zu legen. Um unnötige Mehrfach-Kopien zu vermeiden, läuft auf allen virtuellen Maschinen der gleiche Linux-Kern, die gleichen Utilities und das gleiche Binary für den Webserver.

Dieses Verfahren hat große Vorteile aber auch gravierende Nachteile, die ein Web-Hoster und seine Kunden wissen sollten. Nach dem Besuch der Vorlesung sollten alle Studenten diese kennen.


wine

Eine der häufigsten Anwendungen für virtuelle Maschinen ist das Laufenlassen von Windows-Applikationen auf einem Linux-Rechner. Dazu ist es jedoch u.U. nicht notwendig eine komplette virtuelle Maschinen mit Windows-Betriebssystem aufzusetzen. Z.B. das Wine-Projekt bietet hier eine andere Lösung. Statt eines gesamten Rechners wird hier "nur" die Laufzeitumgebung einer Applikation nachgemacht.

Auch dieses Verfahren wird in der Vorlesung eingehend untersucht.


Folien zur Vorlesung

...werden nach und nach zur Verfügung gestellt...
  1. Einleitung
  2. Literatur
  3. Emulation
  4. Beispiel: VICE
  5. Komponenten/Busse
  6. Architekturen/Chips/Komponenten
  7. Beispiel: BOCHS
  8. Just-In-Time-Compiler (1)
  9. Speicherhierarchie
  10. Fehlerinjektion
  11. Beispiel: FAUmachine
  12. Just-In-Time-Compiler (2)
  13. Beispiel: Java Virtual Machine
  14. Beispiel: Low Level Virtual Machine
  15. Hardware-basierte Virtualisierung
  16. Beispiel: Qemu/KVM
  17. Para-Virtualisierung (1)
  18. Beispiel: User-Mode-Linux
  19. Para-Virtualisierung (2)
  20. Beispiel: Xen
  21. Betriebssystem-basierte Virtualisierung
  22. Beispiel: VServer
  23. Bibliotheks-basierte Virtualisierung
  24. Beispiel: Wine
  25. Zeit
  26. Profiling Virtueller Maschinen
  27. Parallele Emulation
  28. Weitere Beispiele