Virtuelle Maschine -Virtual machine

In der Datenverarbeitung ist eine virtuelle Maschine ( VM ) die Virtualisierung / Emulation eines Computersystems . Virtuelle Maschinen basieren auf Computerarchitekturen und bieten die Funktionalität eines physischen Computers. Ihre Implementierungen können spezialisierte Hardware, Software oder eine Kombination davon beinhalten. Virtuelle Maschinen unterscheiden sich und sind nach ihrer Funktion organisiert, wie hier gezeigt:

Einige Emulatoren für virtuelle Maschinen, wie z. B. QEMU und Emulatoren für Videospielkonsolen , sind so konzipiert, dass sie auch verschiedene Systemarchitekturen emulieren (oder "virtuell imitieren") und so die Ausführung von Softwareanwendungen und Betriebssystemen ermöglichen, die für eine andere CPU oder Architektur geschrieben wurden. Die Virtualisierung auf Betriebssystemebene ermöglicht es, die Ressourcen eines Computers über den Kernel zu partitionieren . Die Begriffe sind nicht allgemein austauschbar.

Definitionen

Virtuelle Systemmaschinen

Eine „virtuelle Maschine“ wurde ursprünglich von Popek und Goldberg als „ein effizientes, isoliertes Duplikat einer realen Computermaschine“ definiert. Die derzeitige Verwendung umfasst virtuelle Maschinen, die keine direkte Entsprechung zu realer Hardware haben. Die physische, „echte“ Hardware, auf der die VM läuft, wird im Allgemeinen als „Host“ bezeichnet, und die auf dieser Maschine emulierte virtuelle Maschine wird im Allgemeinen als „Gast“ bezeichnet. Ein Host kann mehrere Gäste emulieren, von denen jeder unterschiedliche Betriebssysteme und Hardwareplattformen emulieren kann.

Der Wunsch, mehrere Betriebssysteme auszuführen, war das ursprüngliche Motiv für virtuelle Maschinen, um eine zeitliche Aufteilung zwischen mehreren Single-Tasking-Betriebssystemen zu ermöglichen. In gewisser Hinsicht kann eine virtuelle Systemmaschine als Verallgemeinerung des Konzepts des virtuellen Speichers betrachtet werden , das ihr historisch vorausging. CP/CMS von IBM , die ersten Systeme, die eine vollständige Virtualisierung ermöglichten , implementierten Timesharing , indem sie jedem Benutzer ein Einzelbenutzer-Betriebssystem, das Conversational Monitor System (CMS), zur Verfügung stellten. Im Gegensatz zum virtuellen Speicher berechtigt eine virtuelle Systemmaschine den Benutzer, privilegierte Anweisungen in seinen Code zu schreiben. Dieser Ansatz hatte bestimmte Vorteile, wie z. B. das Hinzufügen von Ein-/Ausgabegeräten, die das Standardsystem nicht zulässt.

Da die Technologie den virtuellen Speicher zum Zwecke der Virtualisierung weiterentwickelt, können neue Systeme der Speicherüberbelegung angewendet werden, um die gemeinsame Speichernutzung zwischen mehreren virtuellen Maschinen auf einem Computerbetriebssystem zu verwalten. Es kann möglich sein, Speicherseiten mit identischem Inhalt von mehreren virtuellen Maschinen gemeinsam zu nutzen, die auf derselben physischen Maschine ausgeführt werden, was dazu führen kann, dass sie durch eine als Kernel-Same-Page-Merging (KSM) bezeichnete Technik derselben physischen Seite zugeordnet werden. Dies ist besonders nützlich für schreibgeschützte Seiten, z. B. solche, die Codesegmente enthalten, was bei mehreren virtuellen Maschinen der Fall ist, auf denen dieselbe oder ähnliche Software, Softwarebibliotheken, Webserver, Middleware-Komponenten usw. ausgeführt werden. Die Gastbetriebssysteme werden nicht benötigt mit der Host-Hardware kompatibel zu sein, wodurch es möglich wird, verschiedene Betriebssysteme auf demselben Computer auszuführen (z. B. Windows , Linux oder frühere Versionen eines Betriebssystems), um zukünftige Software zu unterstützen.

