~ubuntu-branches/ubuntu/trusty/virtualbox-lts-xenial/trusty-proposed

« back to all changes in this revision

Viewing changes to doc/manual/fr_FR/user_Technical.xml

  • Committer: Package Import Robot
  • Author(s): Gianfranco Costamagna
  • Date: 2016-02-23 14:28:26 UTC
  • Revision ID: package-import@ubuntu.com-20160223142826-bdu69el2z6wa2a44
Tags: upstream-4.3.36-dfsg
Import upstream version 4.3.36-dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 fonctionne VirtualBox "sous
 
11
  le capeau".</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é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>
 
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&#xA0;:</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&#xA0;: 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
 
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>&#xA0;;; 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 szstème de fichiers d'alors.</para>
 
102
      
 
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>
 
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
            presqu'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
      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>
 
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 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&#xA0;; 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 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>
 
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, ce ne sera pas des retistres de médias 
 
187
     globaux&#xA0;; 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 des modifications de la configuration de 4.0</title>
 
200
 
 
201
      <table>
 
202
        <title>ignoreme</title>
 
203
 
 
204
        <tgroup cols="3">
 
205
          <tbody>
 
206
            <row>
 
207
              <entry></entry>
 
208
 
 
209
              <entry><emphasis role="bold">Avant 4.0</emphasis></entry>
 
210
 
 
211
              <entry><emphasis role="bold">4.0 ou supérieur</emphasis></entry>
 
212
            </row>
 
213
 
 
214
            <row>
 
215
              <entry>Dossier par défaut des machines</entry>
 
216
 
 
217
              <entry><computeroutput>$HOME/.VirtualBox/Machines</computeroutput></entry>
 
218
 
 
219
              <entry><computeroutput>$HOME/VirtualBox
 
220
              VMs</computeroutput></entry>
 
221
            </row>
 
222
 
 
223
            <row>
 
224
              <entry>Emplacement des images de disque</entry>
 
225
 
 
226
              <entry><computeroutput>$HOME/.VirtualBox/HardDisks</computeroutput></entry>
 
227
 
 
228
              <entry>In each machine's folder</entry>
 
229
            </row>
 
230
 
 
231
            <row>
 
232
              <entry>Extension des fichiers de paramètres de la machine</entry>
 
233
 
 
234
              <entry><computeroutput>.xml</computeroutput></entry>
 
235
 
 
236
              <entry><computeroutput>.vbox</computeroutput></entry>
 
237
            </row>
 
238
 
 
239
            <row>
 
240
              <entry>Registre de médias</entry>
 
241
 
 
242
              <entry>Fichier <computeroutput>VirtualBox.xml</computeroutput>
 
243
              global</entry>
 
244
 
 
245
              <entry>Chaque fichier des paramètres d'une machine</entry>
 
246
            </row>
 
247
 
 
248
            <row>
 
249
              <entry>Enregistrement des médias</entry>
 
250
 
 
251
              <entry>Ouverture/fermeture explicite obligatoire</entry>
 
252
 
 
253
              <entry>Automatique après la connexion</entry>
 
254
            </row>
 
255
          </tbody>
 
256
        </tgroup>
 
257
      </table>
 
258
    </sect2>
 
259
 
 
260
    <sect2>
 
261
      <title>Fichiers XML de VirtualBox</title>
 
262
 
 
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>
 
266
 
 
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&#xA0;; le fichier XML de la machine serait écrit dans
 
290
          le nouveau format et une copie de sauvegarde de l'ancien format serait 
 
291
          gardée.</para>
 
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>
 
296
 
 
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>
 
304
    </sect2>
 
305
  </sect1>
 
306
 
 
307
  <sect1 id="technical-components">
 
308
    <title>Exécutables et composants de VirtualBox</title>
 
309
 
 
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&#xA0;:<orderedlist>
 
313
        <listitem>
 
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>
 
331
            </note></para>
 
332
        </listitem>
 
333
 
 
334
        <listitem>
 
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>
 
343
        </listitem>
 
344
 
 
345
        <listitem>
 
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
 
350
          à l'invité.</para>
 
351
        </listitem>
 
352
      </orderedlist></para>
 
353
 
 
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>
 
359
 
 
360
    <para>La GUI de VirtualBox n'est qu'une des nombreuses interfaces (client) 
 
361
    disponibles. La liste complète comprise dans VirtualBox est&#xA0;:<orderedlist>
 
362
        <listitem>
 
363
          <para><computeroutput>VirtualBox</computeroutput>, l'interface Qt
 
364
          implémentant le gestionnaire et les VMS en fonction&#xA0;;</para>
 
365
        </listitem>
 
