Virtuelle Maschine

Im Computer, a virtuelle Maschine (VM) ist der Virtualisierung/Emulation von a Computersystem. Virtuelle Maschinen basieren auf Computerarchitekturen und die Funktionalität eines physischen Computers bereitstellen. Ihre Implementierungen können spezielle Hardware, Software oder eine Kombination umfassen.

Virtuelle Maschinen unterscheiden sich und sind nach ihrer Funktion organisiert (hier gezeigt:

  • System virtuelle Maschinen (auch bezeichnet Vollständige Virtualisierung Vms) einen Ersatz für eine reale Maschine bereitstellen. Sie bieten Funktionen, die für die Ausführung des gesamten benötigt werden müssen Betriebssysteme. EIN Hypervisor Verwendet Einheimische Ausführung Hardware zu teilen und zu verwalten und mehrere Umgebungen zu ermöglichen, die voneinander isoliert sind und auf derselben physischen Maschine vorhanden sind. Moderne Hypervisoren verwenden Hardware-unterstützte Virtualisierung, virtualisierungsspezifische Hardware, hauptsächlich aus dem Host-CPUs.
  • Virtuelle Maschinen verarbeiten sind so konzipiert, dass Computerprogramme in einer plattformunabhängigen Umgebung ausgeführt werden.

Einige virtuelle Maschinenemulatoren wie z. Qemu und Videospielkonsole -Emulatoren, sind so konzipiert, dass sie auch verschiedene Systemarchitekturen emulieren (oder "praktisch imitieren"). So ermöglichen es die Ausführung von Softwareanwendungen und Betriebssystemen, die für einen anderen geschrieben wurden Zentralprozessor oder Architektur. Virtualisierung auf Betriebssystemebene Ermöglicht die Ressourcen eines Computers über die Partition Kernel. Die Begriffe sind nicht universell austauschbar.

Definitionen

System virtuelle Maschinen

Eine "virtuelle Maschine" wurde ursprünglich durch definiert von Papst und Goldberg als "ein effizientes, isoliertes Duplikat einer echten Computermaschine".[1] Der aktuelle Gebrauch umfasst virtuelle Maschinen, die keine direkte Korrespondenz für echte Hardware haben.[2] Die physische "reale" Hardware, die das VM ausgeführt wird, 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 nachahmen, von denen jedes verschiedene Betriebssysteme und Hardwareplattformen nachahmen kann.

Der Wunsch, mehrere Betriebssysteme auszuführen, war das ursprüngliche Motiv für virtuelle Maschinen, um Zeitharing zwischen mehreren Einzelaufgabenbetriebssystemen zu ermöglichen. In mancher Hinsicht kann eine virtuelle Systemmaschine als Verallgemeinerung des Konzepts von betrachtet werden virtueller Speicher Das ging es historisch voraus. IBM CP/CMS, die ersten Systeme zuzulassen Vollständige Virtualisierung, implementiert Zeitteilung Indem Sie jedem Benutzer ein Einzelbenutzer-Betriebssystem zur Verfügung stellen, die Konversationsmonitorsystem (CMS). Im Gegensatz zum virtuellen Speicher hat ein System virtueller Maschine den Benutzer mit dem Titel "Berechtigte Anweisungen in seinen Code" berechtigt. Dieser Ansatz hatte bestimmte Vorteile, wie das Hinzufügen von Eingangs-/Ausgabegeräten, die vom Standardsystem nicht zulässig sind.[2]

Da sich die Technologie zum Zwecke der Virtualisierung zum virtuellen Gedächtnis entwickelt, neue Systeme von neuen Systemen Gedächtnisüberbekommung Kann angewendet werden, um die Speicherfreigabe zwischen mehreren virtuellen Maschinen auf einem Computerbetriebssystem zu verwalten. Es kann möglich sein zu teilen Speicherseiten die identische Inhalte unter mehreren virtuellen Maschinen haben, die auf derselben physischen Maschine ausgeführt werden, was dazu führen kann, dass sie durch eine Technik bezeichnet werden Kernel gleichzeitig Zusammenführung (KSM). Dies ist besonders nützlich für nur schreibgeschützte Seiten, wie z. Um mit der Host -Hardware konform zu sein, ermöglicht es, verschiedene Betriebssysteme auf demselben Computer auszuführen (z. B.,, Fenster, Linuxoder frühere Versionen eines Betriebssystems) zur Unterstützung zukünftiger Software.[3]

Die Verwendung virtueller Maschinen zur Unterstützung separater Gastbetriebssysteme ist in Bezug auf eingebettete Systeme. Eine typische Verwendung wäre, a zu laufen Echtzeit-Betriebssystem Gleichzeitig mit einem bevorzugten komplexen Betriebssystem wie Linux oder Windows. Eine weitere Verwendung wäre für eine neuartige und unbewiesene Software in der Entwicklungsphase, also läuft sie in einem Sandkasten. Virtuelle Maschinen haben andere Vorteile für die Entwicklung des Betriebssystems und können einen verbesserten Debugging -Zugang und schnellere Neustarts umfassen.[4]

Mehrere VMs, die ein eigenes Gastbetriebssystem ausführen, werden häufig für die Serverkonsolidierung eingesetzt.[5]

Virtuelle Maschinen verarbeiten

Ein Prozess VM, manchmal als ein bezeichnet Anwendungsvirtuelle Maschine, oder Verwaltete Laufzeitumgebung (MRE) läuft als normale Anwendung in einem Host -Betriebssystem und unterstützt einen einzelnen Prozess. Es wird erstellt, wenn dieser Prozess gestartet und zerstört wird, wenn er ausgeht. Sein Zweck ist es, a zu liefern Plattform-unabhängig Programmierumgebung, die Details der zugrunde liegenden Hardware oder des zugrunde liegenden Hardware oder des Betriebssystems abstrahiert und ein Programm auf die gleiche Weise auf jeder Plattform ausführen kann.

Ein Prozess VM liefert eine hochrangige Abstraktion-die von a Programmiersprache auf hoher Ebene (im Vergleich zur niedrigen ISA-Abstraktion des Systems VM). Prozess -VMs werden mit einem implementiert Dolmetscher; Leistung vergleichbar mit kompilierten Programmiersprachen kann durch die Verwendung von erreicht werden Just-in-Time-Zusammenstellung.

Diese Art von VM ist mit dem populär geworden Java -Programmiersprache, was mit dem implementiert wird Java virtuelle Maschine. Andere Beispiele sind die Virtuelle Papageienmaschine und die .NET Framework, was auf einer VM namens das läuft Gemeinsame Sprachlaufzeit. Alle können als als dienen Abstraktionsschicht für jede Computersprache.

Ein spezieller Fall von Prozess -VMs sind Systeme, die über die Kommunikationsmechanismen von A (potenziell heterogen) abstrahiert werden. Computercluster. Eine solche VM besteht nicht aus einem einzigen Prozess, sondern aus einem Prozess pro physischer Maschine im Cluster. Sie sollen die Aufgabe der Programmierung gleichzeitiger Anwendungen erleichtern, indem der Programmierer eher auf Algorithmen als auf die Kommunikationsmechanismen der Verbindung und das Betriebssystem konzentriert werden. Sie verbergen nicht die Tatsache, dass Kommunikation stattfindet, und versuchen daher nicht, den Cluster als einzelne Maschine zu präsentieren.

Im Gegensatz zu anderen Prozess -VMs bieten diese Systeme keine bestimmte Programmiersprache, sondern sind in eine vorhandene Sprache eingebettet. Typischerweise liefert ein solches System Bindungen für mehrere Sprachen (z. B.,, C und Forran). Beispiele sind Parallele virtuelle Maschine (PVM) und Schnittstelle zur Nachrichtenübergabe (MPI). Sie sind keine streng virtuellen Maschinen, da die oben ausgeführten Anwendungen weiterhin Zugriff auf alle Betriebssystemdienste haben und daher nicht auf das Systemmodell beschränkt sind.

Geschichte

Sowohl systemvirtuelle Maschinen als auch verarbeiten virtuelle Maschinen stammen aus den 1960er Jahren und sind weiterhin Bereiche der aktiven Entwicklung.

System virtuelle Maschinen wuchs aus Zeitteilung, wie insbesondere in der implementiert Kompatibler Zeitaustauschsystem (CTSS). Durch die Zeitteilung konnten mehrere Benutzer einen Computer verwenden gleichzeitig: Jedes Programm schien den vollen Zugriff auf die Maschine zu haben, aber es wurde zu diesem Zeitpunkt nur ein Programm ausgeführt, wobei das System jedes Mal in Zeitscheiben zwischen den Programmen in Zeitscheiben gewechselt und wieder restauriert wurde. Dies entwickelte sich zu virtuellen Maschinen, insbesondere über IBMs Forschungssysteme: die M44/44x, was verwendete Teilvirtualisierung, und die CP-40 und Simmmon, was verwendete Vollständige Virtualisierungund waren frühe Beispiele von Hypervisoren. Die erste weit verbreitete virtuelle Maschinenarchitektur war die CP-67/CMS (siehe Geschichte von CP/CMS für Details). Eine wichtige Unterscheidung war zwischen der Verwendung mehrerer virtueller Maschinen auf einem Hostsystem für die Zeit Sharing, wie in M44/44x und CP-40, und die Verwendung einer virtuellen Maschine auf einem Hostsystem zum Prototyping wie in SIMMON. EmulatorenMit der Hardware -Emulation früherer Systeme zur Kompatibilität stammen aus IBM System/360 1963,,[6][7] während die Softwareemulation (damals "Simulation") vorhat.

Virtuelle Maschinen verarbeiten entstand ursprünglich als abstrakte Plattformen für eine Zwischensprache verwendet als das Zwischendarstellung eines Programms von a Compiler; Frühe Beispiele stammen aus dem Jahr 1966. Ein Beispiel Anfang 1966 war das O-Code-Maschine, eine virtuelle Maschine, die ausgeführt wird O-Code (Objektcode) emittiert von der Frontend des BCPL Compiler. Diese Abstraktion ermöglichte es dem Compiler, leicht auf eine neue Architektur zu portieren Back End Das dauerte den vorhandenen O-Code und kompilierte ihn zum Maschinencode für die zugrunde liegende physische Maschine. Das Euler Die Sprache verwendete ein ähnliches Design mit der mittleren Sprache, die benannt wurde P (tragbar).[8] Dies wurde um 1970 von 1970 populär gemacht Pascalinsbesondere in der Pascal-P System (1973) und Pascal-s Compiler (1975), in dem es bezeichnet wurde P-Code und die resultierende Maschine als P-Code-Maschine. Dies war einflussreich, und virtuelle Maschinen in diesem Sinne wurden oft allgemein als P-Code-Maschinen bezeichnet. Pascal P-Code wurde nicht nur eine Zwischensprache, sondern wurde auch direkt von einem Interpreter ausgeführt, der die virtuelle Maschine implementiert, insbesondere in UCSD Pascal (1978); Dies beeinflusste spätere Dolmetscher, insbesondere die Java virtuelle Maschine (JVM). Ein weiteres frühes Beispiel war Snobol4 (1967), der in der Snobol Implementationssprache (SIL) geschrieben wurde, einer Montagesprache für eine virtuelle Maschine, die dann auf physische Maschinen abzielte Makro -Assembler.[9] Makros sind seitdem jedoch in Ungnade gefallen, so dass dieser Ansatz weniger einflussreich war. Prozessvirtuelle Maschinen waren ein beliebter Ansatz zur Implementierung der frühen Mikrocomputer -Software, einschließlich Tiny Basic und Abenteuerspiele aus einmaligen Implementierungen wie z. Pyramide 2000 zu einem allgemeinen Motor wie Infocom's Z-Machine, die Graham Nelson argumentiert ist "möglicherweise die tragbarste virtuelle Maschine, die jemals erstellt wurde".[10]

Signifikante Fortschritte in der Umsetzung von auftraten Smalltalk-80,[11] insbesondere die Umsetzung von Deutsch/Schiffmann[12] was drückte Just-in-Time-Zusammenstellung (JIT) Weiterleiten Sie als Implementierungsansatz, bei dem Virtual Machine verwendet wird.[13] Später bemerkenswerte SmallTalk -VMs waren Visualworks, das Virtuelle Maschine quietschen,[14] und StrongTalk.[15] Eine verwandte Sprache, die viele virtuelle Maschineninnovationen hervorbrachte, war die Selbst Programmiersprache,[16] was Pionierarbeit leistete Adaptive Optimierung[17] und Generation Müllsammlung. Diese Techniken erwiesen sich 1999 im Jahr 1999 in der Hotspot Java virtuelle Maschine.[18] Andere Innovationen sind eine registrierende virtuelle Maschine, um der zugrunde liegenden Hardware besser zu entsprechen, als eine stapelbasierte virtuelle Maschine, die der Programmiersprache näher entspricht. 1995 wurde dies von der Pionierarbeit geleistet Dis virtuelle Maschine für die Limbo Sprache. OpenJ9 ist eine Alternative für Hotspot JVM in OpenJDK und ein Open -Source -Eclipse -Projekt, das im Vergleich zu Hotspot einen besseren Startup und weniger Ressourcenverbrauch beansprucht.

Vollständige Virtualisierung

Logisches Diagramm der vollen Virtualisierung

In der vollen Virtualisierung simuliert die virtuelle Maschine genügend Hardware, um einem nicht modifizierten "Gast" -Bo -Betriebssystem (eines für dasselbe ausgelegt Befehlssatz) isoliert laufen. Dieser Ansatz wurde 1966 mit der IBM Pionierarbeit geleistet CP-40 und CP-67Vorgänger der VM Familie.

Beispiele außerhalb des Mainframe -Feldes umfassen Parallelen Workstation, Parallelen Desktop für Mac, Virtualbox, Virtuelles Eisen, Oracle VM, Virtueller PC, Virtueller Server, Hyper-V, VMware Workstation, VMware -Server (eingestellt, früher als GSX -Server bezeichnet), VMware ESXI, Qemu, Adeos, Mac-on-Linux, Win4bsd, Win4lin Pro, und Egenera VBLADE -Technologie.

Hardware-unterstützte Virtualisierung

In der Hardware-unterstützten Virtualisierung bietet die Hardware architektonische Unterstützung, die den Aufbau eines virtuellen Maschinenmonitors erleichtert und isolierte Gäste-Osen ermöglicht.[19]Hardware-unterstützte Virtualisierung wurde erstmals 1972 im IBM System/370 für die Verwendung mit VM/370Das erste von IBM als offizielles Produkt angebotene offizielle Produktbetriebssystem.[20]

In den Jahren 2005 und 2006,, Intel und AMD bereitete zusätzliche Hardware zur Unterstützung der Virtualisierung. Sun Microsystems (jetzt Oracle Corporation) ähnliche Funktionen in ihren hinzugefügt Ultrasparc T-Serie Prozessoren im Jahr 2005. Beispiele für Virtualisierungsplattformen, die an diese Hardware angepasst sind KVM, VMware Workstation, VMware Fusion, Hyper-V, Windows Virtual PC, Xen, Parallelen Desktop für Mac, Oracle VM Server für SPARC, Virtualbox und Parallelen Workstation.

Im Jahr 2006 wurde festgestellt, dass die 32- und 64-Bit-Hardware-Unterstützung der ersten Generation selten Leistungsvorteile gegenüber der Software-Virtualisierung bietet.[21]

Virtualisierung auf Betriebssystemebene

Bei der Virtualisierung auf Betriebssystemebene wird ein physischer Server auf Betriebssystemebene virtualisiert, sodass mehrere isolierte und sichere virtualisierte Server auf einem einzelnen physischen Server ausgeführt werden können. Die "Gast" -Betriebssystemumgebungen teilen die gleiche laufende Instanz des Betriebssystems wie das Hostsystem. So dasselbe Betriebssystem Kernel wird auch verwendet, um die "Gast" -Enumgebungen zu implementieren, und Anwendungen, die in einer bestimmten "Gastumgebung" ausgeführt werden, betrachten sie als eigenständiges System. Die Pionierumsetzung war FreeBSD Gefängnis; Andere Beispiele sind Docker, Solaris -Behälter, Openvz, Linux-Vserver, LXC, AIX Workload -Partitionen, Parallelen virtuose Container, und icore virtuelle Konten.

Siehe auch

Verweise

  1. ^ Popek, Gerald J.; Goldberg, Robert P. (1974). "Formale Anforderungen an Architekturen der dritten Generation" (PDF). Kommunikation der ACM. 17 (7): 412–421. doi:10.1145/361011.361073. S2CID 12680060.
  2. ^ a b Smith, James E.; Nair, Ravi (2005). "Die Architektur virtueller Maschinen". Computer. 38 (5): 32–38, 395–396. doi:10.1109/mc.2005.173. S2CID 6578280.
  3. ^ Oliphant, Patrick. "Virtuelle Maschinen". VirtualComputing. Archiviert von das Original Am 2016-07-29. Abgerufen 2015-09-23. Einige Leute verwenden diese Fähigkeit, einen separaten virtuellen Computer zu erstellen, der Windows auf einem Mac ausführt, um den Zugriff auf die gesamte Auswahl an Anwendungen zu erhalten, die für beide Plattformen verfügbar sind.
  4. ^ "Super Fast Server startet neu - ein weiterer Grund, warum Virtualisierung rockt". vmwarez.com. 2006-05-09. Archiviert von das Original am 2006-06-14. Abgerufen 2013-06-14.
  5. ^ "Serverkonsolidierung und Eindämmung mit virtueller Infrastruktur" (PDF). VMware. 2007. Archiviert (PDF) vom Original am 2013-12-28. Abgerufen 2015-09-29.
  6. ^ Pugh, Emerson W. (1995). Aufbau von IBM: Gestaltung einer Branche und ihrer Technologie. MIT. p.274. ISBN 978-0-262-16147-3.
  7. ^ Pugh, Emerson W.; et al. (1991). IBMs 360 und frühe 370 Systeme. MIT. pp.160–161. ISBN 978-0-262-16123-7.
  8. ^ Wirth, Niklaus Emil; Weber, Helmut (1966). Euler: Eine Verallgemeinerung von Algol und seine formale Definition: Teil II, Kommunikation des Vereins für Computermaschinen. Vol. 9. New York: ACM. S. 89–99.
  9. ^ Griswold, Ralph E. Die Makroimplementierung von Snobol4. San Francisco, CA: W. H. Freeman and Company, 1972 ( ISBN0-7167-0447-1), Kapitel 1.
  10. ^ Nelson, Graham A. "Über Dolmetscher". Website informieren. Archiviert vom Original am 2009-12-03. Abgerufen 2009-11-07.
  11. ^ Goldberg, Adele; Robson, David (1983). SmallTalk-80: Die Sprache und ihre Implementierung. Addison-Wesley-Serie in Informatik. Addison-Wesley. ISBN 978-0-201-11371-6.
  12. ^ Deutsch, L. Peter; Schiffman, Allan M. (1984). "Effiziente Implementierung des SmallTalk-80-Systems". Popl. Salt Lake City, Utah: ACM. doi:10.1145/800017.800542. ISBN 0-89791-125-3.
  13. ^ Aycock, John (2003). "Eine kurze Geschichte der Just-in-Time". ACM Comput. Überleben. 35 (2): 97–113. doi:10.1145/857076.857077. S2CID 15345671.
  14. ^ Ingalls Jr., Daniel "Dan" Henry Holmes; Kaehler, Ted; Maloney, John; Wallace, Scott; Kay, Alan Curtis (1997). "Zurück in die Zukunft: Die Geschichte von Squeak, ein praktischer Smalltalk, der in sich geschrieben wurde". OOPSLA '97: Verfahren der 12. ACM-Sigplan-Konferenz über objektorientierte Programmierung, Systeme, Sprachen und Anwendungen. New York, NY, USA: ACM Press. S. 318–326. doi:10.1145/263698.263754. ISBN 0-89791-908-4.
  15. ^ Bracha, Gilad; Griswold, David (1993). "StrongTalk: typecking smalltalk in einer Produktionsumgebung". Verfahren der achten Jahreskonferenz über objektorientierte Programmiersysteme, Sprachen und Anwendungen. Oopsla '93. New York, NY, USA: ACM. S. 215–230. doi:10.1145/165854.165893. ISBN 978-0-89791-587-8.
  16. ^ Ungar, David Michael; Smith, Randall B. (Dezember 1987). "Selbst: Die Kraft der Einfachheit". ACM Sigplan nennt. 22 (12): 227–242. doi:10.1145/38807.38828. ISSN 0362-1340.
  17. ^ Hölzle, Urs; Ungar, David Michael (1994). "Dynamisch dispatchierte Anrufe mit Laufzeit-Feedback optimieren". Pldi. Orlando, Florida, USA: ACM. S. 326–336. doi:10.1145/178243.178478. ISBN 0-89791-662-x.
  18. ^ Paleczny, Michael; Vick, Christopher; Click, Cliff (2001). "Der Java Hotspot Server Compiler". Verfahren des Java Virtual Machine Research and Technology Symposium für Java Virtual Machine Research and Technology Symposium. Vol. 1. Monterey, Kalifornien: Usenix Association.
  19. ^ Uhlig, reich; Neiger, Gil; Rodgers, Dion; Santoni, Amy L.; Martins, Fernando C. M.; Anderson, Andrew V.; Bennett, Steven M.; Kägi, Alain; Leung, Felix H.; Smith, Larry (Mai 2005). "Intel Virtualisierungstechnologie". Computer. 38 (5): 48–56. doi:10.1109/mc.2005.163. S2CID 18514555.
  20. ^ Randal, A. (2019). Das Ideal versus Real: Überprüfung der Geschichte virtueller Maschinen und Behälter.
  21. ^ Adams, Keith; AGESEN, OLE (2006-10-21). Ein Vergleich von Software- und Hardware -Techniken für die X86 -Virtualisierung (PDF). ASPLOS'06 21. -25. Oktober 2006. San Jose, Kalifornien, USA. Archiviert (PDF) Aus dem Original am 2010-08-20. Überraschenderweise stellen wir fest, dass der Hardware-Support der ersten Generation selten Leistungsvorteile gegenüber vorhandenen Softwaretechniken bietet. Wir schreiben diese Situation hohen VMM/Guest -Übergangskosten und einem starren Programmiermodell zu, das wenig Raum für die Flexibilität der Software bei der Verwaltung der Häufigkeit oder der Kosten dieser Übergänge lässt.

Weitere Lektüre

  • James E. Smith, Ravi Nair, Virtuelle Maschinen: Vielseitige Plattformen für Systeme und Prozesse, Morgan Kaufmann, Mai 2005, ISBN1-55860-910-5, 656 Seiten (deckt sowohl Prozess- als auch System-virtuelle Maschinen ab)
  • Craig, Iain D. Virtuelle Maschinen. Springer, 2006, ISBN1-85233-969-1, 269 Seiten (Abdeckungen nur verarbeitende virtuelle Maschinen)

Externe Links