Die Verwendung virtueller Maschinen zur Unterstützung separater Gastbetriebssysteme ist bei eingebetteten Systemen weit verbreitet . Eine typische Verwendung wäre, ein Echtzeitbetriebssystem gleichzeitig mit einem bevorzugten komplexen Betriebssystem wie Linux oder Windows auszuführen . Eine andere Verwendung wäre für neuartige und nicht erprobte Software, die sich noch in der Entwicklungsphase befindet, also in einer Sandbox läuft . Virtuelle Maschinen haben weitere Vorteile für die Betriebssystementwicklung und können einen verbesserten Debugging-Zugriff und schnellere Neustarts beinhalten.

Mehrere VMs, auf denen ihr eigenes Gastbetriebssystem ausgeführt wird, werden häufig für die Serverkonsolidierung eingesetzt.

Virtuelle Maschinen verarbeiten

Eine Prozess-VM, manchmal auch als virtuelle Anwendungsmaschine oder Managed Runtime Environment (MRE) bezeichnet, wird als normale Anwendung in einem Host-Betriebssystem ausgeführt und unterstützt einen einzelnen Prozess. Es wird erstellt, wenn dieser Prozess gestartet wird, und zerstört, wenn er beendet wird. Sein Zweck besteht darin, eine plattformunabhängige Programmierumgebung bereitzustellen , die Details der zugrunde liegenden Hardware oder des Betriebssystems abstrahiert und es einem Programm ermöglicht, auf jeder Plattform auf die gleiche Weise ausgeführt zu werden.

Eine Prozess-VM bietet eine High-Level-Abstraktion – die einer High-Level-Programmiersprache (im Vergleich zur Low-Level-ISA-Abstraktion der System-VM). Prozess-VMs werden mit einem Interpreter implementiert ; Eine mit kompilierten Programmiersprachen vergleichbare Leistung kann durch die Verwendung von Just-in-Time-Kompilierung erreicht werden .

Diese Art von VM ist mit der Java-Programmiersprache populär geworden , die unter Verwendung der Java Virtual Machine implementiert wird . Weitere Beispiele sind die virtuelle Parrot-Maschine und das .NET Framework , das auf einer VM namens Common Language Runtime läuft . Sie alle können als Abstraktionsschicht für jede Computersprache dienen.

Ein Sonderfall von Prozess-VMs sind Systeme, die über die Kommunikationsmechanismen eines (potenziell heterogenen) Rechnerclusters abstrahieren . Eine solche VM besteht nicht aus einem einzelnen Prozess, sondern einem Prozess pro physischer Maschine im Cluster. Sie wurden entwickelt, um die Aufgabe des Programmierens gleichzeitiger Anwendungen zu erleichtern, indem sie es dem Programmierer ermöglichen, sich auf Algorithmen statt auf die von der Verbindung und dem Betriebssystem bereitgestellten Kommunikationsmechanismen zu konzentrieren. Sie verbergen nicht die Tatsache, dass eine Kommunikation stattfindet, und versuchen daher nicht, den Cluster als eine einzelne Maschine darzustellen.

Im Gegensatz zu anderen Prozess-VMs bieten diese Systeme keine spezifische Programmiersprache, sondern sind in eine vorhandene Sprache eingebettet; typischerweise bietet ein solches System Bindungen für mehrere Sprachen (z. B. C und Fortran ). Beispiele sind Parallel Virtual Machine (PVM) und Message Passing Interface (MPI). Sie sind keine streng virtuellen Maschinen, da die darauf laufenden Anwendungen weiterhin Zugriff auf alle Betriebssystemdienste haben und daher nicht auf das Systemmodell beschränkt sind.

Geschichte

Sowohl virtuelle Systemmaschinen als auch virtuelle Prozessmaschinen stammen aus den 1960er Jahren und sind weiterhin Bereiche aktiver Entwicklung.

