Wie kommunizieren so etwas wie die VirtualBox Guest Additions mit dem Host?

574
TheWhoAreYouPerson

Ich kann mir vorstellen, dass der Prozess darin besteht, nach bestimmten Mustern im virtualisierten Speicher zu suchen und diese zu ändern, aber ich frage mich, wie genau dies funktioniert. Vielleicht eine neue Art von Bios? (Ähnlich wie beim Betriebssystem, das die Uhrzeit vom RTC abfragt.) Ich bin interessiert, weil ich mich frage, ob ich mich für die willkürliche Datenkommunikation zwischen Host und Client selbst einschalten könnte.

0
"Vielleicht eine Art neuer Bios-Aufruf?" - Dies ist absolut nicht der Fall: VirtualBox ist ein Typ-2-Hypervisor, wie ein Gastbetriebssystem mit dem Host-Betriebssystem kommuniziert, ist gut dokumentiert. Ramhound vor 7 Jahren 0
Vielen Dank für die Einsicht in das Typ-2-Hypervisor-Bit. Ich habe wirklich zu den Details über die Ausführung von VMs geführt. Es erklärt jedoch nicht, wie Daten wie Bildschirmgeometrie, Zwischenablage, Drag & Drop usw. zwischen den beiden übertragen werden. Ich verstehe, dass die Maus und die Tastatur über die OS-Schicht übertragen werden können, aber was ist mit den zusätzlichen Daten? Insbesondere wenn Host- und Gastbetriebssystem unterschiedlich sind, können Sie diese Betriebssystemaufrufe nicht 1: 1 replizieren. TheWhoAreYouPerson vor 7 Jahren 0
Es gibt eine Softwareschicht. VirtualBox kommuniziert nur mit dieser Schicht. Es kann auch mit der Hardware selbst kommunizieren, wenn die Virtualisierungserweiterungen unterstützt werden Ramhound vor 7 Jahren 0
Ich hatte vor, meine Frage zu stellen **, wie ** der Gast mit dem Gastgeber kommuniziert, wobei es sich um die verwendete Technologie handelt, nicht nur um die Tatsache, dass dies möglich ist. Vermutlich haben VBox / andere mehrere Ebenen (wie vbox "Gastzugänge über der Gast-VM" bezeichnet), der Gast, der vom VMM bereitgestellte BIOS (der vermutlich der Teil ist, der mit dem Betriebssystem kommuniziert, der Bildschirm / Maus / Tastatur / IO-Port 'Forwarder'), das Betriebssystem usw. Ich verstehe, dass VMM Hardware / Bildschirm / usw. über dieses benutzerdefinierte BIOS kommuniziert, aber wohin werden die benutzerdefinierten Daten gesendet? Einige benutzerdefinierte 'physische' (virtuelle) Anschlüsse, Speichermanipulation usw. TheWhoAreYouPerson vor 7 Jahren 0
"Ich verstehe, dass VMM Hardware / Bildschirm / etc über dieses benutzerdefinierte BIOS kommuniziert, aber wohin werden die benutzerdefinierten Daten gesendet" - Dies ist falsch. So funktionieren die x86-Virtualisierungserweiterungen nicht. Ramhound vor 7 Jahren 0
Möglicherweise gibt es einige Antworten in [VMMDev.cpp] (https://www.virtualbox.org/browser/vbox/trunk/src/VBox/Devices/VMMDev/VMMDev.cpp). Sieht aus, als würden sie ein benutzerdefiniertes Hardwaregerät emulieren, dessen einziger Zweck die Kommunikation zwischen Host und Gast ist. Der Host sendet Daten über das Interrupt-System, ähnlich einer Maus / Tastatur oder einer Netzwerkkarte. Daniel Stevens vor 6 Jahren 0

1 Antwort auf die Frage

2
Frank Thomas

Verstehen Sie zuerst, dass Virtualbox ein Programm ist, das auf dem Host-Betriebssystem installiert ist. Aus diesem Grund werden ausführbare Dateien, Bibliotheken und andere Ressourcen ausgeliefert. Viele dieser Bibliotheken rufen Host-Betriebssystemfunktionen und -Dienste auf, um ihre Arbeit zu erledigen.

Virtualbox installiert auch Treiber im Betriebssystemkern. Diese Treiber definieren, wie der Kernel Hardwareschnittstellen für die Virtual Hardware-Schicht von Virtualbox bereitstellen kann.

Die virtuelle Hardwareschicht befindet sich zwischen dem Host-Betriebssystem und dem Guest. Für den Host ist es nur ein anderes Programm, aber für den Guest scheint es echte Hardware zu sein.

Es ist wichtig zu verstehen, dass Virtualbox als Programm ausgeführt wird, während der Gast läuft, aber die beiden machen ganz andere Dinge. Virtualbox arbeitet mit dem Host daran, dem Guest einen gefälschten Computer zu präsentieren, während der Guest nur als Betriebssystem der gefälschten Hardware ausgeführt wird.

Betriebssystemtreiber sind in der Regel nicht für den Guest geeignet oder weisen extrem eingeschränkte Funktionen auf. Der Guest weiß nicht, dass es sich um eine VM handelt, und kann dem Host keine Fragen stellen. Deswegen brauchen wir Guest Tools.

Guest Tools rüsten die Systemtreiber mit den für die virtualisierte Hardware geeigneten Treibern auf und kommunizieren mit der gefälschten Hardware, um Fragen wie "Was ist meine maximale Auflösung" zu stellen. VBox fragt wiederum das Betriebssystem und meldet sich an den Gast zurück.

Gast-Tools ermöglichen auch andere Funktionen wie die Freigabe von Ordnerordnern, indem auf dem Gast eine Software installiert wird, die mit VBox kommunizieren kann. VBox verwendet dann Betriebssystemtechnologien wie Named Pipes oder Ole (in Windows) oder Netzwerk-IPC (Linux), um Daten zwischen sich und den Host-Betriebssystemen hin und her zu übergeben.

Der wichtige Einstieg hier ist, dass der Gast seine VM nicht kennt und der Host seine laufenden VMs nicht kennt. Vbox sitzt zwischen den beiden und vermittelt die gesamte Kommunikation. Es besteht kein außergewöhnliches Vertrauen in das physische BIOS.

Was Sie möglicherweise an das BIOS denken lässt, sind die Virtualisierungserweiterungen. Bitte haben Sie Verständnis dafür, dass VT ein Satz von CPU-Anweisungen ist und sich nicht auf das BIOS bezieht. VBox führt Code aus, der (sofern angemessen) in VT-Befehlsaufrufe kompiliert wurde, sodass optimierte Anweisungen für virtuelle Vorgänge ausgeführt werden können. Wieder einmal hat das Host-Betriebssystem wenig damit zu tun.

(Ich bezog mich auf http://i.imgur.com/Ary3JSW.png, als ich BIOS sagte, übrigens. Ich sehe jetzt, dass das nicht stimmt. Verwirrt mich, da es auf den ersten Blick ein BIOS zu sein scheint und blinkt off) Nachdem ich kurz vorher ein wenig darüber gelesen hatte, dachte ich, dass es ein paar CPU-Anweisungen für den Betrieb einer VM gegeben haben muss, aber ich hatte keine Ahnung, dass sie sich auch mit Daten befassten, nur Perms. Soweit ich feststellen kann (beginnend bei Wikipedia), besteht der Prozess der Guest-Hypervisor-Kommunikation im Wesentlichen aus einigen Anweisungen zum Abrufen / Festlegen von Daten und einigen wenigen Anweisungen. den exec bewegen Kontext. Bitte korrigiere mich wenn ich falsch liege :) TheWhoAreYouPerson vor 7 Jahren 0