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>
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 fonctionne VirtualBox "sous
13
<sect1 id="vboxconfigdata">
14
<title>Où VirtualBox stocke ses fichiers</title>
16
<para>Dans VirtualBox, une machine virtuelle et ses paramètres sont
17
déscrits 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>
24
<title>Machines créées par VirtualBox version 4.0 ou supérieur</title>
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>
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>
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>
46
<para>Sur Mac OS X, il s'agit de
47
<computeroutput>/Users/nomutilisateur</computeroutput>.</para>
51
<para>Sur Linux et Solaris, il s'agit de
52
<computeroutput>/home/nomutilisateur</computeroutput>.</para>
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>
61
<para>Par exemple, quand vous créez une machine virtuelle qui s'appelle
62
"VM Exemple", vous verrez que VirtualBox crée<orderedlist>
64
<para>le dossier <computeroutput>$HOME/VirtualBox VMs/VM Exemple/</computeroutput>
65
et, dans ce dossier,</para>
69
<para>le fichier des paramètres <computeroutput>VM Exemple.vbox</computeroutput> et</para>
73
<para>l'image de disque virtuel <computeroutput>VM Example.vdi</computeroutput>.</para>
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>, and 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
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>
97
<title>Machines créées par des versions de VirtualBox antérieures à 4.0</title>
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 szstème de fichiers d'alors.</para>
103
<para>Avant la version 4.0, VirtualBox séparait les fichiers des
104
paramètres de la machine des images de disque virtuel. Les fichiers de
105
paramétrages 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>
117
<para>L'ancienne organisation avait plusieurs gros inconvénients.<orderedlist>
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>
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
presqu'impossible si la machine avait des instantanés et, donc, des
132
images de différenciation.</para>
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>
142
</orderedlist></para>
144
<para>Si les nouvelles VMs créées avec VirtualBox 4.0 ou supérieur
145
respecteront 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>
153
<title>Données globales de configuration</title>
155
<para>Outre les fichiers des machines virtuelles, VirtualBox gère des
156
données globales de configuration. Sur Linux et Solaris, depuis as of 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>
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>
173
<para>VirtualBox stocke essentiellement dans ce répertoire son fichier
174
de paramètres globaux, un autre fichier XMK 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>
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, ce ne sera pas des retistres de médias
187
globaux ; avec VirtualBox 4.0, chaque fichier XML d'une machine a
188
son propre registre de médias.</para>
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>
199
<title>Résumé des des modifications de la configuration de 4.0</title>
202
<title>ignoreme</title>
209
<entry><emphasis role="bold">Avant 4.0</emphasis></entry>
211
<entry><emphasis role="bold">4.0 ou supérieur</emphasis></entry>
215
<entry>Dossier par défaut des machines</entry>
217
<entry><computeroutput>$HOME/.VirtualBox/Machines</computeroutput></entry>
219
<entry><computeroutput>$HOME/VirtualBox
220
VMs</computeroutput></entry>
224
<entry>Emplacement des images de disque</entry>
226
<entry><computeroutput>$HOME/.VirtualBox/HardDisks</computeroutput></entry>
228
<entry>In each machine's folder</entry>
232
<entry>Extension des fichiers de paramètres de la machine</entry>
234
<entry><computeroutput>.xml</computeroutput></entry>
236
<entry><computeroutput>.vbox</computeroutput></entry>
240
<entry>Registre de médias</entry>
242
<entry>Fichier <computeroutput>VirtualBox.xml</computeroutput>
245
<entry>Chaque fichier des paramètres d'une machine</entry>
249
<entry>Enregistrement des médias</entry>
251
<entry>Ouverture/fermeture explicite obligatoire</entry>
253
<entry>Automatique après la connexion</entry>
261
<title>Fichiers XML de VirtualBox</title>
263
<para>VirtualBox utilise l'XML tant pour les fichiers des paramètres
264
de la machine que pour le fichier de configuration global,
265
<computeroutput>VirtualBox.xml</computeroutput>.</para>
267
<para>Tous les fichiers XML de VirtualBox sont versionnés. Quand un nouveau
268
fichier de paramètres est créé (par exemple parce qu'on crée une nouvelle
269
machine virtuelle), VirtualBox utilise automatiquement le format des
270
paramètres de la version actuelle de VirtualBox. Il se peut que ces
271
fichiers ne soient pas lus si vous rétrogradez à une version plus
272
ancienne de VirtualBox. Cependant, quand VirtualBox rencontre un fichier
273
de paramètres d'une ancienne version (comme après une mise à jour de
274
VirtualBox), il essaie autant que possible de garder le format des
275
paramètres. Il ne mettra à jour en silence les fichiers des paramètres
276
que si les paramètres actuels ne peuvent pas être exprimés dans l'ancien
277
format, par exemple parce que vous avez activé une fonction qui n'était
278
pas présente dans l'ancienne version de VirtualBox.<footnote>
279
<para>Par exemple, avant VirtualBox 3.1, il n'était possible que d'activer
280
ou de désactiver un seul lecteur DVD dans une machine virtuelle.
281
S'il a été activé, cela serait toujours possible sur le deuxième
282
maître du contrôleur IDE. Avec VirtualBox 3.1, on peut connecter
283
des lecteurs DVD à un slot de son choix sur un contrôleur de son choix,
284
donc ils pourraient être sur le deuxième esclave d'un contrôleur IDE
285
ou sur un slot SATA. Si vous avez un fichier de paramètres d'une
286
machine d'une ancienne version et si vous mettez à jour
287
VirtualBox vers la 3.1 et si vous déplacez le lecteur DVD de sa
288
position par défaut, on ne peut pas l'exprimer dans l'ancien format
289
des paramètres ; le fichier XML de la machine serait écrit dans
290
le nouveau format et une copie de sauvegarde de l'ancien format serait
292
</footnote> Dans ces cas-là, VirtualBox sauvegarde le fichier des anciens
293
paramètres dans le répertoire de configuration de la machine virtuelle.
294
Si vous avez besoin de revenir à une ancienne version de VirtualBox,
295
vous devrez recopier à la main ces fichiers de sauvegarde.</para>
297
<para>Nous ne documentons volontairement pas les spécifications des fichiers
298
XML de VirtualBox car nous nous réservons le droit de les modifier à l'avenir.
299
Nous vous suggérons donc fortement de ne pas éditer ces fichiers à la main.
300
VirtualBox offre un accès complet à ses données de configuration par son
301
outil en ligne de commande <computeroutput>VBoxManage</computeroutput>
302
(voir le <xref linkend="vboxmanage" />) et son API (voir le <xref
303
linkend="VirtualBoxAPI" />).</para>
307
<sect1 id="technical-components">
308
<title>Exécutables et composants de VirtualBox</title>
310
<para>VirtualBox a été conçu pour être modulaire et flexible. Quand on ouvre
311
l'interface graphique (GUI) de VirtualBox et qu'on démarre une VM,
312
au moins trois processus fonctionnent :<orderedlist>
314
<para><computeroutput>VBoxSVC</computeroutput>, le processus du service
315
de VirtualBox qui fonctionne toujours en tâche de fond. Ce processus
316
est lancé automatiquement par le processus du premier client
317
VirtualBox (la GUI, <computeroutput>VBoxManage</computeroutput>,
318
<computeroutput>VBoxHeadless</computeroutput>, le service web ou
319
autres) et il s'arrête peu de temps après que le dernier client a
320
quitté. Le service est responsable d'archiver, maintenir l'état de
321
toutes les VMS et de la communication entre les composants de VirtualBox.
322
Cette communication est implémentée via COM/XPCOM.<note>
323
<para>Quand nous parlons de "clients" ici, nous voulons dire
324
les clients locaux d'un processus serveur
325
<computeroutput>VBoxSVC</computeroutput> en particulier, pas les
326
clients sur un réseau. VirtualBox utilise son propre concept
327
client/serveur pour permettre à ses processus de coopérer, mais
328
tous ces processus tournent sous le même compte utilisateur du
329
système d'exploitation hôte, et c'est entièrement transparent
330
pour l'utilisateur.</para>
335
<para>Le processus de la GUI,, <computeroutput>VirtualBox</computeroutput>,
336
une application client basée sur la bibliothèque multiplateformes
337
Qt. Lancée sans l'option <computeroutput>--startvm</computeroutput>,
338
cette application agit comme un gestionnaire de VirtualBox, en
339
affichant les VMs et leurs paramètres. Elle communique alors les
340
paramètres et les changements d'état à <computeroutput>VBoxSVC</computeroutput>
341
et elle répercute les changements subis par d'autres moyens comme
342
<computeroutput>VBoxManage</computeroutput>.</para>
346
<para>Si on lance l'application client <computeroutput>VirtualBox</computeroutput>
347
avec l'argument <computeroutput>--startvm</computeroutput>, elle
348
charge la bibliothèque VMM qui inclut l'hyperviseur proprement dit
349
et qui lance une machine virtuelle et offre une entrée et une sortie
352
</orderedlist></para>
354
<para>Toutes les interfaces de VirtualBox (client) communiqueront avec le
355
processus du service et elles peuvent contrôler et répercuter l'état actuel.
356
Par exemple, tant le selecteur de VM que la fenêtre de VM ou VBoxManage peuvent
357
être utilisés pour mettre en pause la VM en fonction, les autres composants
358
reflèteront toujours le changement d'état.</para>
360
<para>La GUI de VirtualBox n'est qu'une des nombreuses interfaces (client)
361
disponibles. La liste complète comprise dans VirtualBox est :<orderedlist>
363
<para><computeroutput>VirtualBox</computeroutput>, l'interface Qt
364
implémentant le gestionnaire et les VMS en fonction ;</para>
368
<para><computeroutput>VBoxManage</computeroutput>, une alternative
369
moins conviviale mais plus puissante, décrite au <xref
370
linkend="vboxmanage" />.</para>
374
<para><computeroutput>VBoxSDL</computeroutput>, une interface graphique
375
simple basée sur la bibliothèque SDL ; voir <xref
376
linkend="vboxsdl" />.</para>
380
<para><computeroutput>VBoxHeadless</computeroutput>, une interface de
381
VM qui ne fournit pas directement de sortie graphiqke et d'entrée
383
mais qui permet une redirection par VirtualBox Remote Desktop Extension;
384
voir <xref linkend="vboxheadless" />.</para>
388
<para><computeroutput>vboxwebsrv</computeroutput>, le processus du
389
service web de VirtualBox qui permet de contrôler un hôte VirtualBox à
390
distance. Ceci est décrit en détails dans le manuel de référence
391
du VirtualBox Software Development Kit (SDK) ; merci de voir le
392
<xref linkend="VirtualBoxAPI" /> pour des détails.</para>
396
<para>Le shell Python de VirtualBox, une alternative en Python à
397
VBoxManage. Elle est aussi décrite dans le manuel de référence du SDK.</para>
399
</orderedlist></para>
401
<para>En interne, VirtualBox consiste beaucoup plus d'interfaces
402
séparées. Vous pourriez les rencontrer en analysant les messages d'erreur
403
internes ou les fichiers journaux. Parmi elles, on compte :</para>
407
<para>IPRT, une bibliothèque d'exécution portable qui forme une couche
408
d'abstraction d'accès aux fichiers, du filage (threading), la manipulation
409
de chaînes, etc. Chaque fois que VirtualBox accède aux fonctions du
410
système hôte, il le fait via cette bibliothèque pour une portabilité
411
multiplateformes.</para>
415
<para>VMM (Virtual Machine Monitor), le cœur de l'hyperviseur.</para>
419
<para>EM (Execution Manager), contrôle l'exécution d'un code invité.</para>
423
<para>REM (Recompiled Execution Monitor), fournit une émulation logicielle
424
des instructions du processeur.</para>
428
<para>TRPM (Trap Manager), intercepte et traite les traps et les
429
exceptions de l'invité.</para>
433
<para>HWACCM (Hardware Acceleration Manager), offre un support pour
434
VT-x et AMD-V.</para>
438
<para>PDM (Pluggable Device Manager), une interface abstraite entre le
439
VMM et les périphériques émulés qui sépare lese implémentations du
440
périphérique de l'intérieur du VMM et qui facilite l'ajout de nouveaux
441
périphériques émulés. Par PDM, des développeurs tiers peuvent ajouter
442
de nouveaux périphériques virtuels à VirtualBox, sans devoir modifier
443
VirtualBox lui-même.</para>
447
<para>PGM (Page Manager), un composant contrôlant la pagination de
452
<para>PATM (Patch Manager), corrige le code de l'invité pour améliorer
453
et accélérer la virtualisation logicielle.</para>
457
<para>TM (Time Manager), gère les horloges et tous les aspects de l'heure
462
<para>CFGM (Configuration Manager), fournit une structure arborescente
463
qui garde les paramètres de configuration de la VM et tous les périphériques
468
<para>SSM (Saved State Manager), enregistre et charge l'état d'une VM.</para>
472
<para>VUSB (Virtual USB), une couche USB qui sépare les contrôleurs USB
473
émulés des contrôleurs de l'hôte et des périphériques USB ; ceci
474
active également l'USB distant.</para>
478
<para>DBGF (Debug Facility), un débogueur de VM intégré.</para>
482
<para>VirtualBox émule un certain nombre de périphériques pour offrir
483
l'environnement matériel dont ont besoin divers invités. La plupart de
484
ces périphériques standards se trouvent dans beaucoup de machines
485
compatibles PC et sont largement supportés par les systèmes d'exploitation
486
invités. Pour les périphériques réseaux et de stockage en particulier,
487
il existe plusieurs options pour que les périphériques émulés accèdent
488
au matériel sous-jacent. Ces périphériques sont gérés par
493
<para>Les suppléments invité pour divers systèmes d'exploitation invités.
494
Il s'agit de code installé dans les machines virtuelles ; voir <xref
495
linkend="guestadditions" />.</para>
499
<para>Le composant "Main" est spécial : il croise tous les bits
500
ci-dessus et c'est la seule API publique fournie par VirtualBox. Tous
501
les processus clients listés ci-dessus n'utilisent que cettte API et
502
n'accèdent jamais directement aux composants de l'hyperviseur. Il s'en
503
suit que des applications tierces utilisant l'API principale de VirtualBox
504
peuvent s'appuyer sur le fait qu'elle est toujours bien testée et que
505
toutes les possibilités de VirtualBox sont complètement présentées. C'est
506
cette API qui est décrite dans le manuel de référence du SDK de
507
VirtualBox indiqué ci-dessus (de nouveau, voir le <xref linkend="VirtualBoxAPI" />).</para>
513
<title>Virtualisation matérielle vs. logicielle</title>
515
<para>VirtualBox permet aux logiciels de la machine virtuelle de s'exécuter
516
directement sur le processeur de l'hôte, mais il utilise une gamme de
517
techniques complexes pour intercepter les opérations interférant avec votre
518
hôte. Chaque fois que l'invité essaie de faire quelque chose de potentiellement
519
dangereux pour votre ordinateur et ses données, VirtualBox s'interpose et
520
rentre en action. En particulier, pour beaucoup de matériel auquel croit
521
avoir accès l'invité, VirtualBox simule un certain environnement "virtuel"
522
selon la façon dont vous avez configuré une machine virtuelle. Par exemple,
523
quand l'invité cherche à accéder à un disque dur, VirtualBox redirige ces
524
requêtes vers ce que vous avez configuré comme étant le disque dur virtuel
525
de la machine virtuelle -- en principe, un fichier image sur votre hôte.</para>
527
<para>Malheureusement, la plateforme x86 n'a jamais été conçue pour pour
528
être virtualisée. La détection des
529
situations où VirtualBox doit contrôler le code invité qui s'exécute, comme
530
décrit ci-dessus, est difficile. Il existe deux façons de faire cela :<itemizedlist>
532
<para>Depuis 2006, les processeurs Intel et AMD supportent ce qu'on
533
appelle la <emphasis role="bold">"virtualisation matérielle"</emphasis>.
534
Cela signifie que ces processeurs peuvent aider VirtualBox à intercepter
535
des opérations potentiellement dangereuses que pourrait essayer de
536
faire le système d'exploitation invité et ils facilitent la présentation
537
de matériel virtuel à une machine virtuelle.</para>
539
<para>Ces fonctionnalités du matériel diffèrent entre les processeurs
540
Intel et AMD. Intel a appelé sa techno <emphasis
541
role="bold">VT-x</emphasis> ;; AMD a nommé la leur <emphasis
542
role="bold">AMD-V</emphasis>. Le support d'Intel et d'AMD de la
543
virtualisation est très différent dans le détail, mais pas si différent
544
dans le principe.<note>
545
<para>Sur de nombreux szstèmes, les fonctions de virtualisation
546
matérielle doivent être préalablement activées dans le BIOS avant
547
de pouvoir être utilisées par VirtualBox.</para>
552
<para>Contrairement aux autres logiciels de virtualisation, pour
553
de nombreux scénari d'utilisation, VirtualBox <emphasis>n'exige pas</emphasis>
554
que les fonctions de virtualisation matérielle soient présentes.
555
Par des techniques sophistiquées, VirtualBox virtualise beaucoup
556
de systèmes d'exploitation invités complets de manière
557
<emphasis role="bold">logicielle</emphasis>. Cela signifie que vous
558
pouvez lancer des machines virtuelles même sur d'anciens processeurs
559
qui ne supportent pas la virtualisation matérielle.</para>
561
</itemizedlist></para>
563
<para>Même si VirtualBox n'exige pas toujours la virtualisation matérielle,
564
son activation est <emphasis>nécessaire</emphasis> dans les scénari suivants :<itemizedlist>
566
<para>Certains systèmes d'exploitation, rares, comme OS/2, utilisent
567
des instructions processeur très ésotériques qui ne sont pas supportées
568
par notre virtualisation logicielle. Pour les machines virtuelles
569
configurées pour contenir un tel système d'exploitation, la
570
virtualisation matérielle est activée automatiquement.</para>
574
<para>Le support des invités 64 bits de VirtualBox (ajouté avec la
575
version 2.0) et le multiprocessing (SMP, ajouté avec la version 3.0)
576
exigent tous deux l'activation de la virtualisation matérielle (ce n'est
577
tout de même pas une grosse limite vu l'immense majorité des processeurs
578
64 bits et multi cœurs actuels incluant lavirtualisation matérielle ;
579
les exceptions à cette règle étant par exemple les anciens processeurs
580
Intel Celeron et AMD Opteron.)</para>
582
</itemizedlist></para>
585
<para>Ne lancez pas d'autres hyperviseurs (produits de virtualisation
586
open-source ou propriétaires) en même temps que VirtualBox ! Si
587
plusieurs hyperviseurs peuvent, en principe, être <emphasis>installés</emphasis>
588
en parallèle, n'essayez pas de <emphasis>lancer</emphasis> plusieurs
589
machines virtuelles à partir d'hyperviseurs concurrents en même temps.
590
VirtualBox ne peut pas savoir ce qu'un autre hyperviseur essaie de faire
591
sur un même hôte, et surtout si plusieurs produits essaient d'utiliser la
592
virtualisation matérielle, les fonctions telles que VT-x, cela peut planter
593
tout l'hôte. De plus, dans VirtualBox, vous pouvez mélanger la virtualisation
594
logicielle et matérielle quand vous lancez plusieurs VMs. Dans certains cas,
595
une petite perte de performances sera inévitable si vous mélangez des
596
VMs avec virtualisation VT-x et logicielle. Nous recommandons de ne pas
597
mélanger les modes de virtualisation si la performance maximum et
598
une faible overhead sont essentiels. Cela <emphasis>ne s'applique pas</emphasis>
604
<title>Détails sur la virtualisation logicielle</title>
606
<para>L'implémentation de la virtualisation sur les processeurs x86 sans
607
le support de la virtualisation matérielle est une tâche extraordinairement
608
complexe car l'architecture du processeur n'a pas été conçue pour être
609
virtualisée. On peut résoudre en général les problèmes, mais au prix de
610
performances réduites. Ainsi, il existe un conflit constant entre les
611
performances de virtualisation et et son soin.</para>
613
<para>Le jeu d'instructions x86 a été conçu au départ dans les années 1970 et
614
subi des modifications significatives avec l'ajout d'un mode protégé dans
615
les années 1980s avec l'architecture du processeur 286, puis à nouveau avec
616
l'Intel 386 et l'architecture 32 bits. Alors que le 386 avait un
617
support de virtualisation vraiment limité pour les opérations en mode réel,
618
(le mode V86, utilisé par la "DOS Box" de Windows 3.x et d'OS/2 2.x), aucun
619
pport n'existait pour virtualiser toute l'architecture.</para>
621
<para>En théorie, la virtualisation logicielle n'est pas complexe en soi.
622
Outre les quatre niveaux de privilèges ("rings") fournis par le matériel
623
(dont en général on n'utilise que deux : ring 0 pour le mode noyau et ring 3
624
pour le mode utilisateur), il faut faire la différence entre le "contexte
625
hôte" et le "contexte invité".</para>
627
<para>Dans le "contexte hôte", tout est comme s'il n'y avait pas d'hyperviseur
628
actif. Cela pourrait être le mode actif si une autre application de votre
629
hôte consomme du temps processeur ; dans ce cas, il existe un mode
630
ring 3 hôte et un mode ring 0 hôte. L'hyperviseur n'est pas impliqué.</para>
632
<para>Par contre, dans le "contexte invité", une machine virtuelle est active.
633
Tant que le code invité s'exécute en ring 3, ce n'est pas très problématique
634
vu qu'un hyperviseur peut paramétrer les tableaux des pages correctement et
635
exécuter ce code de manière native sur le processeur. Les problèmes arrivent
636
sur la manière d'intercepter ce que fait le noyau de l'invité.</para>
638
<para>Il y a plusieurs solutions possibles à ces problèmes. Une approche
639
est l'émulation logicielle totale, ce qui implique généralement une recompilation.
640
A savoir que tout le code qui doit être exécuté par l'invité est analysé,
641
transformé sous une forme qui n'autorisera pas l'invité à modifier et à
642
voir l'état réel du processeur, lequel l'exécutera simplement. Ce processus
643
est bien sûr très complexe et coûteux en termes de performances. (VirtualBox
644
contient un recompilateur basé sur QEMU qu'on peut utiliser pour une
645
émulation logicielle pure, mais le recompilateur n'est activé que dans
646
des situations particulières, décrites ci-dessous.)</para>
648
<para>Une autre solution possible est la paravirtualisation, où seuls les
649
OS invités spécialement modifiés sont autorisés à s'exécuter. De cette manière,
650
la plupart des accès matériels sont rendus abstraits et toutes les fonctions
651
qui accèderaient normalement au matériel ou à l'état privilégié du processeur
652
se basent plutôt sur l'hyperviseur. La paravirtualisation peut donner
653
de bonnes fonctionnalités et de bonnes performances sur des processeurs
654
x86 standards, mais cela ne peut marcher que si l'OS invité peut être
655
modifié, ce qui n'est évidemment pas toujours le cas.</para>
657
<para>VirtualBox choisit une approche différente. Quand uo démarre une
658
machine virtuelle par son pilote noyau du support ring-0, VirtualBox a
659
réglé le système hôte pour qu'il puisse lancer nativement la plupart du
660
code invité, mais il s'insère lui-même "en bas" de l'image. Il peut alors
661
supposer le contrôle lorsque c'est nécessaire -- si une instruction privilégiée
662
est exécutée, l'invité plante (traps) (en particulier car un accès au registre
663
E/S a été tenté et un périphérique doit être virtualisé) ou car des interruptions se produisent. VirtualBox peut
664
alors gérer cela et soit acheminer une requête vers un périphérique virtuel,
665
soit, si possible, déléguer la gestion de tels éléments à l'OS hôte ou
666
invité. Dans le contexte invité, VirtualBox peut être donc dans un des trois
671
<para>Le code invité ring 3 s'exécute sans modifications, à pleine
672
vitesse, autant que possible. Le nombre de fautes sera généralement
673
faible (sauf si l'invité autorise l'E/S du port depuis ring 3,
674
chose que nous ne pouvons pas faire car nous ne voulons pas que
675
l'invité puisse accéder aux ports réels). On parle aussi de "mode brut",
676
car le code ring-3 de l'invité s'exécute sans modifications.</para>
680
<para>Mour le code invité en ring 0, VirtualBox utilise une astuce
681
savoureuse : il reconfigure l'invité pour que son code ring-0
682
se lance plutôt en ring 1 (ce qui n'est en principe pas utilisé sur les
683
systèmes d'exploitation x86). Il s'en suit que lorsque le code ring-0
684
de l'invité (qui s'exécute en fait en ring 1) tel que le pilote d'un
685
périphérique invité, essaie d'écrire sur un registre E/S ou d'exécuter
686
une instruction non privilégiée, l'hyperviseur de VirtualBox en ring
687
0 "réel" peut prendre le dessus.</para>
691
<para>L'hyperviseur (VMM) peut être actif. Chaque fois qu'une erreur
692
survient, VirtualBox regarde l'instruction problématique et il peut
693
la reléguer à un périphérique virtuel, à l'OS hôte, à l'invité ou
694
il peut le lancer dans le recompilateur.</para>
696
<para>En particulier, on utilise le recompilateur quand le code invité
697
désactive les interruptions et VirtualBox ne peut pas savoir quand
698
on y reviendra (dans ces situations, VirtualBox analyse en fait le
699
code invité en utilisant son propre désassembleur). De plus, certaines
700
instructions privilégiées telles que LIDT doivent être gérées à part.
701
Enfin, tout le code en mode réel ou protégé (comme le code du BIOS,
702
un invité DOS ou un démarrage de système d'exploitation) se lance
703
complètement dans un recompilateur.</para>
705
</itemizedlist></para>
707
<para>Malheureusement, cela ne fonctionne que dans une certaine mesure.
708
Entre autres, les situations suivantes nécessitent une gestion spéciale :</para>
712
<para>L'exécution de code ring 0 en ring 1 provoque beaucoup d'erreurs
713
d'instructions supplémentaires car ring 1 n'est pas autorisé à exécuter
714
des instructions privilégiées (dont le ring-0 de l'invité en contient
715
beaucoup). Avec chacune de ces erreurs, le VMM doit s'arrêter et
716
émuler le code pour obtenir le comportement désiré. Si cela fonctionne,
717
l'émulation de milliers d'erreurs est très coûteuse et très pénalisante
718
en performances de l'invité virtualisé.</para>
722
<para>Il existe des défauts dans l'implémentation de ring 1 de
723
l'architecture x86 qui n'ont jamais été corrigés. Certaines instructions
724
qui <emphasis>planteraient</emphasis> même en ring 1 ne le font pas.
725
Cela concerne par exemple les paires d'instructions LGDT/SGDT, LIDT/SIDT,
726
ou POPF/PUSHF. Alors que l'opçration "load" est privilégiée et peut
727
donc planter, l'instruction "store" réussit toujours. Si l'invité est
728
autorisé à les exécuter, il verra l'état réel du PC et pas celui
729
virtualisé. L'instruction CPUID a également le même problème.</para>
733
<para>Un hyperviseur a en général besoin de réserver certaines parties
734
de l'espace d'adresse de l'invité (tant l'espace d'adresse liénaire
735
que les sélecteurs) pour son propre usage. Ce n'est pas complètement
736
transparent pour l'OS invité et cela peut provoquer des conflits.</para>
740
<para>L'instruction SYSENTER (utilisée pour les appels système) exécutée
741
par une application en fonction dans un OS invité transite toujours
742
par le ring 0. Mais c'est là où l'hyperviseur se lance et pas l'OS
743
invité. Dans ce cas, l'hyperviseur doit bloquer et émuler l'instruction
744
même quand ce n'est pas souhaitable.</para>
748
<para>Les registres de segments du processeur contiennent un cache
749
de descripteur "caché" inaccessible de manière logicielle. L'hyperviseur
750
ne peut pas lire, enregistrer ou restaurer cet état, mais l'OS invité
751
peut l'utiliser.</para>
755
<para>Certaines ressources doivent (et peuvent) être neutralisées par
756
l'hyperviseur, mais l'accès est si fréquent que cela crée une perte
757
significative de performances. Un exemple réside dans le registre
758
TPR (Task Priority) en mode 32 bits. Les accès à ce registre doivent
759
être bloqués par l'hyperviseur, mais certains szstèmes d'exploitation
760
invités (en particulier Windows et Solaris) écrivent très souvent
761
dans ce registre, ce qui porte une atteinte certaine aux performances
762
de virtualisation.</para>
764
</orderedlist></para>
766
<para>Pour corriger ces problèmes de performances et de sécurité, VirtualBox
767
contient un gestionnaire d'analyse et de scan de code
768
(Code Scanning and Analysis Manager (CSAM)), qui désassemble le code invité,
769
et un gestionnaire de correctifs (Patch Manager (PATM)), qui peut le remplacer
770
pendant l'exécution.</para>
772
<para>Avant d'exécuter du code ring 0, CSAM le scanne de manière récursive
773
pour trouver des instructions problématiques. PATM le corrige <emphasis>in-situ
774
</emphasis>, c'est-à-dire qu'il remplace l'instruction par un passage à la
775
mémoire de l'hyperviseur, où un générateur intégré a mis une implémentation
776
plus convenable. En réalité, c'est une tâche très complexe car il existe
777
de nombreuses situations compliquées à trouver et à gérer correctement. Donc,
778
vu son actuelle complexité, vous pourriez trouver que PATM est un recompilateur
779
avancé <emphasis>in-situ</emphasis> recompiler.</para>
781
<para>De plus, à chaque fois qu'une erreur survient, VirtualBox analyse
782
le code problématique pour déterminer s'il est possible de le corriger afin
783
de l'empêcher de provoquer davantage futures d'erreurs. Cette approche
784
fonctionne bien en pratique et améliore de façon drastique les performances
785
de la virtualisation logicielle.</para>
789
<title>Détails sur la virtualisation matérielle</title>
791
<para>Avec VT-x d'Intel, il existe deux modes opératoires du processeur :
792
le mode racine VMM et le mode non-racine.<itemizedlist>
794
<para>En mode racine, le processeur se comporte beaucoup comme les
795
anciennes générations de processeurs sans le support VT-x. Il y a quatre
796
niveaux de privilèges ("rings") et le même jeu d'instructions est
797
supporté avec, en plus, des instructions spécifiques de virtualisation.
798
Le mode racine est ce que le système d'exploitation hôte utilise sans
799
virtualisation, et il est aussi utilisé par l'hyperviseur quand la
800
virtualisation est active.</para>
804
<para>En mode non-racine, le fonctionnement du processeur est très
805
différent. Il y a toujours quatre niveaux de privilèges et le même
806
jeu d'instructions, mais une nouvelle structure, qui s'appelle VMCS
807
(Virtual Machine Control Structure), contrôle désormais le fonctionnement
808
du processeur et elle détermine la manière dont se comportent certaines
809
instructions. Le mode non-racine est celui dans lequel les systèmes invités
812
</itemizedlist></para>
814
<para>Le passage du mode racine au mode non racine s'appelle "l'entré1 VM",
815
celui en sens invers s'appelle "Quitter VM". Le VMCS inclut une zone d'état
816
invité et hôte sauvegardée/restaurée à chaque entrée et sortie en VM.
817
Surtout, les VMMS contrôlent les opérations de l'invité qui feront quitter
820
<para>Les VMCS permettent un contrôle très fin via ce que les invités
821
peuvent et ne peuvent pas faire. Par exemple, un hyperviseur peut autoriser
822
un invité à écrire certains bits dans des registres de contrôle protégés,
823
mais pas dans d'autres. Cela permet une virtualisation efficace dans des cas
824
où les invités peuvent être autorisés à écrire des bits de contrôle sans
825
gêner l'hyperviseur, tout en les empêchant de modifier les bits de contrôle
826
dont l'hyperviseur a besoin pour avoir un contrôle total. Le VMMS fournit
827
aussi un contrôle via l'affichage d'interruptions et les exceptions.</para>
829
<para>Chaque fois qu'une instruction ou un événement fait quitter une VM,
830
le VMCS contient des informations sur les raisons de la sortie, ainsi que,
831
souvent, des détails environnants. Par exemple, si une écriture dans le
832
registre CR0 fait quitter, l'instruction en cause est enregistrée, ainsi
833
que le fait qu'un accès en écriture sur le registre de contrôle a prurnqué
834
la sortie, et des informations sur la le registre source et destination.
835
L'hyperviseur peut ainsi gérer efficacement la condition sans avoir besoin
836
de techniques avancées telles que CSAM et PATM décrits ci-dessus.</para>
838
<para>VT-x évite intrinsèquement plusieurs problèmes qui se posent avec la
839
virtualisation logicielle. L'invité a son propre espace d'adresse distinct,
840
qu'il ne partage pas avec l'hyperviseur, ce qui élimine les plantages
841
potentiels. De plus, le code du noyau de l'OS invité se lance avec le
842
privilège ring 0 en mode non racine VMX, rendant inopérants les problèmes
843
d'exécution de code en ring 0 sur des niveaux moins privilégiés. Par exemple,
844
l'instruction SYSENTER peut faire une transition vers le ring 0 sans problèmes.
845
Naturellement, même en ring 0 en mode non-racine VMX, tous les accès E/S par
846
le code invité amène toujours la VM à quitter, permettant l'émulation
847
de périphérique.</para>
849
<para>La plus grosse différence entre VT-x et AMD-V est qu'AMD-V fournit
850
en environnement de virtualisation plus complet. VT-x exige que le code
851
non-racine VMX s'exécute en mode pagination activée, ce qui rejette la
852
virtualisation matérielle de logiciels dont le code est en mode réel et en
853
mode protégé non paginé. Cela n'inclut en général que les firmwares et les
854
chargeurs d'OS, néanmoins cela complique l'implémentation d'un hyperviseur
855
avec VT-x. AMD-V n'a pas cette restriction.</para>
857
<para>Bien entendu, la virtualisation matérielle n'est pas parfaite. Par
858
rapport à la virtualisation logicielle, la charge des fins des VMs est
859
relativement élevée. Cela pose des problèmes aux périphériques dont l'émulation
860
requiet un grand nombre de blocages (trass). Par exemple, avec le périphérique
861
VGA en mode 16 couleurs, mon seulement tous les accès au port en E/S, mais
862
aussi tous les accès à la mémoire tampon (framebuffer) doivent être
866
<sect1 id="nestedpaging">
867
<title>Vagination nestée et VPIDs</title>
869
<para>En plus de la virtualisation matérielle "brute", votre processeur peut
870
supporter aussi des techniques sophistiquées supplémentaires :<footnote>
871
<para>VirtualBox 2.0 a ajouté le support de la pagination nestée d'AMD ;
872
le support de l'EPT et des VPIDs d'Intel a été ajouté à la version 2.1.</para>
873
</footnote><itemizedlist>
875
<para>Une fonctionnalité récente, qui s'appelle la
876
<emphasis role="bold">"pagination nestée"</emphasis> implémente la
877
gestion de la mémoire dans le matériel, ae qui peut beaucoup accélérer
878
la virtualisation matérielle puisque ces tâches n'ont plus besoin d'être
879
accomplies par le logiciel de virtualisation.</para>
881
<para>Avec la pagination nested, le matériel fournit un autre niveau
882
d'indirection en passant du linéaire aux adresses physiques. Les
883
tables de page fonctionnent comme avant mais les adresses linéaires
884
sont désormais d'abord traduites en adresses physiques de "l'invité"
885
et pas directement en adresses physiques. Il existe maintenant un
886
nouveau jeu de registres de pagination sous le mécanisme depagination
887
traditionnel et qui traduit les adresses physiques invitées en adresses
888
physiques de l'hôte, qui sont utilisées pour accéder à la mémoire.</para>
890
<para>La pagination nested élimine la charge causée par les fins de
891
VM et les accès aux tables de pages. Par définition, avec les tables
892
de pages nested, l'invité peut gérer la pagination sans que l'hyperviseur
893
n'intervienne. La pagination nestée améliore ainsi substantiellement
894
les performances de virtualisation.</para>
896
<para>Sur les processeurs AMD, la pagination nested est disponible
897
depuis l'architecture Barcelona (K10) -- on l'appelle maintenant la
898
"rapid virtualization indexing" (RVI). Intel a ajouté le support de
899
la pagination nested, qu'ils appellent la "extended page tables" (EPT),
900
à leurs processeurs Core i7 (Nehalem).</para>
902
<para>Si la pagination nested est activée, l'hyperviseur de VirtualBox
903
peut également utiliser <emphasis role="bold">large pages</emphasis>,
904
pour réduire l'utilisation du TLB et la charge. Cela peut provoquer
905
une amélioration jusqu'à 5% des performances. Pour activer cette
906
fonctionnalité pour une VM, vous avez besoin d'utiliser la commande
907
<computeroutput>VBoxManage modifyvm
908
</computeroutput><computeroutput>--largepages</computeroutput> ;
909
voir <xref linkend="vboxmanage-modifyvm" />.</para>
913
<para>Sur les processeurs Intel, une autre fonction matérielle, qui
914
s'appelle <emphasis role="bold">"Virtual Processor Identifiers" (VPIDs)</emphasis>,
915
peut beaucoup accélérer le changement de contexte en réduisant le
916
besoin de flasher beaucoup les Translation Lookaside Buffers
917
(TLBs) du processeur.</para>
919
<para>Pour activer ces fonctions pour une VM, vous devez utiliser
920
les commandes <computeroutput>VBoxManage modifyvm --vtxvpid</computeroutput> and
921
<computeroutput>--largepages</computeroutput> ; voir <xref
922
linkend="vboxmanage-modifyvm" />.</para>
924
</itemizedlist></para>