366
 
 
367
        <listitem>
 
368
          <para><computeroutput>VBoxManage</computeroutput>, une alternative
 
369
          moins conviviale mais plus puissante, décrite au <xref
 
370
          linkend="vboxmanage" />.</para>
 
371
        </listitem>
 
372
 
 
373
        <listitem>
 
374
          <para><computeroutput>VBoxSDL</computeroutput>, une interface graphique
 
375
          simple basée sur la bibliothèque SDL&#xA0;; voir <xref
 
376
          linkend="vboxsdl" />.</para>
 
377
        </listitem>
 
378
 
 
379
        <listitem>
 
380
          <para><computeroutput>VBoxHeadless</computeroutput>, une interface de
 
381
          VM qui ne fournit pas directement de sortie graphiqke et d'entrée
 
382
          clavier/souris, 
 
383
          mais qui permet une redirection par VirtualBox Remote Desktop Extension;
 
384
          voir <xref linkend="vboxheadless" />.</para>
 
385
        </listitem>
 
386
 
 
387
        <listitem>
 
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)&#xA0;; merci de voir le
 
392
          <xref linkend="VirtualBoxAPI" /> pour des détails.</para>
 
393
        </listitem>
 
394
 
 
395
        <listitem>
 
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>
 
398
        </listitem>
 
399
      </orderedlist></para>
 
400
 
 
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&#xA0;:</para>
 
404
 
 
405
    <itemizedlist>
 
406
      <listitem>
 
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>
 
412
      </listitem>
 
413
 
 
414
      <listitem>
 
415
        <para>VMM (Virtual Machine Monitor), le c&#x153;ur de l'hyperviseur.</para>
 
416
      </listitem>
 
417
 
 
418
      <listitem>
 
419
        <para>EM (Execution Manager), contrôle l'exécution d'un code invité.</para>
 
420
      </listitem>
 
421
 
 
422
      <listitem>
 
423
        <para>REM (Recompiled Execution Monitor), fournit une émulation logicielle
 
424
        des instructions du processeur.</para>
 
425
      </listitem>
 
426
 
 
427
      <listitem>
 
428
        <para>TRPM (Trap Manager), intercepte et traite les traps et les
 
429
        exceptions de l'invité.</para>
 
430
      </listitem>
 
431
 
 
432
      <listitem>
 
433
        <para>HWACCM (Hardware Acceleration Manager), offre un support pour
 
434
        VT-x et AMD-V.</para>
 
435
      </listitem>
 
436
 
 
437
      <listitem>
 
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>
 
444
      </listitem>
 
445
 
 
446
      <listitem>
 
447
        <para>PGM (Page Manager), un composant contrôlant la pagination de
 
448
        l'invité.</para>
 
449
      </listitem>
 
450
 
 
451
      <listitem>
 
452
        <para>PATM (Patch Manager), corrige le code de l'invité pour améliorer
 
453
        et accélérer la virtualisation logicielle.</para>
 
454
      </listitem>
 
455
 
 
456
      <listitem>
 
457
        <para>TM (Time Manager), gère les horloges et tous les aspects de l'heure
 
458
        des invités.</para>
 
459
      </listitem>
 
460
 
 
461
      <listitem>
 
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
 
464
        émulés.</para>
 
465
      </listitem>
 
466
 
 
467
      <listitem>
 
468
        <para>SSM (Saved State Manager), enregistre et charge l'état d'une VM.</para>
 
469
      </listitem>
 
470
 
 
471
      <listitem>
 
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&#xA0;; ceci
 
474
        active également l'USB distant.</para>
 
475
      </listitem>
 
476
 
 
477
      <listitem>
 
478
        <para>DBGF (Debug Facility), un débogueur de VM intégré.</para>
 
479
      </listitem>
 
480
 
 
481
      <listitem>
 
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 
 
489
        PDM.</para>
 
490
      </listitem>
 
491
 
 
492
      <listitem>
 
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&#xA0;; voir <xref
 
495
        linkend="guestadditions" />.</para>
 
496
      </listitem>
 
497
 
 
498
      <listitem>
 
499
        <para>Le composant "Main" est spécial&#xA0;: 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>
 
508
      </listitem>
 
509
    </itemizedlist>
 
510
  </sect1>
 
511
 
 
512
  <sect1 id="hwvirt">
 
513
    <title>Virtualisation matérielle vs. logicielle</title>
 
514
 
 
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>
 
526
 
 
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&#xA0;:<itemizedlist>
 
531
        <listitem>
 
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>
 
538
 
 
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>&#xA0;;; 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>
 
548
            </note></para>
 
549
        </listitem>
 
550
 
 
551
        <listitem>
 
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>
 
