File: technical-components.dita

package info (click to toggle)
virtualbox 7.1.12-dfsg-2
  • links: PTS, VCS
  • area: contrib
  • in suites: sid
  • size: 565,672 kB
  • sloc: ansic: 2,330,854; cpp: 2,193,228; asm: 230,777; python: 223,895; xml: 86,771; sh: 25,541; makefile: 8,158; perl: 5,697; java: 5,337; cs: 4,872; pascal: 1,782; javascript: 1,692; objc: 1,131; lex: 931; php: 906; sed: 899; yacc: 707
file content (223 lines) | stat: -rw-r--r-- 9,651 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic xml:lang="en-us" id="technical-components">
  <title><ph conkeyref="vbox-conkeyref-phrases/product-name"/> Executables and Components</title>
  <body>
    <p>
      <ph conkeyref="vbox-conkeyref-phrases/product-name"/> was designed to be modular and flexible. When the
      <ph conkeyref="vbox-conkeyref-phrases/product-name"/> graphical user interface (GUI) is opened and a VM
      is started, at least the following three processes are running:
    </p>
    <ul>
      <li>
        <p><userinput>VBoxSVC</userinput>, the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> service process
          which always runs in the background. This process is started
          automatically by the first <ph conkeyref="vbox-conkeyref-phrases/product-name"/> client process and
          exits a short time after the last client exits. The first
          <ph conkeyref="vbox-conkeyref-phrases/product-name"/> service can be <ph conkeyref="vbox-conkeyref-phrases/vbox-mgr"/>,
          <userinput>VBoxManage</userinput>,
          <userinput>VBoxHeadless</userinput>, the web service amongst
          others. The service is responsible for bookkeeping,
          maintaining the state of all VMs, and for providing
          communication between <ph conkeyref="vbox-conkeyref-phrases/product-name"/> components. This
          communication is implemented using COM/XPCOM.
        </p>
        <note>
          <p>
            When we refer to <i>clients</i> here, we mean
            the local clients of a particular <userinput>VBoxSVC</userinput>
            server process, not clients in a network. <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
            employs its own client/server design to allow its processes
            to cooperate, but all these processes run under the same
            user account on the host operating system, and this is
            totally transparent to the user.
          </p>
        </note>
      </li>
      <li>
        <p>
          The GUI process, <userinput>VirtualBoxVM</userinput>, a client
          application based on the cross-platform Qt library. When
          started without the <codeph>--startvm</codeph> option, this
          application acts as <ph conkeyref="vbox-conkeyref-phrases/vbox-mgr"/>, displaying the VMs and their
          settings. It then communicates settings and state changes to
          <userinput>VBoxSVC</userinput> and also reflects changes effected
          through other means, such as the <userinput>VBoxManage</userinput>
          command.
        </p>
      </li>
      <li>
        <p>
          If the <userinput>VirtualBoxVM</userinput> client application is
          started with the <codeph>--startvm</codeph> argument, it loads
          the VMM library which includes the actual hypervisor and then
          runs a virtual machine and provides the input and output for
          the guest.
        </p>
      </li>
    </ul>
    <p> Any <ph conkeyref="vbox-conkeyref-phrases/product-name"/> front end, or client, will
      communicate with the service process and can both control and reflect the current state. For
      example, either the VM selector or the VM window or VBoxManage can be used to pause the
      running VM, and other components will always reflect the changed state. </p>
    <p>
      The <ph conkeyref="vbox-conkeyref-phrases/product-name"/> GUI application, called <ph conkeyref="vbox-conkeyref-phrases/vbox-mgr"/>, is only one
      of several available front ends, or clients. The complete list
      shipped with <ph conkeyref="vbox-conkeyref-phrases/product-name"/> is as follows:
    </p>
    <ul>
      <li>
        <p><userinput>VirtualBoxVM</userinput>: The Qt front end implementing
          <ph conkeyref="vbox-conkeyref-phrases/vbox-mgr"/> and running VMs.
        </p>
      </li>
      <li>
        <p><userinput>VBoxManage</userinput>: A less user-friendly but more
          powerful alternative. See <xref href="vboxmanage.dita">VBoxManage</xref>.
        </p>
      </li>
      <li>
        <p><userinput>VBoxHeadless</userinput>: A VM front end which does not
          directly provide any video output and keyboard or mouse input,
          but enables redirection through the VirtualBox Remote Desktop
          Extension. See <xref href="vboxheadless.dita"/>.
        </p>
      </li>
      <li>
        <p><userinput>vboxwebsrv</userinput>: The <ph conkeyref="vbox-conkeyref-phrases/product-name"/> web service
          process which enables control of an <ph conkeyref="vbox-conkeyref-phrases/product-name"/> host
          remotely. This is described in detail in the <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
          Software Development Kit (SDK) reference. See
          <xref href="VirtualBoxAPI.dita"/>.
        </p>
      </li>
      <li>
        <p>
          The <ph conkeyref="vbox-conkeyref-phrases/product-name"/> Python shell: A Python alternative to
          <userinput>VBoxManage</userinput>. This is also described in the
          SDK reference.
        </p>
      </li>
    </ul>
    <p>
      Internally, <ph conkeyref="vbox-conkeyref-phrases/product-name"/> consists of many more or less separate
      components. You may encounter these when analyzing <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
      internal error messages or log files. These include the following:
    </p>
    <ul>
      <li>
        <p>
          IPRT: A portable runtime library which abstracts file access,
          threading, and string manipulation. Whenever <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
          accesses host operating features, it does so through this
          library for cross-platform portability.
        </p>
      </li>
      <li>
        <p>
          VMM (Virtual Machine Monitor): The heart of the hypervisor.
        </p>
      </li>
      <li>
        <p>
          EM (Execution Manager): Controls execution of guest code.
        </p>
      </li>
      <li>
        <p>
          TRPM (Trap Manager): Intercepts and processes guest traps and
          exceptions.
        </p>
      </li>
      <li>
        <p>
          HM (Hardware Acceleration Manager): Provides support for VT-x
          and AMD-V.
        </p>
      </li>
      <li>
        <p>
          GIM (Guest Interface Manager): Provides support for various
          paravirtualization interfaces to the guest.
        </p>
      </li>
      <li>
        <p>
          PDM (Pluggable Device Manager): An abstract interface between
          the VMM and emulated devices which separates device
          implementations from VMM internals and makes it easy to add
          new emulated devices. Through PDM, third-party developers can
          add new virtual devices to <ph conkeyref="vbox-conkeyref-phrases/product-name"/> without having to
          change <ph conkeyref="vbox-conkeyref-phrases/product-name"/> itself.
        </p>
      </li>
      <li>
        <p>
          PGM (Page Manager): A component that controls guest paging.
        </p>
      </li>
      <li>
        <p>
          TM (Time Manager): Handles timers and all aspects of time
          inside guests.
        </p>
      </li>
      <li>
        <p>
          CFGM (Configuration Manager): Provides a tree structure which
          holds configuration settings for the VM and all emulated
          devices.
        </p>
      </li>
      <li>
        <p>
          SSM (Saved State Manager): Saves and loads VM state.
        </p>
      </li>
      <li>
        <p>
          VUSB (Virtual USB): A USB layer which separates emulated USB
          controllers from the controllers on the host and from USB
          devices. This component also enables remote USB.
        </p>
      </li>
      <li>
        <p>
          DBGF (Debug Facility): A built-in VM debugger.
        </p>
      </li>
      <li>
        <p>
          <ph conkeyref="vbox-conkeyref-phrases/product-name"/> emulates a number of devices to provide the
          hardware environment that various guests need. Most of these
          are standard devices found in many PC compatible machines and
          widely supported by guest operating systems. For network and
          storage devices in particular, there are several options for
          the emulated devices to access the underlying hardware. These
          devices are managed by PDM.
        </p>
      </li>
      <li>
        <p>
          Guest Additions for various guest operating systems. This is
          code that is installed from within a virtual machine. See
          <xref href="guestadditions.dita">Guest Additions</xref>.
        </p>
      </li>
      <li>
        <p>
          The "Main" component is special. It ties all the above bits
          together and is the only public API that <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
          provides. All the client processes listed above use only this
          API and never access the hypervisor components directly. As a
          result, third-party applications that use the <ph conkeyref="vbox-conkeyref-phrases/product-name"/>
          Main API can rely on the fact that it is always well-tested
          and that all capabilities of <ph conkeyref="vbox-conkeyref-phrases/product-name"/> are fully exposed.
          It is this API that is described in the <ph conkeyref="vbox-conkeyref-phrases/product-name"/> SDK.
          See <xref href="VirtualBoxAPI.dita#VirtualBoxAPI"/>.
        </p>
      </li>
    </ul>
  </body>
  
</topic>