VirtualBox

Changes between Version 4 and Version 5 of VirtualBox architecture


Ignore:
Timestamp:
Nov 16, 2006 4:49:15 PM (17 years ago)
Author:
jose
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • VirtualBox architecture

    v4 v5  
    1313 1. `VirtualBox`, the GUI for the main window;
    1414 1. another `VirtualBox` process that was started with the `-startvm` parameter, which means that its GUI process acts as a shell for a VM;
    15  1. `VirtualBoxSVC`, a daemon running in the background that keeps track of all the processes involved (this was automatically started by the first GUI process).
     15 1. `VBoxSVC`, a service running in the background that keeps track of all the processes involved (this was automatically started by the first GUI process).
    1616
    1717(On Linux, there's another daemon process called `VBoxXPCOMIPCD` which is necessary for our XPCOM implementation to work. We will ignore this for now; see [wiki:"COM-XPCOM interoperability"] for details.)
    1818
    19 The VM that runs "inside" the second window looks like just another Qt process to the host operating system. !VirtualBox is very well behaved in that respect: it pretty much takes over control over a large part of your computer, executing a complete operating system with its own set of guest processes, drivers, and devices inside this VM process, but the host operating system does not notice much of this. Whatever the VM does, it's just another process in your host operating system.
     19The VM that runs "inside" the second window looks like just another Qt process to the host operating system (OS). !VirtualBox is very well behaved in that respect: it pretty much takes over control over a large part of your computer, executing a complete OS with its own set of guest processes, drivers, and devices inside this VM process, but the host OS does not notice much of this. Whatever the VM does, it's just another process in your host OS.
    2020
    2121We therefore have two sorts of encapsulation in place with the various !VirtualBox files and processes:
     
    2323 1. '''Client/server architecture.''' All aspects of !VirtualBox and the VMs that are running can be controlled with a simple, yet powerful, COM/XPCOM API. For example, there is a command-line utility called `VBoxManage` that allows you to control VMs just like the GUI does (in fact, many of the more sophisticated operations are not yet supported by the GUI). You can, for example, start a VM from the GUI (by clicking on the "Start" button) and stop it again from `VBoxManage`.
    2424
    25  This is why the server process (`VBoxSVC`) is needed: it acts as a librarian of what VMs are running and what states their in.
     25 This is why the service process (`VBoxSVC`) is needed: it acts as a librarian of what VMs are running and what states their in.
    2626
    27  2. '''Frontend/backend architecture.''' The guts of !VirtualBox -- everything that makes x86 virtualization complicated and messy -- are hidden in a shared library, `VBoxVMM.dll`, or `VBoxVMM.so` on Linux. This can be considered a "backend" that is static, and it is easy to write another frontend without having to mess with the gory details of x86 virtualization. So, as an example, if you don't like the fact that the GUI is a Qt application, you can easily write a different frontent (say, using GTK).
     27 2. '''Frontend/backend architecture.''' The guts of !VirtualBox -- everything that makes x86 virtualization complicated and messy -- are hidden in a shared library, `VBoxVMM.dll`, or `VBoxVMM.so` on Linux. This can be considered a "backend", or black box, that is static, and it is relatively easy to write another frontend without having to mess with the gory details of x86 virtualization. So, as an example, if you don't like the fact that the GUI is a Qt application, you can easily write a different frontend (say, using GTK).
    2828
    2929 In fact, !VirtualBox already comes with several frontends:
    3030
    31    * The Qt GUI (`VirtualBox`) that you may already be familiar with.
     31 * The Qt GUI (`VirtualBox`) that you may already be familiar with.
    3232
    33    * `VBoxManage`, a command-line utility that allows you to control all of !VirtualBox's powerful features.
     33 * `VBoxManage`, a command-line utility that allows you to control all of !VirtualBox's powerful features.
    3434
    35    * A "plain" GUI based on [http://www.libsdl.org/index.php SDL], with fewer fancy features than the Qt GUI. This is useful for business use as well as testing during development. To control the VMs, you will then use `VBoxManage`.
     35 * A "plain" GUI based on [http://www.libsdl.org/index.php SDL], with fewer fancy features than the Qt GUI. This is useful for business use as well as testing during development. To control the VMs, you will then use `VBoxManage`.
    3636
    37    * An RDP server, which does not produce visible output on the host, but allows remote computers to connect to it.
    38      
    39      (The RDP server is not part of !VirtualBox Open Source Edition, but is available with the full version; see the [Editions] page for details.
     37 * An RDP server, which is console-only and produces no graphical output on the host, but allows remote computers to connect to it via the Remote Desktop Protocol (RDP). This is especially useful for enterprises who want to consolidate their client PCs onto just a few servers. The client PCs are then merely displaying RDP data produced by the various RDP server processes on a few big servers, which virtualize the "real" client PCs. (The RDP server is not part of !VirtualBox OSE, but is available with the full version; see the [wiki:"Editions"] page for details.)
     38
     39== Inside a virtual machine ==
     40
     41As said above, from the perspective of the host OS, a virtual machine is just another process. The host OS does not need much tweaking to support virtualization.
     42
     43When a VM is running, from your processor's point of view, your computer can be in one of several states:
     44
     45 1. It can be '''executing host ring-3 code''' (e.g. from other host processes), or '''host ring-0 code,''' just as it would be if !VirtualBox wasn't running.
     46 2. It can be '''emulating guest code'''. Basically, !VirtualBox tries to run as much guest code natively as possible and emulates guest code when it is lost about why guest code is not working. Typically, the emulator steps in as a fallback when
     47    * guest code disables interrupts and !VirtualBox cannot determine when they will be switched back on;
     48    * for execution of certain single instructions; this typically happens when a nasty guest instruction such as `LIDT` has caused a trap and needs to be emulated;
     49    * for any real-mode code (e.g. BIOS code, a DOS guest, or any operating system startup).
     50 3. It can be '''running guest ring-3 code natively.''' In !VirtualBox, this is called "raw ring 3". This is, of course, the most efficient way to run the guest, and hopefully we don't leave this mode too often. The more we do, the slower the VM is compared to a native OS, because all context switches are very expensive.
     51 4. It can be '''running guest ring-0 code natively.''' Here is where things get hairy: The guest only ''thinks'' it's running ring-0 code, but !VirtualBox has patched the guest OS to instead enter ring 1 (which is normally unused with x86 operating systems).
     52
     53Also, in the !VirtualBox source code, you will find lots of references to "host context" or "guest context". Essentially, these mean:
     54
     55 * '''Host context (HC)''' means that the host OS is in control of everything including virtual memory. Here, as normally, you have ring 3 and ring 0.
     56
     57 * '''Guest context (GC)''' means that !VirtualBox has set up CPU & memory exactly the way the guest expects, but has inserted itself at the "bottom" of the picture, so that !VirtualBox gains control ''first'' for any privileged instructions executed, guest trap or external interrupts, before !VirtualBox may then possibly delegate handling such things to the host OS. So, in the guest context, we have
     58   * ring 3 (hopefully executed in "raw mode" all the time);
     59   * ring 1 (of which the guest thinks it's ring 0, see above), and
     60   * ring 0 (which is !VirtualBox code). This guest-context ring-0 code is also often called a "hypervisor".
     61
     62Finally, there is also a ring-0 driver that must be loaded in the host OS for !VirtualBox to work. However, this ring-0 driver does less than you may think. It is only needed for a few specific tasks, such as:
     63
     64 * allocating physical memory for the VM;
     65
     66 * saving and restoring CPU registers and descriptor tables when a host interrupt occurs while a guest's ring-3 code is executing (e.g. when the host OS wants to reschedule);
     67
     68 * when switching from host ring-3 to guest context;
     69
     70 * enable or disable Vanderpool etc. support.
     71
     72Most importantly, the host's ring-0 driver does ''not'' mess with your OS's scheduling or process management. The entire guest OS, including its own hundereds of processes, is only scheduled when the host OS gives the VM process a timeslice.
    4073
    4174
    4275
    43 ==
    44 
    45 
    46 

© 2023 Oracle
ContactPrivacy policyTerms of Use