Virtuelle Systemmaschinen sind aus dem Time-Sharing hervorgegangen , wie es insbesondere im kompatiblen Time-Sharing-System (CTSS) implementiert ist. Time-Sharing ermöglichte es mehreren Benutzern, einen Computer gleichzeitig zu verwenden : Jedes Programm schien vollen Zugriff auf die Maschine zu haben, aber zu diesem Zeitpunkt wurde nur ein Programm ausgeführt, wobei das System in Zeitscheiben zwischen den Programmen wechselte und den Zustand jedes Mal speicherte und wiederherstellte. Dies entwickelte sich zu virtuellen Maschinen, insbesondere über die Forschungssysteme von IBM: der M44/44X , der eine teilweise Virtualisierung verwendete , und der CP-40 und SIMMON , die eine vollständige Virtualisierung verwendeten und frühe Beispiele für Hypervisoren waren . Die erste allgemein verfügbare Architektur für virtuelle Maschinen war das CP-67 /CMS (siehe Geschichte von CP/CMS für Details). Ein wichtiger Unterschied bestand zwischen der Verwendung mehrerer virtueller Maschinen auf einem Hostsystem für Time-Sharing wie bei M44/44X und CP-40 und der Verwendung einer virtuellen Maschine auf einem Hostsystem für das Prototyping wie bei SIMMON. Emulatoren mit Hardware-Emulation früherer Systeme aus Kompatibilitätsgründen gehen auf das IBM System/360 im Jahr 1963 zurück, während die Software-Emulation (damals "Simulation" genannt) älter war.

Virtuelle Prozessmaschinen entstanden ursprünglich als abstrakte Plattformen für eine Zwischensprache, die von einem Compiler als Zwischendarstellung eines Programms verwendet wurde ; frühe Beispiele stammen aus der Zeit um 1966. Ein Beispiel von Anfang 1966 war die O-Code-Maschine , eine virtuelle Maschine, die O-Code (Objektcode) ausführt, der vom Front-End des BCPL- Compilers ausgegeben wird. Durch diese Abstraktion konnte der Compiler einfach auf eine neue Architektur portiert werden, indem ein neues Back-End implementiert wurde, das den vorhandenen O-Code nahm und ihn in Maschinencode für die zugrunde liegende physische Maschine kompilierte. Die Euler- Sprache verwendete ein ähnliches Design mit der Zwischensprache namens P (portabel). Dies wurde um 1970 von Pascal populär gemacht , insbesondere im Pascal-P- System (1973) und im Pascal-S- Compiler (1975), in dem es als p-Code und die resultierende Maschine als p-Code-Maschine bezeichnet wurde . Dies war einflussreich, und virtuelle Maschinen in diesem Sinne wurden oft allgemein als P-Code-Maschinen bezeichnet. Der Pascal-P-Code war nicht nur eine Zwischensprache, sondern wurde auch direkt von einem Interpreter ausgeführt, der die virtuelle Maschine implementierte, insbesondere in UCSD Pascal (1978). Dies beeinflusste spätere Interpreter, insbesondere die Java Virtual Machine (JVM). Ein weiteres frühes Beispiel war SNOBOL4 (1967), das in der SNOBOL Implementation Language (SIL) geschrieben wurde, einer Assemblersprache für eine virtuelle Maschine, die dann auf physische Maschinen ausgerichtet war, indem sie über einen Makroassembler in ihren nativen Assembler transpiliert wurde . Makros sind jedoch seitdem in Ungnade gefallen, sodass dieser Ansatz weniger einflussreich war. Virtuelle Prozessmaschinen waren ein beliebter Ansatz zur Implementierung früher Mikrocomputersoftware, einschließlich Tiny BASIC und Adventure-Spielen, von einmaligen Implementierungen wie Pyramid 2000 bis hin zu einer Allzweck-Engine wie der Z-Maschine von Infocom , die laut Graham Nelson „möglicherweise“ ist die portabelste virtuelle Maschine, die je geschaffen wurde".

Bei der Implementierung von Smalltalk -80 wurden erhebliche Fortschritte erzielt, insbesondere bei der Deutsch/Schiffmann-Implementierung, die die Just-in-Time-Kompilierung (JIT) als Implementierungsansatz vorantreibt, der virtuelle Prozessmaschinen verwendet. Spätere bemerkenswerte Smalltalk-VMs waren VisualWorks , die Squeak Virtual Machine und Strongtalk . Eine verwandte Sprache, die viele Innovationen für virtuelle Maschinen hervorbrachte, war die Programmiersprache Self , die Pionierarbeit bei der adaptiven Optimierung und der generationsübergreifenden Garbage Collection leistete . Diese Techniken erwiesen sich 1999 in der HotSpot Java Virtual Machine als kommerziell erfolgreich. Weitere Innovationen umfassen eine registerbasierte virtuelle Maschine, um besser zur zugrunde liegenden Hardware zu passen, anstatt einer stapelbasierten virtuellen Maschine, die besser zur Programmiersprache passt; 1995 wurde dies von der virtuellen Dis-Maschine für die Limbo- Sprache entwickelt. OpenJ9 ist eine Alternative für HotSpot JVM in OpenJDK und ist ein Open-Source-Eclipse-Projekt, das einen besseren Start und weniger Ressourcenverbrauch im Vergleich zu HotSpot beansprucht.