560
        </listitem>
 
561
      </itemizedlist></para>
 
562
 
 
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&#xA0;:<itemizedlist>
 
565
        <listitem>
 
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>
 
571
        </listitem>
 
572
 
 
573
        <listitem>
 
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&#x153;urs actuels incluant lavirtualisation matérielle&#xA0;; 
 
579
          les exceptions à cette règle étant par exemple les anciens processeurs
 
580
          Intel Celeron et AMD Opteron.)</para>
 
581
        </listitem>
 
582
      </itemizedlist></para>
 
583
 
 
584
    <warning>
 
585
      <para>Ne lancez pas d'autres hyperviseurs (produits de virtualisation
 
586
      open-source ou propriétaires) en même temps que VirtualBox&#xA0;! 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>
 
599
      à AMD-V.</para>
 
600
    </warning>
 
601
  </sect1>
 
602
 
 
603
  <sect1>
 
604
    <title>Détails sur la virtualisation logicielle</title>
 
605
 
 
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>
 
612
 
 
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>
 
620
 
 
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&#xA0;: 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>
 
626
 
 
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&#xA0;; 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>
 
631
 
 
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>
 
637
 
 
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>
 
647
 
 
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>
 
656
 
 
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
 
667
    états&#xA0;:</para>
 
668
 
 
669
    <para><itemizedlist>
 
670
        <listitem>
 
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>
 
677
        </listitem>
 
678
 
 
679
        <listitem>
 
680
          <para>Mour le code invité en ring 0, VirtualBox utilise une astuce
 
681
          savoureuse&#xA0;: 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>
 
688
        </listitem>
 
689
 
 
690
        <listitem>
 
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>
 
695
 
 
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>
 
704
        </listitem>
 
705
      </itemizedlist></para>
 
706
 
 
707
    <para>Malheureusement, cela ne fonctionne que dans une certaine mesure.
 
708
    Entre autres, les situations suivantes nécessitent une gestion spéciale&#xA0;:</para>
 
709
 
 
710
    <para><orderedlist>
 
711
        <listitem>
 
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>
 
719
        </listitem>
 
720
 
 
721
        <listitem>
 
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>
 
730
        </listitem>
 
731
 
 
732
        <listitem>
 
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>
 
737
        </listitem>
 
738
 
 
739
        <listitem>
 
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>
 
745
        </listitem>
 
746
 
 
747
        <listitem>
 
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>
 
752
        </listitem>
 
753
 
 
754
        <listitem>
 
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>
 
763
        </listitem>
 
764
      </orderedlist></para>
 
765
 
 
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>
 
771
 
 
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>
 
780
 
 
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>
 
786
  </sect1>
 
787
 
 
788
  <sect1>
 
789
    <title>Détails sur la virtualisation matérielle</title>
 
790
 
 
791
    <para>Avec VT-x d'Intel, il existe deux modes opératoires du processeur&#xA0;:
 
792
    le mode racine VMM et le mode non-racine.<itemizedlist>
 
793
        <listitem>
 
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>
 
801
        </listitem>
 
802
 
 
803
        <listitem>
 
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
 
810
          fonctionnent.</para>
 
811
        </listitem>
 
812
      </itemizedlist></para>
 
813
 
 
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
 
818
    la VM.</para>
 
819
 
 
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>
 
828
 
 
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>
 
837
 
 
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>
 
848
 
 
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>
 
856
 
 
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 
 
863
    bloqués.</para>
 
864
  </sect1>
 
865
 
 
866
  <sect1 id="nestedpaging">
 
867
    <title>Vagination nestée et VPIDs</title>
 
868
 
 
869
    <para>En plus de la virtualisation matérielle "brute", votre processeur peut
 
870
    supporter aussi des techniques sophistiquées supplémentaires&#xA0;:<footnote>
 
871
        <para>VirtualBox 2.0 a ajouté le support de la pagination nestée d'AMD&#xA0;;
 
872
        le support de l'EPT et des  VPIDs d'Intel a été ajouté à la version 2.1.</para>
 
873
      </footnote><itemizedlist>
 
874
        <listitem>
 
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>
 
880
 
 
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>
 
889
 
 
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>
 
895
 
 
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>
 
901
 
 
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>&#xA0;;
 
909
          voir <xref linkend="vboxmanage-modifyvm" />.</para>
 
910
        </listitem>
 
911
 
 
912
        <listitem>
 
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>
 
918
 
 
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>&#xA0;; voir <xref
 
922
          linkend="vboxmanage-modifyvm" />.</para>
 
923
        </listitem>
 
924
      </itemizedlist></para>
 
925
  </sect1>
 
926
</chapter>