1.4 Was ist eine virtuelle Maschine? 

Auszug Wikipedia:
Eine virtuelle Maschine ist allgemein ein Modell eines Prozessors und der zugehörenden Systemarchitektur, dessen Rechenweise unabhängig von der technischen Ausführung beschrieben wird (Hardware). Verwendet wird der Begriff synonym für das Computerprogramm, das eine virtuelle Maschine auf einem vorhandenen Prozessor emuliert, das heißt, sie ist ein Hardware-Emulator. Besonders gebräuchlich ist der Begriff virtuelle Maschine für die Emulationssoftware von VM-Modellen (VM-System), die sich besonders leicht auf andere reale CPUs übertragen lassen. Es gab immer wieder Versuche, solche besonders portablen VMs auch in Hardware auszuführen, diese Produkte konnten sich jedoch nicht am Markt durchsetzen.
Diese Trennung der Rechnerarchitektur von Hardware CPUs und Software VMs fußt auf verschiedenen vorteilhaften Ansätzen. Die große Mehrzahl realer CPUs verwalten mehrere Operanden in einer beschränkten Zahl direkt adressierbarer Register (Registermaschinen), die große Mehrzahl der VM-Systeme verwalten ihre Operanden in einem verschiebbaren unbeschränkten Stapel (Stapelmaschinen). Virtuelle Maschinen spielen heute eine bedeutende Rolle, da Microsoft mit seiner .NET-Architektur dem Beispiel von Sun mit der Java-Virtuellen-Maschine (Java VM) folgt.
Die heutigen VM-Systeme besitzen eine große Zahl von Vorläufern, bei denen nutzerorientierte Darstellungen eines Programms (Programmiersprachen) nicht direkt in die maschinenorientierte Darstellung der CPU übersetzt wurde (Maschinencode), sondern in einen einfach strukturierten Zwischencode. Die Speicherung des Zwischencodes kann sehr verschieden ausfallen, am bekanntesten sind Bytecode-Systeme und deren Verwandte. Der bekannteste Vorläufer ist der p-Code vieler Pascal-Systeme.
Neben der reinen Beschreibung des Rechenwerkes der VM sind für anwendbare VM-Systeme die Festlegung der Ausführungsumgebung wichtig. Während bei der JavaVM hier keine sprachliche Unterscheidung getroffen wird, benennt man sie bei .NET getrennt – der Zwischencode ist die CIL (Common Intermediate Language), die Ausführungsumgebung ist die CLR (Common Language Runtime), und weitere Bibliotheken werden als Framework zusammengefasst.
Die CLR von .NET ist dabei der JavaVM so ähnlich, dass kompilierte Java Programme darin ausgeführt werden könnten, sofern die verwendeten Bibliotheken zur Verfügung stehen. Eben die praktische Verfügbarkeit der Bibliotheken beschränkt jedoch die direkte Ausführung, so dass bisher .NET'VM-Systeme und JavaVM-Systeme getrennt auftreten. Und obwohl beide VM-Systeme auf Portabilität hin designt wurden, sind wegen der faktischen Verfügbarkeit der Bibliotheken bei Java die aktuelle Versionen nur für Windows und Unix verfügbar sowie bei .NET auf die Windows-Plattformen beschränkt.
Vorteile einer virtuellen Maschine:
- Plattformunabhängigkeit: Programme für eine virtuelle Maschine laufen auf allen realen Maschinen, für die eine virtuelle Maschine implementiert ist. Sie kann dadurch Architekturtransparenz schaffen.
- Dynamische Optimierung ist möglich.
Nachteile einer virtuellen Maschine:
- Programme auf einer virtuellen Maschine sind langsamer als Programme, die speziell für die Zielumgebung übersetzt wurden, da sich immer ein Mehraufwand durch Interpretation oder dynamische Übersetzung zur Laufzeit (JIT-Compiler) ergibt.
Dieser Nachteil wird durch geeignete Optimierungen (zum Beispiel dynamische Optimierung) verringert.
Neben den Stapelmaschinen der JVM/CLR gibt es auch registerbasierte virtuelle Maschinen, etwa MMIX oder die Parrot-Implementierung von Perl6. Eine verbreitetes, aber unbekannt gebliebenes VM-System ist OpenFirmware, auf der Basis einer Forth-Stapelmaschine mit festgelegten F-Codes und Laufzeitumgebung für den speziellen Einsatz zur BIOS-Programmierung.
Dieser Auszug aus der Wikipedia-Datenbank beschreibt zwar eher die virtuelle Maschine in Programmierumgebungen, der Bezug auf eine komplette Virtualisierung der Hardware wird aber deutlich.
Die Virtualisierungssoftware erstellt eine Art Hülse um die virtuelle Umgebung, in der die virtuellen Maschinen existieren. Letztere sind komplett von der physikalischen Hardware abgeschottet. Alle Prozesse und Programme innerhalb der virtuellen Maschine bemerken keinen Unterschied zwischen der virtuellen Umgebung und der physikalischen.
Die Ansteuerung der Hardware, die Zuweisung der Ressourcen und die Rechteverwaltung regelt die Virtualisierungssoftware. Für die virtuelle Maschine besteht keine Möglichkeit, aus dieser virtuellen Umgebung auszubrechen – und genau diese Trennung ist notwendig, um sichere und effiziente Umgebungen aufzubauen.
Dadurch dass einer virtuellen Maschine die immer gleiche Hardware vorgegaukelt wird, können sehr stabile Serversysteme aufgebaut werden. Mit Hilfe virtueller Maschinen ist es sogar möglich, Systemen, die aufgrund fehlerhafter Treiber instabil sind, wieder zu einer hohen Stabilität zu verhelfen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.