Vollständige Virtualisierung

Logisches Diagramm der vollständigen Virtualisierung

Bei der vollständigen Virtualisierung simuliert die virtuelle Maschine genügend Hardware, um ein unverändertes „Gast“-Betriebssystem (das für denselben Befehlssatz entwickelt wurde ) isoliert auszuführen. Dieser Ansatz wurde 1966 mit dem IBM CP-40 und CP-67 , den Vorgängern der VM- Familie, entwickelt.

Beispiele außerhalb des Mainframe-Bereichs sind Parallels Workstation , Parallels Desktop für Mac , VirtualBox , Virtual Iron , Oracle VM , Virtual PC , Virtual Server , Hyper-V , VMware Fusion , VMware Workstation , VMware Server (eingestellt, früher GSX Server genannt), VMware ESXi- , QEMU- , Adeos- , Mac-on-Linux-, Win4BSD-, Win4Lin Pro- und Egenera vBlade-Technologie.

Hardwareunterstützte Virtualisierung

Bei der hardwaregestützten Virtualisierung bietet die Hardware architektonische Unterstützung, die den Aufbau eines Monitors für virtuelle Maschinen erleichtert und die isolierte Ausführung von Gastbetriebssystemen ermöglicht. Hardwareunterstützte Virtualisierung wurde erstmals 1972 auf dem IBM System/370 zur Verwendung mit VM/370 eingeführt , dem ersten Betriebssystem für virtuelle Maschinen, das von IBM als offizielles Produkt angeboten wurde.

In den Jahren 2005 und 2006 stellten Intel und AMD zusätzliche Hardware zur Unterstützung der Virtualisierung bereit. Sun Microsystems (jetzt Oracle Corporation ) fügte 2005 ähnliche Funktionen in seine UltraSPARC- Prozessoren der T-Serie ein. Beispiele für Virtualisierungsplattformen, die an solche Hardware angepasst sind, umfassen KVM , VMware Workstation , VMware Fusion , Hyper-V , Windows Virtual PC , Xen , Parallels Desktop für Mac , Oracle VM Server für SPARC , VirtualBox und Parallels Workstation .

Im Jahr 2006 wurde festgestellt, dass die 32- und 64-Bit-x86-Hardwareunterstützung der ersten Generation selten Leistungsvorteile gegenüber der Softwarevirtualisierung bietet.

Virtualisierung auf Betriebssystemebene

Bei der Virtualisierung auf Betriebssystemebene wird ein physischer Server auf Betriebssystemebene virtualisiert, sodass mehrere isolierte und sichere virtualisierte Server auf einem einzigen physischen Server ausgeführt werden können. Die "Gast"-Betriebssystemumgebungen teilen sich dieselbe laufende Instanz des Betriebssystems wie das Hostsystem. Somit wird derselbe Betriebssystemkern auch verwendet, um die "Gast"-Umgebungen zu implementieren, und Anwendungen, die in einer gegebenen "Gast"-Umgebung laufen, sehen es als eigenständiges System an. Die Pionierimplementierung war FreeBSD Jails ; Weitere Beispiele sind Docker , Solaris Containers , OpenVZ , Linux-VServer , LXC , AIX Workload Partitions , Parallels Virtuozzo Containers und iCore Virtual Accounts .

Siehe auch

Verweise

Weiterlesen

  • James E. Smith, Ravi Nair, Virtual Machines: Versatile Platforms For Systems And Processes , Morgan Kaufmann, Mai 2005, ISBN  1-55860-910-5 , 656 Seiten (deckt sowohl Prozess- als auch System-VMs ab)
  • Craig, Iain D. Virtuelle Maschinen . Springer , 2006, ISBN  1-85233-969-1 , 269 Seiten (deckt nur virtuelle Prozessmaschinen ab)

Externe Links