1 | <?xml version="1.0" encoding="UTF-8"?>
|
---|
2 | <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
|
---|
3 | "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
|
---|
4 | <chapter id="TechnicalBackground">
|
---|
5 | <title>Sous-bassements techniques</title>
|
---|
6 |
|
---|
7 | <para>Le contenu de ce chapitre n'est pas indispensable pour utiliser
|
---|
8 | VirtualBox avec succès. Nous indiquons ce qui suit à titre informatif pour
|
---|
9 | ceux qui sont plus familiers de la technologie et de l'architecture informatique
|
---|
10 | et qui veulent en savoir davantage sur la manière dont fonctionne VirtualBox "sous
|
---|
11 | le capot".</para>
|
---|
12 |
|
---|
13 | <sect1 id="vboxconfigdata">
|
---|
14 | <title>Où VirtualBox stocke ses fichiers</title>
|
---|
15 |
|
---|
16 | <para>Dans VirtualBox, une machine virtuelle et ses paramètres sont
|
---|
17 | décrits dans un fichier de paramètres de la machine virtuelle, au format
|
---|
18 | XML. De plus, la plupart des machines virtuelles ont un ou plusieurs
|
---|
19 | disques durs qui leur sont en général présentés par des images de disque
|
---|
20 | (comme au format VDI). L'endroit où sont stockés tous ces fichiers
|
---|
21 | dépend de la version de VirtualBox qui a créé la machine.</para>
|
---|
22 |
|
---|
23 | <sect2>
|
---|
24 | <title>Machines créées par VirtualBox version 4.0 ou supérieur</title>
|
---|
25 |
|
---|
26 | <para>À partir de la version 4.0, par défaut, chaque machine virtuelle
|
---|
27 | dispose d'un répertoire sur votre ordinateur hôte (où tous les fichiers
|
---|
28 | de cette machine sont stockés -- le fichier des paramètres XML (avec une
|
---|
29 | extension de fichier <computeroutput>.vbox</computeroutput>) et ses
|
---|
30 | images de disque.</para>
|
---|
31 |
|
---|
32 | <para>Par défaut, ce "dossier machine" se trouve dans un dossier ordinaire
|
---|
33 | appelé "VirtualBox VMs", créé par VirtualBox dans le dossier personnel
|
---|
34 | de l'utilisateur du système actuel. L'emplacement de ce répertoire personnel
|
---|
35 | dépend des conventions du système d'exploitation hôte :</para>
|
---|
36 |
|
---|
37 | <itemizedlist>
|
---|
38 | <listitem>
|
---|
39 | <para>Sur Windows, il s'agit de
|
---|
40 | <computeroutput>%HOMEDRIVE%%HOMEPATH%</computeroutput>; en général
|
---|
41 | quelque chose comme <computeroutput>C:\Documents and
|
---|
42 | Settings\NomUtilisateur\</computeroutput>.</para>
|
---|
43 | </listitem>
|
---|
44 |
|
---|
45 | <listitem>
|
---|
46 | <para>Sur Mac OS X, il s'agit de
|
---|
47 | <computeroutput>/Users/nomutilisateur</computeroutput>.</para>
|
---|
48 | </listitem>
|
---|
49 |
|
---|
50 | <listitem>
|
---|
51 | <para>Sur Linux et Solaris, il s'agit de
|
---|
52 | <computeroutput>/home/nomutilisateur</computeroutput>.</para>
|
---|
53 | </listitem>
|
---|
54 | </itemizedlist>
|
---|
55 |
|
---|
56 | <para>Par simplicité, nous abrègerons cela ci-dessous par
|
---|
57 | <computeroutput>$HOME</computeroutput>. En utilisant cette convention, le
|
---|
58 | dossier ordinaire de toutes les machines virtuelles est
|
---|
59 | <computeroutput>$HOME/VirtualBox VMs</computeroutput>.</para>
|
---|
60 |
|
---|
61 | <para>Par exemple, quand vous créez une machine virtuelle qui s'appelle
|
---|
62 | "VM Exemple", vous verrez que VirtualBox crée<orderedlist>
|
---|
63 | <listitem>
|
---|
64 | <para>le dossier <computeroutput>$HOME/VirtualBox VMs/VM Exemple/</computeroutput>
|
---|
65 | et, dans ce dossier,</para>
|
---|
66 | </listitem>
|
---|
67 |
|
---|
68 | <listitem>
|
---|
69 | <para>le fichier des paramètres <computeroutput>VM Exemple.vbox</computeroutput> et</para>
|
---|
70 | </listitem>
|
---|
71 |
|
---|
72 | <listitem>
|
---|
73 | <para>l'image de disque virtuel <computeroutput>VM Example.vdi</computeroutput>.</para>
|
---|
74 | </listitem>
|
---|
75 | </orderedlist></para>
|
---|
76 |
|
---|
77 | <para>C'est le rangement par défaut si vous utilisez l'assistant "Créer
|
---|
78 | une nouvelle machine virtuelle" comme décrit au <xref linkend="gui-createvm" />. Une fois que
|
---|
79 | vous commencez à travailler avec la VM, des fichiers supplémentaires
|
---|
80 | apparaîtront : vous trouverez des fichiers journaux dans un
|
---|
81 | sous-dossier qui s'appelle
|
---|
82 | <computeroutput>Logs</computeroutput>, et une fois que vous aurez pris
|
---|
83 | des instantanés, ils apparaîtront dans un sous-dossier
|
---|
84 | <computeroutput>Snapshots</computeroutput>. Pour chaque VM, vous pouvez
|
---|
85 | modifier l'emplacement de son dossier d'instantanés dans les paramètres
|
---|
86 | de la VM.</para>
|
---|
87 |
|
---|
88 | <para>Vous pouvez changer le dossier machine par défaut en sélectionnant
|
---|
89 | "Préférences" du menu "Fichier" de la fenêtre principale de VirtualBox.
|
---|
90 | Puis, dans la fenêtre qui apparaît, cliquez sur l'onglet "Général". Sinon,
|
---|
91 | utilisez <computeroutput>VBoxManage setproperty
|
---|
92 | machinefolder</computeroutput> ;; voir le <xref
|
---|
93 | linkend="vboxmanage-setproperty" />.</para>
|
---|
94 | </sect2>
|
---|
95 |
|
---|
96 | <sect2>
|
---|
97 | <title>Machines créées par des versions de VirtualBox antérieures à 4.0</title>
|
---|
98 |
|
---|
99 | <para>Si vous avez mis à jour vers VirtualBox 4.0 en partant d'une ancienne
|
---|
100 | version de VirtualBox, vous aurez probablement vos fichiers de paramètres
|
---|
101 | et les disques selon l'organisation du système de fichiers d'alors.</para>
|
---|
102 |
|
---|
103 | <para>Avant la version 4.0, VirtualBox séparait les fichiers de
|
---|
104 | paramètrage de la machine des images de disque virtuel. Les fichiers de
|
---|
105 | paramétrage de la machine avaient une extension
|
---|
106 | <computeroutput>.xml</computeroutput> et se trouvaient dans un dossier
|
---|
107 | appelé "Machines" dans le répertoire de configuration global de VirtualBox
|
---|
108 | (voir la prochaine section). Donc, par exemple, sur Linux, il s'agissait
|
---|
109 | du répertoire caché <computeroutput>$HOME/.VirtualBox/Machines</computeroutput>.
|
---|
110 | Le dossier par défaut des disques durs s'appelait "HardDisks" et se trouvait
|
---|
111 | également dans le dossier <computeroutput>.VirtualBox</computeroutput>.
|
---|
112 | L'utilisateur pouvait changer les deux endroits dans les préférences
|
---|
113 | globales (le concept de "dossier par défaut des disques durs" a été
|
---|
114 | abandonné avec VirtualBox 4.0, vu que les images de disque se trouvent
|
---|
115 | désormais par défaut dans le dossier de chaque machine.)</para>
|
---|
116 |
|
---|
117 | <para>L'ancienne organisation avait plusieurs gros inconvénients.<orderedlist>
|
---|
118 | <listitem>
|
---|
119 | <para>Il était très difficile de déplacer une machine virtuelle
|
---|
120 | d'un hôte à l'autre car les fichiers concernés ne se trouvaient pas
|
---|
121 | dans le même dossier. De plus, les médias virtuels de toutes les
|
---|
122 | machines étaient enregistrés avec un registre global dans le
|
---|
123 | fichier des paramètres transversaux de VirtualBox.
|
---|
124 | (<computeroutput>$HOME/.VirtualBox/VirtualBox.xml</computeroutput>).</para>
|
---|
125 |
|
---|
126 | <para>Pour déplacer une machine sur un autre hôte, il n'était donc
|
---|
127 | pas suffisant de déplacer le fichier des paramètres XML et les images
|
---|
128 | de disque (qui se trouvaient à des endroits différents), mais
|
---|
129 | il fallait en plus copier méticuleusement les entrées du disque
|
---|
130 | dur à partir du XML du registre de médias global, ce qui était
|
---|
131 | presque impossible si la machine avait des instantanés et, donc, des
|
---|
132 | images de différenciation.</para>
|
---|
133 | </listitem>
|
---|
134 |
|
---|
135 | <listitem>
|
---|
136 | <para>Le stockage des images de disque virtuel, qui peuvent beaucoup
|
---|
137 | grossir, sous le répertoire caché
|
---|
138 | <computeroutput>.VirtualBox</computeroutput> (au moins sur les hôtes
|
---|
139 | Linux et Solaris) amenait de nombreux utilisateurs à se demander
|
---|
140 | ce qu'était devenu leur espace disque.</para>
|
---|
141 | </listitem>
|
---|
142 | </orderedlist></para>
|
---|
143 |
|
---|
144 | <para>Si les nouvelles VMs créées avec VirtualBox 4.0 ou supérieur
|
---|
145 | respectent la nouvelle organisation, pour une compatibilité maximum, les
|
---|
146 | anciennes VMs <emphasis>ne sont pas</emphasis> converties en nouvelle
|
---|
147 | organisation. Sans cela, les paramètres de la machine seraient immanquablement
|
---|
148 | cassés si l'utilisateur rétrogradait de la 4.0 à une version plus ancienne
|
---|
149 | de VirtualBox.</para>
|
---|
150 | </sect2>
|
---|
151 |
|
---|
152 | <sect2>
|
---|
153 | <title>Données globales de configuration</title>
|
---|
154 |
|
---|
155 | <para>Outre les fichiers des machines virtuelles, VirtualBox gère des
|
---|
156 | données globales de configuration. Sur Linux et Solaris, depuis VirtualBox 4.3
|
---|
157 | elles se trouvent dans le répertoire caché <computeroutput>$HOME/.config/VirtualBox</computeroutput>
|
---|
158 | même si <computeroutput>$HOME/.VirtualBox</computeroutput> sera utilisé
|
---|
159 | s'il existe pour rester compatible avec les anciennes versions ; sur
|
---|
160 | un Mac, elles se trouvent
|
---|
161 | dans <computeroutput>$HOME/Library/VirtualBox</computeroutput>.</para>
|
---|
162 |
|
---|
163 | <para>VirtualBox crée automatiquement ce répertoire de configuration si
|
---|
164 | nécessaire. Vous pouvez éventuellement fournir un répertoire de configuration
|
---|
165 | alternatif en réglant la variable d'environnement
|
---|
166 | <computeroutput><literal>VBOX_USER_HOME</literal></computeroutput> ou,
|
---|
167 | en plus, sur Linux ou Solaris, en utilisant la variable standard
|
---|
168 | <computeroutput><literal>XDG_CONFIG_HOME</literal></computeroutput> (car le
|
---|
169 | fichier des paramètres globaux de <computeroutput>VirtualBox.xml</computeroutput>
|
---|
170 | pointe vers tous les autres fichiers de configuration, ce qui permet
|
---|
171 | de naviguer entre plusieurs configurations de VirtualBox.</para>
|
---|
172 |
|
---|
173 | <para>VirtualBox stocke essentiellement dans ce répertoire son fichier
|
---|
174 | de paramètres globaux, un autre fichier XML appelé
|
---|
175 | <computeroutput>VirtualBox.xml</computeroutput>. Cela comprend des
|
---|
176 | options de configuration globales et la liste des machines virtuelles
|
---|
177 | enregistrées avec des pointeurs vers leurs fichiers de paramètres XML.
|
---|
178 | (Ni l'emplacement du fichier ni son répertoire n'ont changé avec
|
---|
179 | VirtualBox 4.0.)</para>
|
---|
180 |
|
---|
181 | <para>Avant VirtualBox 4.0, tous les médias virtuels (fichiers images
|
---|
182 | de disque) étaient également stockés dans un registre global de ce
|
---|
183 | fichier de paramètres. Par compatibilité, ce registre de médias existe
|
---|
184 | toujours si vous mettez à jour VirtualBox et s'il y a des médias
|
---|
185 | issus de machines créées avec une version inférieure à 4.0. Si vous
|
---|
186 | n'avez pas de telles machines, il n'y aura pas de registre de médias
|
---|
187 | global ; avec VirtualBox 4.0, chaque fichier XML d'une machine a
|
---|
188 | son propre registre de médias.</para>
|
---|
189 |
|
---|
190 | <para>De même, avant VirtualBox 4.0, le dossier "Machines" par défaut
|
---|
191 | et le dossier "HardDisks" par défaut se trouvaient dans le répertoire de
|
---|
192 | configuration de VirtualBox (par exemple, <computeroutput>$HOME/.VirtualBox/Machines</computeroutput>
|
---|
193 | sur Linux). Si vous mettez à jour à partir d'une version de VirtualBox
|
---|
194 | inférieure à la 4.0, les fichiers de ce répertoire ne sont pas déplacés
|
---|
195 | automatiquement afin de ne pas casser la rétro compatibilité.</para>
|
---|
196 | </sect2>
|
---|
197 |
|
---|
198 | <sect2>
|
---|
199 | <title>Résumé des modifications de la configuration de 4.0</title>
|
---|
200 |
|
---|
201 | <para>La table suivante donne un bref apperçu des changements de configuration
|
---|
202 | entre les versions anciennes et la 4.0 ou ultérieure :</para>
|
---|
203 |
|
---|
204 | <table>
|
---|
205 | <title>Changements de configuration en 4.0 et ultérieure</title>
|
---|
206 |
|
---|
207 | <tgroup cols="3">
|
---|
208 | <tbody>
|
---|
209 | <row>
|
---|
210 | <entry></entry>
|
---|
211 |
|
---|
212 | <entry><emphasis role="bold">Avant 4.0</emphasis></entry>
|
---|
213 |
|
---|
214 | <entry><emphasis role="bold">4.0 ou supérieur</emphasis></entry>
|
---|
215 | </row>
|
---|
216 |
|
---|
217 | <row>
|
---|
218 | <entry>Dossier par défaut des machines</entry>
|
---|
219 |
|
---|
220 | <entry><computeroutput>$HOME/.VirtualBox/Machines</computeroutput></entry>
|
---|
221 |
|
---|
222 | <entry><computeroutput>$HOME/VirtualBox
|
---|
223 | VMs</computeroutput></entry>
|
---|
224 | </row>
|
---|
225 |
|
---|
226 | <row>
|
---|
227 | <entry>Emplacement des images de disque</entry>
|
---|
228 |
|
---|
229 | <entry><computeroutput>$HOME/.VirtualBox/HardDisks</computeroutput></entry>
|
---|
230 |
|
---|
231 | <entry>Dans chaque dossier de machine</entry>
|
---|
232 | </row>
|
---|
233 |
|
---|
234 | <row>
|
---|
235 | <entry>Extension des fichiers de paramètres de la machine</entry>
|
---|
236 |
|
---|
237 | <entry><computeroutput>.xml</computeroutput></entry>
|
---|
238 |
|
---|
239 | <entry><computeroutput>.vbox</computeroutput></entry>
|
---|
240 | </row>
|
---|
241 |
|
---|
242 | <row>
|
---|
243 | <entry>Registre de médias</entry>
|
---|
244 |
|
---|
245 | <entry>Fichier <computeroutput>VirtualBox.xml</computeroutput>
|
---|
246 | global</entry>
|
---|
247 |
|
---|
248 | <entry>Chaque fichier des paramètres d'une machine</entry>
|
---|
249 | </row>
|
---|
250 |
|
---|
251 | <row>
|
---|
252 | <entry>Enregistrement des médias</entry>
|
---|
253 |
|
---|
254 | <entry>Ouverture/fermeture explicite obligatoire</entry>
|
---|
255 |
|
---|
256 | <entry>Automatique après la connexion</entry>
|
---|
257 | </row>
|
---|
258 | </tbody>
|
---|
259 | </tgroup>
|
---|
260 | </table>
|
---|
261 | </sect2>
|
---|
262 |
|
---|
263 | <sect2>
|
---|
264 | <title>Fichiers XML de VirtualBox</title>
|
---|
265 |
|
---|
266 | <para>VirtualBox utilise l'XML tant pour les fichiers des paramètres
|
---|
267 | de la machine que pour le fichier de configuration global,
|
---|
268 | <computeroutput>VirtualBox.xml</computeroutput>.</para>
|
---|
269 |
|
---|
270 | <para>Tous les fichiers XML de VirtualBox sont versionnés. Quand un nouveau
|
---|
271 | fichier de paramètres est créé (par exemple parce qu'on crée une nouvelle
|
---|
272 | machine virtuelle), VirtualBox utilise automatiquement le format des
|
---|
273 | paramètres de la version actuelle de VirtualBox. Il se peut que ces
|
---|
274 | fichiers ne soient pas lus si vous rétrogradez à une version plus
|
---|
275 | ancienne de VirtualBox. Cependant, quand VirtualBox rencontre un fichier
|
---|
276 | de paramètres d'une ancienne version (comme après une mise à jour de
|
---|
277 | VirtualBox), il essaie autant que possible de garder le format des
|
---|
278 | paramètres. Il ne mettra à jour en silence les fichiers des paramètres
|
---|
279 | que si les paramètres actuels ne peuvent pas être exprimés dans l'ancien
|
---|
280 | format, par exemple parce que vous avez activé une fonction qui n'était
|
---|
281 | pas présente dans l'ancienne version de VirtualBox.<footnote>
|
---|
282 | <para>Par exemple, avant VirtualBox 3.1, il était possible d'activer
|
---|
283 | /désactiver qu'un seul lecteur DVD dans une machine virtuelle.
|
---|
284 | S'il a été activé, cela serait toujours possible sur le deuxième
|
---|
285 | maître du contrôleur IDE. Avec VirtualBox 3.1, on peut connecter
|
---|
286 | des lecteurs DVD à un slot de son choix sur un contrôleur de son choix,
|
---|
287 | donc ils pourraient être sur le deuxième esclave d'un contrôleur IDE
|
---|
288 | ou sur un slot SATA. Si vous avez un fichier de paramètres d'une
|
---|
289 | machine d'une ancienne version et si vous mettez à jour
|
---|
290 | VirtualBox vers la 3.1 et si vous déplacez le lecteur DVD de sa
|
---|
291 | position par défaut, on ne peut pas l'exprimer dans l'ancien format
|
---|
292 | des paramètres ; le fichier XML de la machine serait écrit dans
|
---|
293 | le nouveau format et une copie de sauvegarde de l'ancien format serait
|
---|
294 | gardée.</para>
|
---|
295 | </footnote> Dans ces cas-là, VirtualBox sauvegarde le fichier des anciens
|
---|
296 | paramètres dans le répertoire de configuration de la machine virtuelle.
|
---|
297 | Si vous avez besoin de revenir à une ancienne version de VirtualBox,
|
---|
298 | vous devrez recopier à la main ces fichiers de sauvegarde.</para>
|
---|
299 |
|
---|
300 | <para>Nous ne documentons volontairement pas les spécifications des fichiers
|
---|
301 | XML de VirtualBox car nous nous réservons le droit de les modifier à l'avenir.
|
---|
302 | Nous vous suggérons donc fortement de ne pas éditer ces fichiers à la main.
|
---|
303 | VirtualBox offre un accès complet à ses données de configuration par son
|
---|
304 | outil en ligne de commande <computeroutput>VBoxManage</computeroutput>
|
---|
305 | (voir le <xref linkend="vboxmanage" />) et son API (voir le <xref
|
---|
306 | linkend="VirtualBoxAPI" />).</para>
|
---|
307 | </sect2>
|
---|
308 | </sect1>
|
---|
309 |
|
---|
310 | <sect1 id="technical-components">
|
---|
311 | <title>Exécutables et composants de VirtualBox</title>
|
---|
312 |
|
---|
313 | <para>VirtualBox a été conçu pour être modulaire et flexible. Quand on ouvre
|
---|
314 | l'interface graphique (GUI) de VirtualBox et qu'on démarre une VM,
|
---|
315 | au moins trois processus fonctionnent :<orderedlist>
|
---|
316 | <listitem>
|
---|
317 | <para><computeroutput>VBoxSVC</computeroutput>, le processus du service
|
---|
318 | de VirtualBox qui fonctionne toujours en tâche de fond. Ce processus
|
---|
319 | est lancé automatiquement par le processus du premier client
|
---|
320 | VirtualBox (la GUI, <computeroutput>VBoxManage</computeroutput>,
|
---|
321 | <computeroutput>VBoxHeadless</computeroutput>, le service web ou
|
---|
322 | autre) et il s'arrête peu de temps après que le dernier client a
|
---|
323 | quitté. Le service est responsable d'archiver, maintenir l'état de
|
---|
324 | toutes les VMs et de la communication entre les composants de VirtualBox.
|
---|
325 | Cette communication est implémentée via COM/XPCOM.<note>
|
---|
326 | <para>Quand nous parlons de "clients" ici, nous voulons dire
|
---|
327 | les clients locaux d'un processus serveur
|
---|
328 | <computeroutput>VBoxSVC</computeroutput> en particulier, pas les
|
---|
329 | clients sur un réseau. VirtualBox utilise son propre concept
|
---|
330 | client/serveur pour permettre à ses processus de coopérer, mais
|
---|
331 | tous ces processus tournent sous le même compte utilisateur du
|
---|
332 | système d'exploitation hôte, et c'est entièrement transparent
|
---|
333 | pour l'utilisateur.</para>
|
---|
334 | </note></para>
|
---|
335 | </listitem>
|
---|
336 |
|
---|
337 | <listitem>
|
---|
338 | <para>Le processus de la GUI,, <computeroutput>VirtualBox</computeroutput>,
|
---|
339 | une application client basée sur la bibliothèque multiplateformes
|
---|
340 | Qt. Lancée sans l'option <computeroutput>--startvm</computeroutput>,
|
---|
341 | cette application agit comme un gestionnaire de VirtualBox, en
|
---|
342 | affichant les VMs et leurs paramètres. Elle communique alors les
|
---|
343 | paramètres et les changements d'état à <computeroutput>VBoxSVC</computeroutput>
|
---|
344 | et elle répercute les changements subis par d'autres moyens comme
|
---|
345 | <computeroutput>VBoxManage</computeroutput>.</para>
|
---|
346 | </listitem>
|
---|
347 |
|
---|
348 | <listitem>
|
---|
349 | <para>Si on lance l'application client <computeroutput>VirtualBox</computeroutput>
|
---|
350 | avec l'argument <computeroutput>--startvm</computeroutput>, elle
|
---|
351 | charge la bibliothèque VMM qui inclut l'hyperviseur proprement dit
|
---|
352 | et qui lance une machine virtuelle et offre une entrée et une sortie
|
---|
353 | à l'invité.</para>
|
---|
354 | </listitem>
|
---|
355 | </orderedlist></para>
|
---|
356 |
|
---|
357 | <para>Toutes les interfaces de VirtualBox (client) communiqueront avec le
|
---|
358 | processus du service et elles peuvent contrôler et répercuter l'état actuel.
|
---|
359 | Par exemple, tant le selecteur de VM que la fenêtre de VM ou VBoxManage peuvent
|
---|
360 | être utilisés pour mettre en pause la VM en fonction, les autres composants
|
---|
361 | reflèteront toujours le changement d'état.</para>
|
---|
362 |
|
---|
363 | <para>La GUI de VirtualBox n'est qu'une des nombreuses interfaces (client)
|
---|
364 | disponibles. La liste complète comprise dans VirtualBox est :<orderedlist>
|
---|
365 | <listitem>
|
---|
366 | <para><computeroutput>VirtualBox</computeroutput>, l'interface Qt
|
---|
367 | implémentant le gestionnaire et les VMs en fonction ;</para>
|
---|
368 | </listitem>
|
---|
369 |
|
---|
370 | <listitem>
|
---|
371 | <para><computeroutput>VBoxManage</computeroutput>, une alternative
|
---|
372 | moins conviviale mais plus puissante, décrite au <xref
|
---|
373 | linkend="vboxmanage" />.</para>
|
---|
374 | </listitem>
|
---|
375 |
|
---|
376 | <listitem>
|
---|
377 | <para><computeroutput>VBoxSDL</computeroutput>, une interface graphique
|
---|
378 | simple basée sur la bibliothèque SDL ; voir <xref
|
---|
379 | linkend="vboxsdl" />.</para>
|
---|
380 | </listitem>
|
---|
381 |
|
---|
382 | <listitem>
|
---|
383 | <para><computeroutput>VBoxHeadless</computeroutput>, une interface de
|
---|
384 | VM qui ne fournit pas directement de sortie graphique et d'entrée
|
---|
385 | clavier/souris,
|
---|
386 | mais qui permet une redirection par VirtualBox Remote Desktop Extension;
|
---|
387 | voir <xref linkend="vboxheadless" />.</para>
|
---|
388 | </listitem>
|
---|
389 |
|
---|
390 | <listitem>
|
---|
391 | <para><computeroutput>vboxwebsrv</computeroutput>, le processus du
|
---|
392 | service web de VirtualBox qui permet de contrôler un hôte VirtualBox à
|
---|
393 | distance. Ceci est décrit en détails dans le manuel de référence
|
---|
394 | du VirtualBox Software Development Kit (SDK) ; merci de voir le
|
---|
395 | <xref linkend="VirtualBoxAPI" /> pour des détails.</para>
|
---|
396 | </listitem>
|
---|
397 |
|
---|
398 | <listitem>
|
---|
399 | <para>Le shell Python de VirtualBox, une alternative en Python à
|
---|
400 | VBoxManage. Elle est aussi décrite dans le manuel de référence du SDK.</para>
|
---|
401 | </listitem>
|
---|
402 | </orderedlist></para>
|
---|
403 |
|
---|
404 | <para>En interne, VirtualBox comprend beaucoup plus d'interfaces
|
---|
405 | séparées. Vous pourriez les rencontrer en analysant les messages d'erreur
|
---|
406 | internes ou les fichiers journaux. Parmi elles, on compte :</para>
|
---|
407 |
|
---|
408 | <itemizedlist>
|
---|
409 | <listitem>
|
---|
410 | <para>IPRT, une bibliothèque d'exécution portable qui forme une couche
|
---|
411 | d'abstraction d'accès aux fichiers, du filage (threading), la manipulation
|
---|
412 | de chaînes, etc. Chaque fois que VirtualBox accède aux fonctions du
|
---|
413 | système hôte, il le fait via cette bibliothèque pour une portabilité
|
---|
414 | multiplateformes.</para>
|
---|
415 | </listitem>
|
---|
416 |
|
---|
417 | <listitem>
|
---|
418 | <para>VMM (Virtual Machine Monitor), le cœur de l'hyperviseur.</para>
|
---|
419 | </listitem>
|
---|
420 |
|
---|
421 | <listitem>
|
---|
422 | <para>EM (Execution Manager), contrôle l'exécution d'un code invité.</para>
|
---|
423 | </listitem>
|
---|
424 |
|
---|
425 | <listitem>
|
---|
426 | <para>REM (Recompiled Execution Monitor), fournit une émulation logicielle
|
---|
427 | des instructions du processeur.</para>
|
---|
428 | </listitem>
|
---|
429 |
|
---|
430 | <listitem>
|
---|
431 | <para>TRPM (Trap Manager), intercepte et traite les traps et les
|
---|
432 | exceptions de l'invité.</para>
|
---|
433 | </listitem>
|
---|
434 |
|
---|
435 | <listitem>
|
---|
436 | <para>HWACCM (Hardware Acceleration Manager), offre un support pour
|
---|
437 | VT-x et AMD-V.</para>
|
---|
438 | </listitem>
|
---|
439 |
|
---|
440 | <listitem>
|
---|
441 | <para>PDM (Pluggable Device Manager), une interface abstraite entre le
|
---|
442 | VMM et les périphériques émulés qui sépare les implémentations du
|
---|
443 | périphérique de l'intérieur du VMM et qui facilite l'ajout de nouveaux
|
---|
444 | périphériques émulés. Par PDM, des développeurs tiers peuvent ajouter
|
---|
445 | de nouveaux périphériques virtuels à VirtualBox, sans devoir modifier
|
---|
446 | VirtualBox lui-même.</para>
|
---|
447 | </listitem>
|
---|
448 |
|
---|
449 | <listitem>
|
---|
450 | <para>PGM (Page Manager), un composant contrôlant la pagination de
|
---|
451 | l'invité.</para>
|
---|
452 | </listitem>
|
---|
453 |
|
---|
454 | <listitem>
|
---|
455 | <para>PATM (Patch Manager), corrige le code de l'invité pour améliorer
|
---|
456 | et accélérer la virtualisation logicielle.</para>
|
---|
457 | </listitem>
|
---|
458 |
|
---|
459 | <listitem>
|
---|
460 | <para>TM (Time Manager), gère les horloges et tous les aspects de l'heure
|
---|
461 | des invités.</para>
|
---|
462 | </listitem>
|
---|
463 |
|
---|
464 | <listitem>
|
---|
465 | <para>CFGM (Configuration Manager), fournit une structure arborescente
|
---|
466 | qui garde les paramètres de configuration de la VM et tous les périphériques
|
---|
467 | émulés.</para>
|
---|
468 | </listitem>
|
---|
469 |
|
---|
470 | <listitem>
|
---|
471 | <para>SSM (Saved State Manager), enregistre et charge l'état d'une VM.</para>
|
---|
472 | </listitem>
|
---|
473 |
|
---|
474 | <listitem>
|
---|
475 | <para>VUSB (Virtual USB), une couche USB qui sépare les contrôleurs USB
|
---|
476 | émulés des contrôleurs de l'hôte et des périphériques USB ; ceci
|
---|
477 | active également l'USB distant.</para>
|
---|
478 | </listitem>
|
---|
479 |
|
---|
480 | <listitem>
|
---|
481 | <para>DBGF (Debug Facility), un débogueur de VM intégré.</para>
|
---|
482 | </listitem>
|
---|
483 |
|
---|
484 | <listitem>
|
---|
485 | <para>VirtualBox émule un certain nombre de périphériques pour offrir
|
---|
486 | l'environnement matériel dont ont besoin divers invités. La plupart de
|
---|
487 | ces périphériques standards se trouvent dans beaucoup de machines
|
---|
488 | compatibles PC et sont largement supportés par les systèmes d'exploitation
|
---|
489 | invités. Pour les périphériques réseaux et de stockage en particulier,
|
---|
490 | il existe plusieurs options pour que les périphériques émulés accèdent
|
---|
491 | au matériel sous-jacent. Ces périphériques sont gérés par
|
---|
492 | PDM.</para>
|
---|
493 | </listitem>
|
---|
494 |
|
---|
495 | <listitem>
|
---|
496 | <para>Les suppléments invité pour divers systèmes d'exploitation invités.
|
---|
497 | Il s'agit de code installé dans les machines virtuelles ; voir <xref
|
---|
498 | linkend="guestadditions" />.</para>
|
---|
499 | </listitem>
|
---|
500 |
|
---|
501 | <listitem>
|
---|
502 | <para>Le composant "Main" est spécial : il lie tous les modules
|
---|
503 | ci-dessus et c'est la seule API publique fournie par VirtualBox. Tous
|
---|
504 | les processus clients listés ci-dessus n'utilisent que cettte API et
|
---|
505 | n'accèdent jamais directement aux composants de l'hyperviseur. Il s'en
|
---|
506 | suit que des applications tierces utilisant l'API principale de VirtualBox
|
---|
507 | peuvent s'appuyer sur le fait qu'elle est toujours bien testée et que
|
---|
508 | toutes les possibilités de VirtualBox sont complètement présentées. C'est
|
---|
509 | cette API qui est décrite dans le manuel de référence du SDK de
|
---|
510 | VirtualBox indiqué ci-dessus (de nouveau, voir le <xref linkend="VirtualBoxAPI" />).</para>
|
---|
511 | </listitem>
|
---|
512 | </itemizedlist>
|
---|
513 | </sect1>
|
---|
514 |
|
---|
515 | <sect1 id="hwvirt">
|
---|
516 | <title>Virtualisation matérielle vs. logicielle</title>
|
---|
517 |
|
---|
518 | <para>VirtualBox permet aux logiciels de la machine virtuelle de s'exécuter
|
---|
519 | directement sur le processeur de l'hôte, mais il utilise une gamme de
|
---|
520 | techniques complexes pour intercepter les opérations interférant avec votre
|
---|
521 | hôte. Chaque fois que l'invité essaie de faire quelque chose de potentiellement
|
---|
522 | dangereux pour votre ordinateur et ses données, VirtualBox s'interpose et
|
---|
523 | rentre en action. En particulier, pour beaucoup de matériel auquel croit
|
---|
524 | avoir accès l'invité, VirtualBox simule un certain environnement "virtuel"
|
---|
525 | selon la façon dont vous avez configuré une machine virtuelle. Par exemple,
|
---|
526 | quand l'invité cherche à accéder à un disque dur, VirtualBox redirige ces
|
---|
527 | requêtes vers ce que vous avez configuré comme étant le disque dur virtuel
|
---|
528 | de la machine virtuelle -- en principe, un fichier image sur votre hôte.</para>
|
---|
529 |
|
---|
530 | <para>Malheureusement, la plateforme x86 n'a jamais été conçue pour
|
---|
531 | être virtualisée. La détection des
|
---|
532 | situations où VirtualBox doit contrôler le code invité qui s'exécute, comme
|
---|
533 | décrit ci-dessus, est difficile. Il existe deux façons de faire cela :<itemizedlist>
|
---|
534 | <listitem>
|
---|
535 | <para>Depuis 2006, les processeurs Intel et AMD supportent ce qu'on
|
---|
536 | appelle la <emphasis role="bold">"virtualisation matérielle"</emphasis>.
|
---|
537 | Cela signifie que ces processeurs peuvent aider VirtualBox à intercepter
|
---|
538 | des opérations potentiellement dangereuses que pourrait essayer de
|
---|
539 | faire le système d'exploitation invité et ils facilitent la présentation
|
---|
540 | de matériel virtuel à une machine virtuelle.</para>
|
---|
541 |
|
---|
542 | <para>Ces fonctionnalités du matériel diffèrent entre les processeurs
|
---|
543 | Intel et AMD. Intel a appelé sa techno <emphasis
|
---|
544 | role="bold">VT-x</emphasis> ;; AMD a nommé la leur <emphasis
|
---|
545 | role="bold">AMD-V</emphasis>. Le support d'Intel et d'AMD de la
|
---|
546 | virtualisation est très différent dans le détail, mais pas si différent
|
---|
547 | dans le principe.<note>
|
---|
548 | <para>Sur de nombreux systèmes, les fonctions de virtualisation
|
---|
549 | matérielle doivent être préalablement activées dans le BIOS avant
|
---|
550 | de pouvoir être utilisées par VirtualBox.</para>
|
---|
551 | </note></para>
|
---|
552 | </listitem>
|
---|
553 |
|
---|
554 | <listitem>
|
---|
555 | <para>Contrairement aux autres logiciels de virtualisation, pour
|
---|
556 | de nombreux scénari d'utilisation, VirtualBox <emphasis>n'exige pas</emphasis>
|
---|
557 | que les fonctions de virtualisation matérielle soient présentes.
|
---|
558 | Par des techniques sophistiquées, VirtualBox virtualise beaucoup
|
---|
559 | de systèmes d'exploitation invités complets de manière
|
---|
560 | <emphasis role="bold">logicielle</emphasis>. Cela signifie que vous
|
---|
561 | pouvez lancer des machines virtuelles même sur d'anciens processeurs
|
---|
562 | qui ne supportent pas la virtualisation matérielle.</para>
|
---|
563 | </listitem>
|
---|
564 | </itemizedlist></para>
|
---|
565 |
|
---|
566 | <para>Même si VirtualBox n'exige pas toujours la virtualisation matérielle,
|
---|
567 | son activation est <emphasis>nécessaire</emphasis> dans les scénari suivants :<itemizedlist>
|
---|
568 | <listitem>
|
---|
569 | <para>Certains systèmes d'exploitation, rares, comme OS/2, utilisent
|
---|
570 | des instructions processeur très ésotériques qui ne sont pas supportées
|
---|
571 | par notre virtualisation logicielle. Pour les machines virtuelles
|
---|
572 | configurées pour contenir un tel système d'exploitation, la
|
---|
573 | virtualisation matérielle est activée automatiquement.</para>
|
---|
574 | </listitem>
|
---|
575 |
|
---|
576 | <listitem>
|
---|
577 | <para>Le support des invités 64 bits de VirtualBox (ajouté avec la
|
---|
578 | version 2.0) et le multiprocessing (SMP, ajouté avec la version 3.0)
|
---|
579 | exigent tous deux l'activation de la virtualisation matérielle (ce n'est
|
---|
580 | tout de même pas une grosse limite vu l'immense majorité des processeurs
|
---|
581 | 64 bits et multi cœurs actuels incluant lavirtualisation matérielle ;
|
---|
582 | les exceptions à cette règle étant par exemple les anciens processeurs
|
---|
583 | Intel Celeron et AMD Opteron.)</para>
|
---|
584 | </listitem>
|
---|
585 | </itemizedlist></para>
|
---|
586 |
|
---|
587 | <warning>
|
---|
588 | <para>Ne lancez pas d'autres hyperviseurs (produits de virtualisation
|
---|
589 | open-source ou propriétaires) en même temps que VirtualBox ! Si
|
---|
590 | plusieurs hyperviseurs peuvent, en principe, être <emphasis>installés</emphasis>
|
---|
591 | en parallèle, n'essayez pas de <emphasis>lancer</emphasis> plusieurs
|
---|
592 | machines virtuelles à partir d'hyperviseurs concurrents en même temps.
|
---|
593 | VirtualBox ne peut pas savoir ce qu'un autre hyperviseur essaie de faire
|
---|
594 | sur un même hôte, et surtout si plusieurs produits essaient d'utiliser la
|
---|
595 | virtualisation matérielle, les fonctions telles que VT-x, cela peut planter
|
---|
596 | tout l'hôte. De plus, dans VirtualBox, vous pouvez mélanger la virtualisation
|
---|
597 | logicielle et matérielle quand vous lancez plusieurs VMs. Dans certains cas,
|
---|
598 | une petite perte de performances sera inévitable si vous mélangez des
|
---|
599 | VMs avec virtualisation VT-x et logicielle. Nous recommandons de ne pas
|
---|
600 | mélanger les modes de virtualisation si la performance maximum et
|
---|
601 | une faible surcharge (overhead) sont essentiels. Cela <emphasis>ne s'applique pas</emphasis>
|
---|
602 | à AMD-V.</para>
|
---|
603 | </warning>
|
---|
604 | </sect1>
|
---|
605 |
|
---|
606 | <sect1>
|
---|
607 | <title>Détails sur la virtualisation logicielle</title>
|
---|
608 |
|
---|
609 | <para>L'implémentation de la virtualisation sur les processeurs x86 sans
|
---|
610 | le support de la virtualisation matérielle est une tâche extraordinairement
|
---|
611 | complexe car l'architecture du processeur n'a pas été conçue pour être
|
---|
612 | virtualisée. On peut résoudre en général les problèmes, mais au prix de
|
---|
613 | performances réduites. Ainsi, il existe un conflit constant entre les
|
---|
614 | performances de virtualisation et la précision.</para>
|
---|
615 |
|
---|
616 | <para>Le jeu d'instructions x86 a été conçu au départ dans les années 1970 et
|
---|
617 | subi des modifications significatives avec l'ajout d'un mode protégé dans
|
---|
618 | les années 1980s avec l'architecture du processeur 286, puis à nouveau avec
|
---|
619 | l'Intel 386 et l'architecture 32 bits. Alors que le 386 avait un
|
---|
620 | support de virtualisation vraiment limité pour les opérations en mode réel,
|
---|
621 | (le mode V86, utilisé par la "DOS Box" de Windows 3.x et d'OS/2 2.x), aucun
|
---|
622 | port n'existait pour virtualiser toute l'architecture.</para>
|
---|
623 |
|
---|
624 | <para>En théorie, la virtualisation logicielle n'est pas complexe en soi.
|
---|
625 | Outre les quatre niveaux de privilèges ("rings") fournis par le matériel
|
---|
626 | (dont en général on n'utilise que deux : ring 0 pour le mode noyau et ring 3
|
---|
627 | pour le mode utilisateur), il faut faire la différence entre le "contexte
|
---|
628 | hôte" et le "contexte invité".</para>
|
---|
629 |
|
---|
630 | <para>Dans le "contexte hôte", tout est comme s'il n'y avait pas d'hyperviseur
|
---|
631 | actif. Cela pourrait être le mode actif si une autre application de votre
|
---|
632 | hôte consomme du temps processeur ; dans ce cas, il existe un mode
|
---|
633 | ring 3 hôte et un mode ring 0 hôte. L'hyperviseur n'est pas impliqué.</para>
|
---|
634 |
|
---|
635 | <para>Par contre, dans le "contexte invité", une machine virtuelle est active.
|
---|
636 | Tant que le code invité s'exécute en ring 3, ce n'est pas très problématique
|
---|
637 | vu qu'un hyperviseur peut paramétrer les tableaux des pages correctement et
|
---|
638 | exécuter ce code de manière native sur le processeur. Les problèmes arrivent
|
---|
639 | sur la manière d'intercepter ce que fait le noyau de l'invité.</para>
|
---|
640 |
|
---|
641 | <para>Il y a plusieurs solutions possibles à ces problèmes. Une approche
|
---|
642 | est l'émulation logicielle totale, ce qui implique généralement une recompilation.
|
---|
643 | A savoir que tout le code qui doit être exécuté par l'invité est analysé,
|
---|
644 | transformé sous une forme qui n'autorisera pas l'invité à modifier et à
|
---|
645 | voir l'état réel du processeur, lequel l'exécutera simplement. Ce processus
|
---|
646 | est bien sûr très complexe et coûteux en termes de performances. (VirtualBox
|
---|
647 | contient un recompilateur basé sur QEMU qu'on peut utiliser pour une
|
---|
648 | émulation logicielle pure, mais le recompilateur n'est activé que dans
|
---|
649 | des situations particulières, décrites ci-dessous.)</para>
|
---|
650 |
|
---|
651 | <para>Une autre solution possible est la paravirtualisation, où seuls les
|
---|
652 | OS invités spécialement modifiés sont autorisés à s'exécuter. De cette manière,
|
---|
653 | la plupart des accès matériels sont rendus abstraits et toutes les fonctions
|
---|
654 | qui accèderaient normalement au matériel ou à l'état privilégié du processeur
|
---|
655 | se basent plutôt sur l'hyperviseur. La paravirtualisation peut donner
|
---|
656 | de bonnes fonctionnalités et de bonnes performances sur des processeurs
|
---|
657 | x86 standards, mais cela ne peut marcher que si l'OS invité peut être
|
---|
658 | modifié, ce qui n'est évidemment pas toujours le cas.</para>
|
---|
659 |
|
---|
660 | <para>VirtualBox choisit une approche différente. Quand on démarre une
|
---|
661 | machine virtuelle par son pilote noyau du support ring-0, VirtualBox a
|
---|
662 | réglé le système hôte pour qu'il puisse lancer nativement la plupart du
|
---|
663 | code invité, mais il s'insère lui-même "en bas" de l'image. Il peut alors
|
---|
664 | supposer le contrôle lorsque c'est nécessaire -- si une instruction privilégiée
|
---|
665 | est exécutée, l'invité plante (traps) (en particulier car un accès au registre
|
---|
666 | E/S a été tenté et un périphérique doit être virtualisé) ou car des interruptions se produisent. VirtualBox peut
|
---|
667 | alors gérer cela et soit acheminer une requête vers un périphérique virtuel,
|
---|
668 | soit, si possible, déléguer la gestion de tels éléments à l'OS hôte ou
|
---|
669 | invité. Dans le contexte invité, VirtualBox peut être donc dans un des trois
|
---|
670 | états :</para>
|
---|
671 |
|
---|
672 | <para><itemizedlist>
|
---|
673 | <listitem>
|
---|
674 | <para>Le code invité ring 3 s'exécute sans modifications, à pleine
|
---|
675 | vitesse, autant que possible. Le nombre d'erreurs sera généralement
|
---|
676 | faible (sauf si l'invité autorise l'E/S du port depuis ring 3,
|
---|
677 | chose que nous ne pouvons pas faire car nous ne voulons pas que
|
---|
678 | l'invité puisse accéder aux ports réels). On parle aussi de "mode brut",
|
---|
679 | car le code ring-3 de l'invité s'exécute sans modifications.</para>
|
---|
680 | </listitem>
|
---|
681 |
|
---|
682 | <listitem>
|
---|
683 | <para>Pour le code invité en ring 0, VirtualBox utilise une astuce
|
---|
684 | savoureuse : il reconfigure l'invité pour que son code ring-0
|
---|
685 | se lance plutôt en ring 1 (ce qui n'est en principe pas utilisé sur les
|
---|
686 | systèmes d'exploitation x86). Il s'en suit que lorsque le code ring-0
|
---|
687 | de l'invité (qui s'exécute en fait en ring 1) tel que le pilote d'un
|
---|
688 | périphérique invité, essaie d'écrire sur un registre E/S ou d'exécuter
|
---|
689 | une instruction non privilégiée, l'hyperviseur de VirtualBox en ring
|
---|
690 | 0 "réel" peut prendre le dessus.</para>
|
---|
691 | </listitem>
|
---|
692 |
|
---|
693 | <listitem>
|
---|
694 | <para>L'hyperviseur (VMM) peut être actif. Chaque fois qu'une erreur
|
---|
695 | survient, VirtualBox regarde l'instruction problématique et il peut
|
---|
696 | la reléguer à un périphérique virtuel, à l'OS hôte, à l'invité ou
|
---|
697 | il peut le lancer dans le recompilateur.</para>
|
---|
698 |
|
---|
699 | <para>En particulier, on utilise le recompilateur quand le code invité
|
---|
700 | désactive les interruptions et VirtualBox ne peut pas savoir quand
|
---|
701 | on y reviendra (dans ces situations, VirtualBox analyse en fait le
|
---|
702 | code invité en utilisant son propre désassembleur). De plus, certaines
|
---|
703 | instructions privilégiées telles que LIDT doivent être gérées à part.
|
---|
704 | Enfin, tout le code en mode réel ou protégé (comme le code du BIOS,
|
---|
705 | un invité DOS ou un démarrage de système d'exploitation) se lance
|
---|
706 | complètement dans un recompilateur.</para>
|
---|
707 | </listitem>
|
---|
708 | </itemizedlist></para>
|
---|
709 |
|
---|
710 | <para>Malheureusement, cela ne fonctionne que dans une certaine mesure.
|
---|
711 | Entre autres, les situations suivantes nécessitent une gestion spéciale :</para>
|
---|
712 |
|
---|
713 | <para><orderedlist>
|
---|
714 | <listitem>
|
---|
715 | <para>L'exécution de code ring 0 en ring 1 provoque beaucoup d'erreurs
|
---|
716 | d'instructions supplémentaires car ring 1 n'est pas autorisé à exécuter
|
---|
717 | des instructions privilégiées (dont le ring-0 de l'invité en contient
|
---|
718 | beaucoup). Avec chacune de ces erreurs, le VMM doit s'arrêter et
|
---|
719 | émuler le code pour obtenir le comportement désiré. Si cela fonctionne,
|
---|
720 | l'émulation de milliers d'erreurs est très coûteuse et très pénalisante
|
---|
721 | en performances de l'invité virtualisé.</para>
|
---|
722 | </listitem>
|
---|
723 |
|
---|
724 | <listitem>
|
---|
725 | <para>Il existe des défauts dans l'implémentation de ring 1 de
|
---|
726 | l'architecture x86 qui n'ont jamais été corrigés. Certaines instructions
|
---|
727 | qui <emphasis>planteraient</emphasis> même en ring 1 ne le font pas.
|
---|
728 | Cela concerne par exemple les paires d'instructions LGDT/SGDT, LIDT/SIDT,
|
---|
729 | ou POPF/PUSHF. Alors que l'opération "load" est privilégiée et peut
|
---|
730 | donc planter, l'instruction "store" réussit toujours. Si l'invité est
|
---|
731 | autorisé à les exécuter, il verra l'état réel du PC et pas celui
|
---|
732 | virtualisé. L'instruction CPUID a également le même problème.</para>
|
---|
733 | </listitem>
|
---|
734 |
|
---|
735 | <listitem>
|
---|
736 | <para>Un hyperviseur a en général besoin de réserver certaines parties
|
---|
737 | de l'espace d'adresse de l'invité (tant l'espace d'adresse liénaire
|
---|
738 | que les sélecteurs) pour son propre usage. Ce n'est pas complètement
|
---|
739 | transparent pour l'OS invité et cela peut provoquer des conflits.</para>
|
---|
740 | </listitem>
|
---|
741 |
|
---|
742 | <listitem>
|
---|
743 | <para>L'instruction SYSENTER (utilisée pour les appels système) exécutée
|
---|
744 | par une application en fonction dans un OS invité transite toujours
|
---|
745 | par le ring 0. Mais c'est là où l'hyperviseur se lance et pas l'OS
|
---|
746 | invité. Dans ce cas, l'hyperviseur doit bloquer et émuler l'instruction
|
---|
747 | même quand ce n'est pas souhaitable.</para>
|
---|
748 | </listitem>
|
---|
749 |
|
---|
750 | <listitem>
|
---|
751 | <para>Les registres de segments du processeur contiennent un cache
|
---|
752 | de descripteur "caché" inaccessible de manière logicielle. L'hyperviseur
|
---|
753 | ne peut pas lire, enregistrer ou restaurer cet état, mais l'OS invité
|
---|
754 | peut l'utiliser.</para>
|
---|
755 | </listitem>
|
---|
756 |
|
---|
757 | <listitem>
|
---|
758 | <para>Certaines ressources doivent (et peuvent) être neutralisées par
|
---|
759 | l'hyperviseur, mais l'accès est si fréquent que cela crée une perte
|
---|
760 | significative de performance. Un exemple réside dans le registre
|
---|
761 | TPR (Task Priority) en mode 32 bits. Les accès à ce registre doivent
|
---|
762 | être bloqués par l'hyperviseur, mais certains systèmes d'exploitation
|
---|
763 | invités (en particulier Windows et Solaris) écrivent très souvent
|
---|
764 | dans ce registre, ce qui porte une atteinte certaine aux performances
|
---|
765 | de virtualisation.</para>
|
---|
766 | </listitem>
|
---|
767 | </orderedlist></para>
|
---|
768 |
|
---|
769 | <para>Pour corriger ces problèmes de performances et de sécurité, VirtualBox
|
---|
770 | contient un gestionnaire d'analyse et de scan de code
|
---|
771 | (Code Scanning and Analysis Manager (CSAM)), qui désassemble le code invité,
|
---|
772 | et un gestionnaire de correctifs (Patch Manager (PATM)), qui peut le remplacer
|
---|
773 | pendant l'exécution.</para>
|
---|
774 |
|
---|
775 | <para>Avant d'exécuter du code ring 0, CSAM le scanne de manière récursive
|
---|
776 | pour trouver des instructions problématiques. PATM le corrige <emphasis>in-situ
|
---|
777 | </emphasis>, c'est-à-dire qu'il remplace l'instruction par un passage à la
|
---|
778 | mémoire de l'hyperviseur, où un générateur intégré a mis une implémentation
|
---|
779 | plus convenable. En réalité, c'est une tâche très complexe car il existe
|
---|
780 | de nombreuses situations compliquées à trouver et à gérer correctement. Donc,
|
---|
781 | vu son actuelle complexité, on pourrait dire que PATM est un recompilateur
|
---|
782 | avancé <emphasis>in-situ</emphasis>.</para>
|
---|
783 |
|
---|
784 | <para>De plus, à chaque fois qu'une erreur survient, VirtualBox analyse
|
---|
785 | le code problématique pour déterminer s'il est possible de le corriger afin
|
---|
786 | de l'empêcher de provoquer davantage de futures erreurs. Cette approche
|
---|
787 | fonctionne bien en pratique et améliore de façon drastique les performances
|
---|
788 | de la virtualisation logicielle.</para>
|
---|
789 | </sect1>
|
---|
790 |
|
---|
791 | <sect1>
|
---|
792 | <title>Détails sur la virtualisation matérielle</title>
|
---|
793 |
|
---|
794 | <para>Avec VT-x d'Intel, il existe deux modes opératoires du processeur :
|
---|
795 | le mode racine VMM et le mode non-racine.<itemizedlist>
|
---|
796 | <listitem>
|
---|
797 | <para>En mode racine, le processeur se comporte beaucoup comme les
|
---|
798 | anciennes générations de processeurs sans le support VT-x. Il y a quatre
|
---|
799 | niveaux de privilèges ("rings") et le même jeu d'instructions est
|
---|
800 | supporté avec, en plus, des instructions spécifiques de virtualisation.
|
---|
801 | Le mode racine est ce que le système d'exploitation hôte utilise sans
|
---|
802 | virtualisation, et il est aussi utilisé par l'hyperviseur quand la
|
---|
803 | virtualisation est active.</para>
|
---|
804 | </listitem>
|
---|
805 |
|
---|
806 | <listitem>
|
---|
807 | <para>En mode non-racine, le fonctionnement du processeur est très
|
---|
808 | différent. Il y a toujours quatre niveaux de privilèges et le même
|
---|
809 | jeu d'instructions, mais une nouvelle structure, qui s'appelle VMCS
|
---|
810 | (Virtual Machine Control Structure), contrôle désormais le fonctionnement
|
---|
811 | du processeur et elle détermine la manière dont se comportent certaines
|
---|
812 | instructions. Le mode non-racine est celui dans lequel les systèmes invités
|
---|
813 | fonctionnent.</para>
|
---|
814 | </listitem>
|
---|
815 | </itemizedlist></para>
|
---|
816 |
|
---|
817 | <para>Le passage du mode racine au mode non racine s'appelle "l'entrée VM",
|
---|
818 | celui en sens inverse s'appelle "Quitter VM". Le VMCS inclut une zone d'état
|
---|
819 | invité et hôte sauvegardée/restaurée à chaque entrée et sortie en VM.
|
---|
820 | Surtout, les VMMS contrôlent les opérations de l'invité qui feront quitter
|
---|
821 | la VM.</para>
|
---|
822 |
|
---|
823 | <para>Les VMCS permettent un contrôle très fin via ce que les invités
|
---|
824 | peuvent et ne peuvent pas faire. Par exemple, un hyperviseur peut autoriser
|
---|
825 | un invité à écrire certains bits dans des registres de contrôle protégés,
|
---|
826 | mais pas dans d'autres. Cela permet une virtualisation efficace dans des cas
|
---|
827 | où les invités peuvent être autorisés à écrire des bits de contrôle sans
|
---|
828 | gêner l'hyperviseur, tout en les empêchant de modifier les bits de contrôle
|
---|
829 | dont l'hyperviseur a besoin pour avoir un contrôle total. Le VMMS fournit
|
---|
830 | aussi un contrôle via l'affichage d'interruptions et les exceptions.</para>
|
---|
831 |
|
---|
832 | <para>Chaque fois qu'une instruction ou un événement fait quitter une VM,
|
---|
833 | le VMCS contient des informations sur les raisons de la sortie, ainsi que,
|
---|
834 | souvent, des détails environnants. Par exemple, si une écriture dans le
|
---|
835 | registre CR0 fait quitter, l'instruction en cause est enregistrée, ainsi
|
---|
836 | que le fait qu'un accès en écriture sur le registre de contrôle a provoqué
|
---|
837 | la sortie, ainsi que les informations sur le registre source et destination.
|
---|
838 | L'hyperviseur peut ainsi gérer efficacement la condition sans avoir besoin
|
---|
839 | de techniques avancées telles que CSAM et PATM décrits ci-dessus.</para>
|
---|
840 |
|
---|
841 | <para>VT-x évite intrinsèquement plusieurs problèmes qui se posent avec la
|
---|
842 | virtualisation logicielle. L'invité a son propre espace d'adresse distinct,
|
---|
843 | qu'il ne partage pas avec l'hyperviseur, ce qui élimine les plantages
|
---|
844 | potentiels. De plus, le code du noyau de l'OS invité se lance avec le
|
---|
845 | privilège ring 0 en mode non racine VMX, rendant inopérants les problèmes
|
---|
846 | d'exécution de code en ring 0 sur des niveaux moins privilégiés. Par exemple,
|
---|
847 | l'instruction SYSENTER peut faire une transition vers le ring 0 sans problèmes.
|
---|
848 | Naturellement, même en ring 0 en mode non-racine VMX, tous les accès E/S par
|
---|
849 | le code invité amène toujours la VM à quitter, permettant l'émulation
|
---|
850 | de périphérique.</para>
|
---|
851 |
|
---|
852 | <para>La plus grosse différence entre VT-x et AMD-V est qu'AMD-V fournit
|
---|
853 | un environnement de virtualisation plus complet. VT-x exige que le code
|
---|
854 | non-racine VMX s'exécute en mode pagination activée, ce qui rejette la
|
---|
855 | virtualisation matérielle de logiciels dont le code est en mode réel et en
|
---|
856 | mode protégé non paginé. Cela n'inclut en général que les firmwares et les
|
---|
857 | chargeurs d'OS, néanmoins cela complique l'implémentation d'un hyperviseur
|
---|
858 | avec VT-x. AMD-V n'a pas cette restriction.</para>
|
---|
859 |
|
---|
860 | <para>Bien entendu, la virtualisation matérielle n'est pas parfaite. Par
|
---|
861 | rapport à la virtualisation logicielle, la surcharge (overherad) des sorties des VMs est
|
---|
862 | relativement élevée. Cela pose des problèmes aux périphériques dont l'émulation
|
---|
863 | requiet un grand nombre de captures (traps). Par exemple, avec le périphérique
|
---|
864 | VGA en mode 16 couleurs, mon seulement tous les accès au port en E/S, mais
|
---|
865 | aussi tous les accès à la mémoire tampon (framebuffer) doivent être
|
---|
866 | capturés.</para>
|
---|
867 | </sect1>
|
---|
868 |
|
---|
869 | <sect1 id="imbriquéepaging">
|
---|
870 | <title>Pagination imbriquée (imbriquée) et VPIDs</title>
|
---|
871 |
|
---|
872 | <para>En plus de la virtualisation matérielle "brute", votre processeur peut
|
---|
873 | supporter aussi des techniques sophistiquées supplémentaires :<footnote>
|
---|
874 | <para>VirtualBox 2.0 a ajouté le support de la pagination imbriquée d'AMD ;
|
---|
875 | le support de l'EPT et des VPIDs d'Intel a été ajouté à la version 2.1.</para>
|
---|
876 | </footnote><itemizedlist>
|
---|
877 | <listitem>
|
---|
878 | <para>Une fonctionnalité récente, qui s'appelle la
|
---|
879 | <emphasis role="bold">"pagination imbriquée"</emphasis> implémente la
|
---|
880 | gestion de la mémoire dans le matériel, ce qui peut beaucoup accélérer
|
---|
881 | la virtualisation matérielle puisque ces tâches n'ont plus besoin d'être
|
---|
882 | accomplies par le logiciel de virtualisation.</para>
|
---|
883 |
|
---|
884 | <para>Avec la pagination imbriquée, le matériel fournit un autre niveau
|
---|
885 | d'indirection en passant du linéaire aux adresses physiques. Les
|
---|
886 | tables de page fonctionnent comme avant mais les adresses linéaires
|
---|
887 | sont désormais d'abord traduites en adresses physiques de "l'invité"
|
---|
888 | et pas directement en adresses physiques. Il existe maintenant un
|
---|
889 | nouveau jeu de registres de pagination sous le mécanisme de pagination
|
---|
890 | traditionnel et qui traduit les adresses physiques invitées en adresses
|
---|
891 | physiques de l'hôte, qui sont utilisées pour accéder à la mémoire.</para>
|
---|
892 |
|
---|
893 | <para>La pagination imbriquée élimine la charge causée par les sorties de
|
---|
894 | VM et les accès aux tables de pages. Par définition, avec les tables
|
---|
895 | de pages imbriquées, l'invité peut gérer la pagination sans que l'hyperviseur
|
---|
896 | n'intervienne. La pagination imbriquée améliore ainsi substantiellement
|
---|
897 | les performances de virtualisation.</para>
|
---|
898 |
|
---|
899 | <para>Sur les processeurs AMD, la pagination imbriquée est disponible
|
---|
900 | depuis l'architecture Barcelona (K10) -- on l'appelle maintenant la
|
---|
901 | "rapid virtualization indexing" (RVI). Intel a ajouté le support de
|
---|
902 | la pagination imbriquée, qu'ils appellent la "extended page tables" (EPT),
|
---|
903 | à leurs processeurs Core i7 (Nehalem).</para>
|
---|
904 |
|
---|
905 | <para>Si la pagination imbriquée est activée, l'hyperviseur de VirtualBox
|
---|
906 | peut également utiliser <emphasis role="bold">grandes pages</emphasis>,
|
---|
907 | pour réduire l'utilisation du TLB et la charge. Cela peut provoquer
|
---|
908 | une amélioration jusqu'à 5% des performances. Pour activer cette
|
---|
909 | fonctionnalité pour une VM, vous avez besoin d'utiliser la commande
|
---|
910 | <computeroutput>VBoxManage modifyvm
|
---|
911 | </computeroutput><computeroutput>--largepages</computeroutput> ;
|
---|
912 | voir <xref linkend="vboxmanage-modifyvm" />.</para>
|
---|
913 | </listitem>
|
---|
914 |
|
---|
915 | <listitem>
|
---|
916 | <para>Sur les processeurs Intel, une autre fonction matérielle, qui
|
---|
917 | s'appelle <emphasis role="bold">"Virtual Processor Identifiers" (VPIDs)</emphasis>,
|
---|
918 | peut beaucoup accélérer le changement de contexte en réduisant le
|
---|
919 | besoin coûteux de mémoriser les Translation Lookaside Buffers
|
---|
920 | (TLBs) du processeur.</para>
|
---|
921 |
|
---|
922 | <para>Pour activer ces fonctions pour une VM, vous devez utiliser
|
---|
923 | les commandes <computeroutput>VBoxManage modifyvm --vtxvpid</computeroutput> et
|
---|
924 | <computeroutput>--largepages</computeroutput> ; voir <xref
|
---|
925 | linkend="vboxmanage-modifyvm" />.</para>
|
---|
926 | </listitem>
|
---|
927 | </itemizedlist></para>
|
---|
928 | </sect1>
|
---|
929 | </chapter>
|
---|