When the Oracle VirtualBox graphical user interface (GUI) is opened and a VM is started, at least two processes are running:
- VBoxSVC – the first client process that starts automatically and keeps running in the background. The service is responsible for bookkeeping, maintaining the state of all VMs, and for providing communication between VirtualBox components. This communication is implemented via COM/XPCOM.
- VirtualBox – the GUI process based on a cross-platform QT library. When a guest VM starts, this process is started automatically. It can start with a startvm option or without any option. When this process starts with no –startvm option, it plays the role of the VirtualBox manager, displaying the VMs and their settings and communicating the settings and the state changes to the VBoxSVC process. When it starts with the startvm option, it loads the actual hypervisor with the help of the VMM library and then runs the VM and provides the input and output for the guest VM.
VirtualBox also runs many internal processes and separate components. Here are the most important ones:
- IPRT: a portable library, this component is invoked whenever VirtualBox accesses host operating features with the help of this library forcross-platform portability.
- VMM: an integral part of the hypervisor.
- REM (recompiled execution monitor): provides software emulation of CPU instructions.
- EM (execution manager): manages and controls the execution of guest VM code.
- HWACCM (hardware acceleration manager): provides support for VT-x and AMD-V.
- PGM (page manager): the guest VM paging activity is taken care of bythis component.
- TM (time manager): handles timers and all the aspects oftime inside guests.
- CFGM (configuration manager): provides all the settings related to the guest VM and all emulated devices stored in a tree structure.
- SSM (saved state manager): saves and loads the VM state.
- VirtualBox: responsible for emulating many devices toprovide the hardware environment that various guests need.
- Main: the only public API that VirtualBox provides and is responsible for tying all the preceding components together. This API is used by all the client processes because client processes cannot access the hypervisor directly