Volle emulation im Vergleich zu voll-Virtualisierung
Volle emulation der I/O-Geräte, CPU, Hauptspeicher virtualisiert werden. Das Gast-Betriebssystem den Zugriff auf virtuelle Geräte, die nicht den physischen Geräten. Aber was genau ist voll-Virtualisierung? Ist es das gleiche wie full-emulation oder etwas ganz anderes?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Emulation und Virtualisierung sind verwandt, aber nicht identisch.
Emulation mit Hilfe von software, um eine andere Ausführungsumgebung oder Architektur. Zum Beispiel, haben Sie vielleicht einen Android-emulator laufen auf einem Windows-Rechner. Der Windows-Rechner nicht den gleichen Prozessor, dass ein Android-Gerät funktioniert, so dass der emulator tatsächlich führt die Android-Anwendung über die software.
Virtualisierung ist mehr über das erstellen von virtuellen Barrieren zwischen mehreren virtuellen Umgebungen laufen, in derselben physikalischen Umgebung. Der große Unterschied ist, dass der virtualisierten Umgebung ist die gleiche Architektur. Eine virtualisierte Anwendung kann bieten virtualisierte Geräte, die dann übersetzt werden, um physische Geräte und der Virtualisierungs-host hat die Kontrolle über die virtuelle Maschine hat Zugriff auf jedes Gerät oder Teil eines Gerätes. Die tatsächliche Ausführung ist den meisten oft noch ausgeführt nativ obwohl, nicht durch software. Daher Virtualisierung die Leistung in der Regel viel besser als die emulation.
Es gibt auch einen separaten Konzept einer Virtuellen Maschine, wie jene die Ausführung von Java -, .NET-oder Flash-code. Sie können variieren von einer Durchführung auf die nächste und möglicherweise auch Aspekte entweder emulation oder Virtualisierung oder beides. Zum Beispiel die JVM stellt einen Mechanismus zum ausführen von Java-byte-codes. Jedoch die JVM-spec nicht diktieren, dass die byte-codes, die ausgeführt werden müssen, durch software-oder dass Sie systemeigenen code kompiliert. Jede JVM kann es nicht sein eigene Sache, und in der Tat die meisten JVMs eine Kombination der beiden über die emulation-sofern angemessen und mit einem JIT-wo angebracht (der Hotspot JIT-ich denke, das ist, was es heißt, für Sun/Oracle JVM).
Nein, Sie emuliert in software. Emuliert heißt, Ihr Verhalten ist vollständig repliziert in der software.
Mit Virtualisierung, Sie versuchen, so viel code wie möglich auf die hardware, um den Prozess zu beschleunigen.
Dies ist insbesondere ein problem mit code, der musste ausgeführt werden,kernel-Modus, als potentiell ändern könnten den globalen Zustand des host (die Maschine Hypervisor oder VMM ausgeführt wird) und damit Auswirkungen auf die anderen virtuellen Maschinen.
Dies ist ein Versuch, Antwort auf meine eigene Frage.
System-Virtualisierung : Verständnis IO-Virtualisierung und die Rolle der hypervisor
Virtualisierung
Virtualisierung als Konzept ermöglicht es, dass mehrere/diverse Anwendungen koexistieren auf der gleichen zugrunde liegenden hardware, ohne sich gegenseitig wahrzunehmen.
Als ein Beispiel, vollwertigen Betriebssystemen wie Windows, Linux, Symbian usw. zusammen mit deren Anwendungen können gleichzeitig auf der selben Plattform. Alle computing-Ressourcen virtualisiert werden.
Was dies bedeutet ist keiner der genannten Maschinen haben Zugang zu physischen Ressourcen. Die einzige Person, die Zugang zu physischen Ressourcen ist ein Programm, bekannt als Virtual Machine Monitor (auch Hypervisor).
Nun, dies ist wichtig. Bitte Lesen Sie und Lesen Sie sorgfältig.
Den hypervisor bietet eine virtuelle Umgebung zu jeder der Maschinen vor. Da diese Maschinen NICHT die physikalische hardware, ABER die virtualisierte hardware, Sie sind bekannt als Virtuelle Maschinen.
Als ein Beispiel, kann der Windows-kernel starten möchten, physikalische timer (System Resource). Davon ausgehen, dass es timer-memory-mapped IO. Der Windows-kernel Probleme, eine Serie von Load - /Store-Anweisungen auf die Timer-Adressen. In einer Nicht-Virtualisierten Umgebung, diese Load/Store geführt hätte, die in die Programmierung des timer-hardware.
Jedoch in einer virtualisierten Umgebung, diese Load/Store-Zugriffe der physischen Ressourcen wird das Ergebnis in eine Falle/Fehler. Der Falle erfolgt durch den hypervisor. Der Hypervisor weiß, dass windows versucht, Programm-timer. Der hypervisor verwaltet die Timer-Daten-Strukturen für die einzelnen virtuellen Maschinen. In diesem Fall wird der hypervisor aktualisiert die timer-Daten-Struktur, die er geschaffen hat, für Windows. Es dann Programme die real timer. Jeder interrupt erzeugt durch den timer erfolgt durch die hypervisor-ersten. Datenstrukturen für virtuelle Maschinen werden aktualisiert, und dessen interrupt-service-Routinen aufgerufen werden.
Um eine lange Geschichte kurz zu, Windows hat alles, was er getan haben würde, in einer Nicht-Virtualisierten Umgebung. In diesem Fall, seine Handlungen geführt, die NICHT den realen system-Ressource aktualisiert wird, aber die virtuellen Ressourcen (Daten, Strukturen oben) immer aktualisiert.
Somit alle virtuellen Maschinen, die denken, dass Sie Zugriff auf die zugrunde liegende hardware; In Wirklichkeit ist Ihnen unbekannt, alle Zugriffe auf die physische hardware wird vermittelt durch den hypervisor.
Alles, was oben beschrieben ist full/klassische Virtualisierung. Die meisten modernen CPUs sind ungeeignet für die klassische Virtualisierung. Die Falle/die Schuld wird nicht für alle Anweisungen. Der hypervisor ist einfach umgangen moderne Geräte.
Hier ist, wo die para-Virtualisierung zu Stande kommt. Die vertrauliche Anweisungen in den source code von virtuellen Maschinen werden ersetzt durch einen Aufruf Hypervisor. Die load/store-snippet oben ersetzt werden können durch einen Aufruf wie
EMULATION
Emulation ist ein Thema im Zusammenhang mit der Virtualisierung. Stellen Sie sich ein Szenario, in dem ein Programm ursprünglich kompiliert für ARM aus, um die Ausführung auf einer ATMEL CPU. Die ATMEL CPU läuft ein Emulator-Programm, das interpretiert jeder ARM Unterricht und emuliert notwendigen Maßnahmen auf ATMEL-Plattform. Damit der Emulator stellt eine virtualisierte Umgebung.
In diesem Fall die Virtualisierung von system-Ressourcen erfolgt NICHT über trap-und ausführen-Modell.
Ohne emulation oder Virtualisierung, code läuft direkt auf der hardware. Seine Anweisungen ausgeführt werden nativ von der CPU und der I/O-Zugriffe direkt auf die hardware zuzugreifen.
Virtualisierung ist, wenn der Gast-code läuft nativ zumindest einige Zeit, und nur fallen, um host-code-Ausführung außerhalb der virtuellen-Maschine (z.B. eine hypervisor) für privilegierte Operationen oder I/O-Zugriffe.
Behandeln diese traps (aka VM exits), die VM kann eigentlich emulieren, was der Gast versuchte zu tun. E. g. der Gast könnte mit einem Treiber für eine einfache Netzwerk-Karte, aber der NIC implementiert ist rein in software in der VM. Wenn der VM verwendet eine pass-through-senden Sie die Gast-I/O-Zugriffe zu einer echten Netzwerkkarte auf dem host, das wäre die Virtualisierung von hardware. (Vor allem, wenn es Tat es in einer Weise, dass mehrere Gäste auf einmal, sonst ist es wirklich nur geben Sie es an einen Gast, nicht zu virtualisieren, es.)
Hardware-Unterstützung für Virtualisierung (wie Intel 's und AMD' s separate x86-Virtualisierungs-Erweiterungen) lassen dem Gast die Dinge tun, die normalerweise Auswirkungen auf die gesamte Maschine, wie ändern Sie die Speicher-mappings in einer page table. Anstatt also das auslösen einer VM beenden und die VM herauszufinden, was der Gast Tat, und dann ändern sich die Dinge von außen zu erreichen, das Ergebnis, die CPU hat nur eine extra-übersetzung-Schicht eingebaut. (Siehe den verlinkten wiki-Artikel für eine viel bessere, aber längere Beschreibung der software-basierten Virtualisierung vs. hardware-unterstützte Virtualisierung.)
Reine emulation bedeutet, dass Gast-code läuft nicht nativ, und sieht nie die "echte" hardware des host. Ein emulator nicht brauchen privilegierten Zugang zu den host -. (Manche möchten vielleicht einen privilegierten Zugang zu dem host-Gerät pass-through-oder für einfache Netzwerk-sockets zu lassen, einen Gast so Aussehen, dass es wirklich an das gleiche Netzwerk wie der host).
Einen ARM-emulator läuft auf einem x86-host hat immer auf diese Weise zu arbeiten, weil der host-hardware kann nicht laufen ARM-Anweisungen in den ersten Platz.
Aber man kann immer noch emuliert eine x86-Gast auf einem x86-host, zum Beispiel. Die Tatsache, dass der Gast-und host-Architekturen entsprechen, bedeutet nicht, dass der emulator zu nutzen diese Tatsache.
Beispielsweise BOCHS ist ein x86-PC-emulator geschrieben in portablen C++. Einer seiner wichtigsten Verwendungen ist für debugging-Bootloader und Betriebssysteme.
BOCHS ist nicht egal, wenn es läuft auf einem x86 host oder nicht. Es ist einfach ein C++ - Programm zum Lesen von Binär-Dateien (Festplatten-images) und zieht in ein Fenster (Inhalt des guest video memory). Soweit der host betroffen ist, es ist nicht besonders anders als ein JPG-viewer oder ein Spiel.
Einige Emulatoren, die binäre übersetzung einsetzen, um die JIT-kompilieren der Gast-code in host-code, aber das ist noch emulation, und nicht Virtualisierung. Sehen http://wiki.osdev.org/Emulator_Comparison.
BOCHS relativ langsam, da es liest und decodiert Gast-Befehle direkt, ohne binary translation. Aber es versucht zu tun, dies so effizient wie möglich. Sehen Wie Bochs Arbeitet Unter der Haube für einige der tricks, die er verwendet, um effizient zu verfolgen, der Gast Stand. Seit emulation ist die einzige option für die Ausführung von x86-software auf nicht-x86-hardware, es ist nützlich, um ein high-performance-emulator. BOCHS hat einige sehr kluge und erfahrene emulator-Entwickler arbeiten daran, vor allem Darek Mihocka, die hat einige interessante Artikel über die Optimierung emulation auf seiner Website.
Einer neueren Antwort:
Aus meiner Forschung kann ich sagen, dass dies eine bessere Antwort zu verstehen, wie concept erscheinen:
Das erste Konzept von emulation tatsächlich stammt der erste computer, der Koloss. Es wurde von der britischen Regierung im Jahre 1941 zu imitieren, um die Funktionen der Nazi-Enigma-code-Maschine. Emulation Theorie wurde im Jahr 1962 und wurde konzipiert von drei IBM-Ingenieure arbeiten aus drei verschiedenen Blickwinkeln.
Emulation bedeutet imitieren das Verhalten der Ziel - die hardware, wie der emulator emu8086, oder Sie können software wie emulation eines Dienstes von einem Netzwerk-port.
Du willst immitate die Menge der Funktionen, die das Ziel und vielleicht sind Sie nicht daran interessiert, den internen Mechanismus.
Warum würden Sie wollen, dass? Für die Steuerung von Funktionen. Warum Kontrolle? Für mehrere Grund ist, die sehr großes Thema werden hier diskutiert. Aber Bedenken Sie, dass Sie wollen hinter die Dinge.
Aber ein solcher Prozess ist teuer für die Leistung. Sie haben eine Anweisung für die Ausführung einer Menge von anderen Unterricht. Vielleicht sind Sie daran interessiert, die Kontrolle über nur einige der Anweisungen. So möchten wir es zulassen, dass bestimmte Anweisungen ausgeführt werden native.
Also, was passiert, wenn Sie alle diese Anweisungen, die die Ausführung wurde native? Dann haben Sie ideal Virtualisierung. Die Virtualisierung von software, aber der trend ist heute von der Virtualisierung von Betriebssystemen zu, die der Anwendung. Auch ich sagen ideal, weil diese software haben eine andere Ausführung auf jeder hardware, so wird es brauchen, um auch emulieren einige Anweisungen.Wichtig ist zu verstehen, dass die meisten von Virtualisierung-Technologien von heute sind nicht nur zu virtualisieren, sondern auch über emulation.
Beachten Sie auch, dass in unserem übergang von der emulation, Virtualisierung, der Eingang des Systems ist geringer, da die Virtualisierung akzeptieren Sie nur software, die als Eingabe. Die Steuerung dieser Fluss der Anleitung benannt ist HyperVisor.
Virtualisierung kann passieren, auf verschiedenen Ebenen von der Architektur des Computers, die (von höheren zu niedrigeren): 1: Applikation, 2: Bibliothek, 3: Betriebssystem, 4: Hardware-Abstraktionsschicht (HAL), 5: Instruction Set Architecture (ISA). Unterhalb der letzteren Ebene ist es die Hardware.
Typischerweise eine bestimmte Schicht nutzt die Dienste von einer unteren Schicht, durch die Verwendung der Anweisungen, die der unteren Schicht stellt in seiner Schnittstelle.
Beachten Sie, dass die Nutzung des service ist streng genommen nicht im Zusammenhang mit der Schichtung in dem Sinne, dass bestimmte Schichten können Sie überspringen die Ebene unmittelbar unterhalb, und nutzen Anweisung aus niedrigeren Schichten. Als Beispiel einer Anwendung kann bestimmte Anweisungen direkt auf die HAL-Schicht, das überspringen der Bibliothek und O. S. Schichten.
Zu "emulieren" eine Anweisung" bedeutet das abfangen und anzeigen einer Anweisung nur für eine bestimmte Schicht der computer-Architektur (virtuell) in eine Sequenz (eine oder mehrere) Instruktion(en) für die gleichen Schicht eines anderen computer-Architektur (nicht-virtuelle).
Es ist möglich, die Virtualisierungs-Schicht auf verschiedenen Ebenen von der Architektur des Computers. Dieser Punkt kann die Einführung Verwirrung.
Als ein Beispiel, wenn die Virtualisierung auf der Ebene der Hardware Abstraction Layer (z.B. VMware, VirtualBox) eine virtuelle Ebene wird zwischen der HAL-Schicht und der Betriebssystem-Schicht. Das Betriebssystem nutzt den Anweisungen des virtuellen HAL-Layer, dann bestimmte virtuelle ISA (Instruction Set Architecture) zugeordnet sind, die durch den hypervisor an ISA für das physische system. Wenn ALLE die Instruktion emuliert werden, wir sprechen über full-emulation, die eine spezielle Fall der Virtualisierung. Bei der Virtualisierung typisch wir versuchen, eine Ebene direkt ausführen Anweisung der nicht-virtuellen Ebene so viel wie möglich aus performance-Gründen.
In einem anderen Beispiel, der Virtualisierungs-layer platziert wird, über das Operative System (Virtualisierung auf Betriebssystem-Ebene): in diesem Fall wird eine Virtuelle Maschine mit dem Namen Container (z.B. Docker). Es umfasst die Ebenen von der Anwendung auf die O. S. (im Lieferumfang enthalten).
Abschluss, die emulation ist in Bezug auf einzelne Anweisung, während "vollständige emulation" geschieht, wenn wir das abfangen und anzeigen ALLE Anweisungen, die einer bestimmten Schicht.
Typisch, der Begriff "vollständige emulation" wird verwendet, wenn die Virtualisierungs-Schicht ist an der ISA-Ebene (untere Ebene). In diesem Fall eine Virtuelle-Maschine umfasst alle Ebenen, von der Anwendung der ISA und ALLE die ISA abgefangen und zugeordnet. Dies wird typischerweise verwendet, um die Virtualisierung von Nischenprodukten, wie z.B. Cisco-Router (z.B. mit QEMU) oder 90 s-video-Spiel-Konsolen, mit einem völlig anderen Architektur von den üblichen allgemein verfügbaren Computer. Beachten Sie jedoch, dass es eine "vollständige emulation" auch auf anderen Ebenen, die typischerweise nicht notwendig.
Virtualisierung und Emulation sind ziemlich viel die gleiche Sache. Gibt es eine zugrunde liegende Konzept, dass diese beiden Worte andeuten. Das heißt, diese zwei Worte sind Aspekte einer Sache. Dies zeigt sich in QEMU, eine Schnelle Emulator führt, dass die hardware Virtualisierung.
Können Sie denken, dass eine Sache als Simulation. Die Simulation kann auch ein verwirrend Wort aber.
Zuerst definieren wir die Allgemeine Bedeutung der Worte.
Nun zeigen wir, dass die Worte meinen alle so ziemlich das gleiche. Zum Beispiel, in der simulation erstellen Sie eine Replik von einem system zu einem anderen system. Das ist der gemeinsame Sinn von emulation. Bei der Virtualisierung Sie möchten Ihre virtualisierten system handeln, wie das Reale system. Das ist ideal, es wirkt wie eine Replik, auch wenn es vielleicht anders implementiert und kann nicht "emulieren" die hardware genau. Das ist das gleiche als simulation ziemlich viel. In einer emulation simulieren Sie ein anderes system, etc..
So können wir sehen, dass die Worte etwas austauschbar. Das zugrunde liegende Konzept ist eine simulation.
In der Virtualisierung, wie der Betriebssystem-Virtualisierung ("virtuelle Maschinen"), schaffen wir ein system, das funktioniert wie das Betriebssystem. Es könnte tricks aus der zugrunde liegenden hardware oder auf Hypervisor-Systemen, oder andere Dinge, für Leistung und Sicherheit. Aber am Ende ist es nur eine simulation eines Betriebssystems. Normalerweise, wenn das Wort "virtuelle Maschine" verwendet wird, ist es nicht eine exakte Nachbildung der Maschine (wie in einem emulator). Es funktioniert einfach genug, um zu erlauben, Programme auszuführen, als würden Sie erwarten, dass auf dem echten Betriebssystem.
In der emulation ist es in der Regel bedeutete, dass die simulation "genau". In der hardware-emulation, die Sie replizieren alle Funktionen der hardware-system. Dies bedeutet, dass man eine simulation der hardware. Man könnte sagen, dass Sie erstellt eine Virtualisierung der hardware, aber hier ist, wo die Virtualisierung leicht unterscheidet. Virtualisierung bedeutet die Erstellung einer isolierten Umgebung, die emulation nicht notwendigerweise. So ein hardware-emulator, vielleicht liefern die gleiche Schnittstelle zu der hardware als die hardware an sich, sondern die Umsetzung des emulators kann sich auf globalen Speicher, so dass, wenn Sie versuchen, führen Sie zwei Emulatoren in der gleichen Zeit, würden Sie sich gegenseitig stören. Dies ist, was die Virtualisierung löst, Sie isoliert den Simulationen.
Hoffe, das hilft.