1 | /* $Id: VBox-doc.c 89790 2021-06-19 14:14:59Z vboxsync $ */
|
---|
2 | /** @file
|
---|
3 | * VirtualBox Top Level Documentation File.
|
---|
4 | */
|
---|
5 |
|
---|
6 | /*
|
---|
7 | * Copyright (C) 2006-2020 Oracle Corporation
|
---|
8 | *
|
---|
9 | * This file is part of VirtualBox Open Source Edition (OSE), as
|
---|
10 | * available from http://www.virtualbox.org. This file is free software;
|
---|
11 | * you can redistribute it and/or modify it under the terms of the GNU
|
---|
12 | * General Public License (GPL) as published by the Free Software
|
---|
13 | * Foundation, in version 2 as it comes in the "COPYING" file of the
|
---|
14 | * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
---|
15 | * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
---|
16 | */
|
---|
17 |
|
---|
18 |
|
---|
19 | /** @mainpage VirtualBox
|
---|
20 | *
|
---|
21 | * (add introduction here)
|
---|
22 | *
|
---|
23 | * @section pg_main_comp Components
|
---|
24 | *
|
---|
25 | * - VM / @ref pg_vmm "VMM" / GVM / @ref pg_gvmm "GVMM" - Virtual Machine
|
---|
26 | * Monitor.
|
---|
27 | * - @ref pg_cfgm
|
---|
28 | * - @ref pg_cpum
|
---|
29 | * - @ref pg_dbgf
|
---|
30 | * - @ref pg_dbgf_addr_space
|
---|
31 | * - @ref pg_dbgf_vmcore
|
---|
32 | * - @ref pg_dbgf_module
|
---|
33 | * - @ref pg_dbgc
|
---|
34 | * - VBoxDbg - Debugger GUI (Qt).
|
---|
35 | * - @ref grp_dis
|
---|
36 | * - @ref pg_em
|
---|
37 | * - @ref pg_gim
|
---|
38 | * - @ref pg_hm
|
---|
39 | * - @ref pg_iem
|
---|
40 | * - @ref pg_nem
|
---|
41 | * - @ref pg_gmm
|
---|
42 | * - @ref pg_mm
|
---|
43 | * - @ref pg_pgm
|
---|
44 | * - @ref pg_pgm_phys
|
---|
45 | * - @ref pg_pgm_pool
|
---|
46 | * - @ref pg_selm
|
---|
47 | * - @ref pg_iom
|
---|
48 | * - @ref pg_pdm
|
---|
49 | * - Devices / USB Devices, Drivers and their public interfaces.
|
---|
50 | * - Async I/O Completion API.
|
---|
51 | * - Async Task API.
|
---|
52 | * - Critical Section API.
|
---|
53 | * - Queue API.
|
---|
54 | * - Thread API.
|
---|
55 | * - @ref pg_pdm_block_cache
|
---|
56 | * - @ref pg_ssm
|
---|
57 | * - @ref pg_stam
|
---|
58 | * - @ref pg_tm
|
---|
59 | * - @ref pg_trpm
|
---|
60 | * - VMM docs:
|
---|
61 | * - @ref pg_vmm_guideline
|
---|
62 | * - @ref pg_raw
|
---|
63 | * - Pluggable Components (via PDM).
|
---|
64 | * - DevPCArch - PC Architecture Device (chipset, legacy ++).
|
---|
65 | * - DevPCBios - Basic Input Output System.
|
---|
66 | * - DevDMAC - DMA Controller.
|
---|
67 | * - DevPIC - Programmable Interrupt Controller.
|
---|
68 | * - DevPIT - Programmable Interval Timer (i8254).
|
---|
69 | * - DevRTC - Real Time Clock.
|
---|
70 | * - DevVGA - Video Graphic Array.
|
---|
71 | * - DevPCI - Peripheral Component Interface (Bus).
|
---|
72 | * - VBoxDev - Special PCI Device which serves as an interface between
|
---|
73 | * the VMM and the guest OS for the additions.
|
---|
74 | * - @ref pg_pdm_audio "Audio":
|
---|
75 | * - DevHda - Intel High Definition Audio Device Emulation.
|
---|
76 | * - DevIchAc97 - ICH AC'97 Device Emulation.
|
---|
77 | * - DevSB16 - SoundBlaster 16 Device Emulation.
|
---|
78 | * - DrvAudio - Intermediate driver.
|
---|
79 | * - DrvHostAudioAlsa - ALSA Host Audio Driver (Linux).
|
---|
80 | * - DrvHostAudioCoreAudio - Core Audio Host Audio Driver (macOS).
|
---|
81 | * - DrvHostAudioDebug - Debug Backend Driver.
|
---|
82 | * - DrvHostAudioDSound - DirectSound Host Audio Driver (Windows).
|
---|
83 | * - DrvHostAudioNull - NULL Backend Driver.
|
---|
84 | * - DrvHostAudioOss - Open Sound System Host Audio Driver (Linux,
|
---|
85 | * Solaris, ++).
|
---|
86 | * - DrvHostAudioPulseAudio - PulseAudio Host Audio Driver (Linux).
|
---|
87 | * - DrvHostAudioValidationKit - Validation Kit Test Driver.
|
---|
88 | * - DrvHostAudioWasApi - Windows Audio Session API Host Audio Driver.
|
---|
89 | * - Networking:
|
---|
90 | * - DevPCNet - AMD PCNet Device Emulation.
|
---|
91 | * - DevE1000 - Intel E1000 Device Emulation.
|
---|
92 | * - DevEEPROM - Intel E1000 EPROM Device Emulation.
|
---|
93 | * - SrvINetNetR0 - Internal Networking Ring-0 Service.
|
---|
94 | * - DevINIP - IP Stack Service for the internal networking.
|
---|
95 | * - DrvIntNet - Internal Networking Driver.
|
---|
96 | * - DrvNetSniffer - Wireshark Compatible Sniffer Driver (pass thru).
|
---|
97 | * - DrvNAT - Network Address Translation Driver.
|
---|
98 | * - DrvTAP - Host Interface Networking Driver.
|
---|
99 | * - Storage:
|
---|
100 | * - DevATA - ATA ((E)IDE) Device Emulation.
|
---|
101 | * - @ref pg_dev_ahci
|
---|
102 | * - DevFDC - Floppy Controller Device Emulation.
|
---|
103 | * - DrvBlock - Intermediate block driver.
|
---|
104 | * - DrvHostBase - Common code for the host drivers.
|
---|
105 | * - DrvHostDVD - Host DVD drive driver.
|
---|
106 | * - DrvHostFloppy - Host floppy drive driver.
|
---|
107 | * - DrvHostRawDisk - Host raw disk drive driver.
|
---|
108 | * - DrvMediaISO - ISO media driver.
|
---|
109 | * - DrvRawImage - Raw image driver (floppy images etc).
|
---|
110 | * - DrvVD - Intermediate Virtual Drive (Media) driver.
|
---|
111 | * - DrvVDI - VirtualBox Drive Image Container Driver.
|
---|
112 | * - DrvVmdk - VMDK Drive Image Container Driver.
|
---|
113 | * - USB:
|
---|
114 | * - @ref pg_dev_ohci
|
---|
115 | * - @ref pg_dev_ehci
|
---|
116 | * - @ref pg_dev_vusb
|
---|
117 | * - @ref pg_dev_vusb_old
|
---|
118 | * - Host Drivers.
|
---|
119 | * - SUPDRV - The Support driver (aka VBoxDrv).
|
---|
120 | * - @ref pg_sup
|
---|
121 | * - @ref pg_netflt
|
---|
122 | * - @ref pg_netadp
|
---|
123 | * - VBoxUSB - The USB support driver.
|
---|
124 | * - @ref pg_netflt
|
---|
125 | * - @ref pg_rawpci
|
---|
126 | * - Host Services.
|
---|
127 | * - @ref pg_hostclip
|
---|
128 | * - Shared Folders.
|
---|
129 | * - @ref pg_svc_guest_properties
|
---|
130 | * - @ref pg_svc_guest_control
|
---|
131 | * - Guest Additions.
|
---|
132 | * - VBoxGuest.
|
---|
133 | * - @ref pg_guest_lib
|
---|
134 | * - @ref pg_vgsvc
|
---|
135 | * - @ref pg_vgsvc_timesync
|
---|
136 | * - @ref pg_vgsvc_vminfo
|
---|
137 | * - @ref pg_vgsvc_vmstats
|
---|
138 | * - @ref pg_vgsvc_gstctrl
|
---|
139 | * - @ref pg_vgsvc_pagesharing
|
---|
140 | * - @ref pg_vgsvc_memballoon
|
---|
141 | * - @ref pg_vgsvc_cpuhotplug
|
---|
142 | * - @ref pg_vgsvc_automount
|
---|
143 | * - @ref pg_vgsvc_clipboard
|
---|
144 | * - VBoxControl.
|
---|
145 | * - VBoxVideo.
|
---|
146 | * - crOpenGL.
|
---|
147 | * - VBoxClient / VBoxTray.
|
---|
148 | * - pam.
|
---|
149 | * - ...
|
---|
150 | * - Network Services:
|
---|
151 | * - @ref pg_net_dhcp
|
---|
152 | * - NAT
|
---|
153 | * - @ref pg_main
|
---|
154 | * - @ref pg_main_events
|
---|
155 | * - @ref pg_vrdb_usb
|
---|
156 | * - Frontends:
|
---|
157 | * - VirtualBox - The default Qt-based GUI.
|
---|
158 | * - VBoxHeadless - The headless frontend.
|
---|
159 | * - VBoxManage - The CLI.
|
---|
160 | * - VBoxShell - An interactive shell written in python.
|
---|
161 | * - VBoxSDL - A very simple GUI.
|
---|
162 | * - VBoxBFE - A bare metal edition which does not use COM/XPCOM (barely
|
---|
163 | * maintained atm).
|
---|
164 | * - IPRT - Runtime Library for hiding host OS differences.
|
---|
165 | * - Validation Kit:
|
---|
166 | * - @ref pg_validationkit_guideline
|
---|
167 | * - @ref pg_bs3kit
|
---|
168 | * - @ref pg_vbox_guideline
|
---|
169 | *
|
---|
170 | * @todo Make links to the components.
|
---|
171 | *
|
---|
172 | *
|
---|
173 | *
|
---|
174 | * @section Execution Contexts
|
---|
175 | *
|
---|
176 | * VirtualBox defines a number of different execution context, this can be
|
---|
177 | * confusing at first. So, to start with take a look at this diagram:
|
---|
178 | *
|
---|
179 | * @image html VMMContexts.png
|
---|
180 | *
|
---|
181 | * Context definitions:
|
---|
182 | * - Host context (HC) - This is the context where the host OS runs and
|
---|
183 | * runs VirtualBox within it. The absense of IN_RC and IN_GUEST
|
---|
184 | * indicates that we're in HC. IN_RING0 indicates ring-0 (kernel) and
|
---|
185 | * IN_RING3 indicates ring-3.
|
---|
186 | * - Raw-mode Context (RC) - This is the special VMM context where we
|
---|
187 | * execute the guest code directly on the CPU. Kernel code is patched
|
---|
188 | * and execute in ring-1 instead of ring-0 (ring compression). Ring-3
|
---|
189 | * code execute unmodified. Only VMMs use ring-1, so we don't need to
|
---|
190 | * worry about that (it's guarded against in the scheduler (EM)). We can
|
---|
191 | * in theory run ring-2 there, but since practially only only OS/2 uses
|
---|
192 | * ring-2, it is of little importance. The macro IN_RC indicates that
|
---|
193 | * we're compiling something for RC.
|
---|
194 | * Note! This used to be called GC (see below) earlier, so a bunch of RC
|
---|
195 | * things are using GC markers.
|
---|
196 | * - Guest Context (GC) - This is where the guest code is executed. When
|
---|
197 | * compiling, IN_GUEST indicates that it's for GC. IN_RING0 and
|
---|
198 | * IN_RING3 are also set when applicable, these are accompanied by
|
---|
199 | * IN_GUEST_R0 and IN_GUEST_R3 respecitively.
|
---|
200 | * - Intermediate context - This is a special memory context used within
|
---|
201 | * the world switchers (HC -> RC and back), it features some identity
|
---|
202 | * mapped code pages so we can switch to real mode if necessary.
|
---|
203 | *
|
---|
204 | */
|
---|
205 |
|
---|