summaryrefslogtreecommitdiffstats
path: root/rubbos/app/apache2/manual/dso.html.fr
blob: 1da1434b95c251104acbbb176dd053956069537c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Support des objets partag�s dynamiques (DSO) - Serveur Apache HTTP</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="./images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p>
<p class="apache">Serveur Apache HTTP Version 2.0</p>
<img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="./">Version 2.0</a></div><div id="page-content"><div id="preamble"><h1>Support des objets partag�s dynamiques (DSO)</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/dso.html" hreflang="es" rel="alternate" title="Espa�ol">&nbsp;es&nbsp;</a> |
<a href="./fr/dso.html" title="Fran�ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./tr/dso.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</a></p>
</div>
<div class="outofdate">Cette traduction peut �tre p�rim�e. Consultez la version
            Anglaise pour les changements r�cents.</div>

    <p>Le serveur HTTP Apache est un programme modulaire permettant �
    l'administrateur de choisir les fonctionnalit�s qu'il souhaite 
    activer, au moyen de modules. Les modules peuvent �tre int�gr�s
    dans le programme binaire <code>httpd</code> au moment de la 
    compilation. Il est �galement possible de compiler � part des 
    modules en tant qu'objets dynamiques partag�s (Dynamic Shared 
    Objects&nbsp;: DSOs) existant s�par�ment du fichier binaire principal 
    <code>httpd</code>. Les modules DSO peuvent �tre compil�s en m�me 
    temps que le serveur, ou apr�s, au moyen de l'outil Apache pour 
    les extensions (<code class="program"><a href="./programs/apxs.html">apxs</a></code>).</p>

    <p>Ce document d�crit les principes de fonctionnement des modules DSO, et
    montre comment les utiliser.</p>
  </div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Impl�mentation</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#usage">R�sum� sur l'utilisation des DSO</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#background">Contexte</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#advantages">Avantages et Inconv�nients</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="implementation" id="implementation">Impl�mentation</a></h2>

<table class="related"><tr><th>Modules Apparent�s</th><th>Directives Apparent�es</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_so.html">mod_so</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code></li></ul></td></tr></table>

    <p>Le support DSO servant � charger des modules Apache, est lui-m�me 
    cod� dans un module, nomm� <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>, qui doit �tre 
    compil� dans le noyau d'Apache. Ce module, ainsi que le module 
    <code class="module"><a href="./mod/core.html">core</a></code>, sont les deux seuls modules qui ne peuvent 
    �tre compil�s s�par�ment d'Apache. En pratique, tous les autres 
    modules d'Apache peuvent �tre compil�s en tant que modules DSO, 
    en passant au script <code>configure</code> l'option 
    <code>--enable-<em>module</em>=shared</code>, comme pr�cis� dans 
    la <a href="install.html">documentation d'installation</a>. Apr�s 
    qu'un module ait �t� compil� en DSO (nomm� 
    <code>mod_monmodule.so</code>), il est possible d'utiliser la 
    directive de <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>&nbsp;: <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> dans le fichier <code>httpd.conf</code>, 
    afin qu'Apache charge ledit module au d�marrage ou red�marrage du 
    serveur.</p>

    <p>Afin de simplifier la cr�ation de fichiers DSO pour les 
    modules Apache (et en particulier les modules tiers), un nouveau 
    programme de support a �t� ajout�&nbsp;: <a href="programs/apxs.html">apxs</a> (<em>APache eXtenSion</em>). Ce programme peut �tre 
    utilis� pour cr�er des modules DSO <em>en se passant de</em> 
    l'arborescence source d'Apache. L'id�e en est simple&nbsp;: lors de 
    l'installation d'Apache, la commande <code>make install</code> 
    positionne les fichiers d'en-t�tes C d'Apache, ainsi que les 
    options du compilateur et les options propres � la plate-forme 
    dans le programme <code>apxs</code>. Ceci permet � l'utilisateur 
    de compiler ses modules Apache, au moyen de <code>apxs</code>, 
    sans disposer de l'arborescence source d'Apache et sans devoir 
    manipuler les options de compilation ou les options propres � 
    sa plate-forme.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="usage" id="usage">R�sum� sur l'utilisation des DSO</a></h2>

    <p>Voici un r�sum� bref des fonctionnalit�s DSO d'Apache 2.0&nbsp;:</p>

    <ol>
      <li>
        Pour compiler et installer un module Apache <em>distribu� 
        avec Apache</em>, par exemple <code>mod_foo.c</code>, en tant 
        que DSO, sous le nom <code>mod_foo.so</code>&nbsp;:

<div class="example"><p><code>
$ ./configure --prefix=/path/to/install --enable-foo=shared<br />
$ make install
</code></p></div>
      </li>

      <li>
        Pour compiler et installer un module Apache <em>fourni par un 
        tiers</em>, par exemple <code>mod_foo.c</code>, en tant que DSO, 
        sous le nom <code>mod_foo.so</code>&nbsp;:

<div class="example"><p><code>
$ ./configure --add-module=module_type:/chemin/vers/le/tiers/mod_foo.c --enable-foo=shared<br />
$ make install
</code></p></div>
      </li>

      <li>
        Pour configurer Apache afin qu'il puisse accepter les modules DSO&nbsp;:

<div class="example"><p><code>
$ ./configure --enable-so<br />
$ make install
</code></p></div>
      </li>

      <li>
        Pour compiler et installer un module Apache <em>fourni par un 
        tiers</em>, par exemple <code>mod_foo.c</code>, en tant que 
        DSO, et sans disposer de l'arborescence source d'Apache 
        (utilisation d'<a href="programs/apxs.html">apxs</a>)&nbsp;:

<div class="example"><p><code>
$ cd /chemin/vers/le/tiers<br />
$ apxs -c mod_foo.c<br />
$ apxs -i -a -n foo mod_foo.la
</code></p></div>
      </li>
    </ol>

    <p>Dans tous les cas, une fois qu'un module a �t� compil� en tant 
    que DSO, vous devrez utiliser la directive 
    <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> dans le 
    fichier <code>httpd.conf</code> afin qu'Apache active le module.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="background" id="background">Contexte</a></h2>

    <p>Sur les syst�mes r�cents, d�riv�s d'Unix, il existe un proc�d� 
    �l�gant, habituellement appel� chargement dynamique d'objets 
    partag�s DSO,  permettant de compiler un morceau de code sous un 
    format sp�cial, et de pouvoir le charger en temps r�el dans 
    l'espace d'adressage d'un programme ex�cutable.</p>
    
    <p>Ce chargement peut �tre r�alis� de deux mani�res&nbsp;: 
    automatiquement, gr�ce � un programme syst�me nomm� <code>ld.so</code> 
    lors du d�marrage d'un ex�cutable, ou manuellement depuis un programme 
    en ex�cution via une interface programm�e au moyen des appels 
    syst�mes <code>dlopen()/dlsym()</code> du "chargeur" Unix</p>
    
    <p>Dans le premier cas, il est courant d'appeler les DSO des 
    <em>biblioth�ques partag�es</em> ou des <em>biblioth�ques DSO</em>&nbsp;; 
    on les nomme <code>libfoo.so</code> ou <code>libfoo.so.1.2</code>. 
    Elles sont toutes plac�es dans un r�pertoire syst�me (souvent 
    <code>/usr/lib</code>) et sont li�es par les programmes ex�cutables 
    lors de la compilation de ces derniers, en pr�cisant au moment de 
    la compilation l'option <code>-lfoo</code> � la commande de link 
    (linker command). Cette mani�re de proc�der ins�re les r�f�rences 
    des biblioth�ques dans le coeur des programmes, afin qu'au moment 
    du d�marrage du programme, le "chargeur" Unix puisse trouver 
    <code>libfoo.so</code> dans <code>/usr/lib</code>, ou bien dans 
    les chemins cod�s en dur au moyen de l'option de link <code>-R</code>, 
    ou dans un chemin configur� au moyen de la variable d'environnement 
    <code>LD_LIBRARY_PATH</code>. Tous les symboles non r�solus pr�sents 
    dans le programme sont alors r�solus au moyen de DSO.</p>

    <p>Les symboles propres au programme ex�cutable ne sont g�n�ralement 
    pas r�f�renc�s par le DSO (puisque c'est une biblioth�que de code 
    g�n�rique), et donc aucune r�solution ne doit �tre suivie au del� 
    de ce point. Le programme ex�cutable n'a pas de travail particulier 
    � faire pour r�soudre les symboles des DSO, puisque c'est le 
    "chargeur" Unix qui s'occupe de cette t�che. (En r�alit�, le code 
    utilis� pour invoquer <code>ld.so</code> fait partie du code de 
    d�marrage run-time, qui est li� � chaque programme ex�cutable 
    non statique). L'avantage du chargement dynamique des biblioth�ques 
    de code g�n�rique est �vident&nbsp;: le code n'est conserv� qu'� un seul 
    endroit du disque, dans une biblioth�que syst�me comme 
    <code>libc.so</code>, ce qui permet de gagner de l'espace disque 
    pour chaque programme.</p>

    <p>Dans le second cas, les DSO sont appel�s <em>objets partag�s</em> 
    ou <em>fichiers DSO</em> et on peut leur attribuer une extension au 
    choix (bien que leur nom soit habituellement <code>foo.so</code>). 
    Ces fichiers r�sident normalement dans un r�pertoire propre au 
    programme qui les utilise, et ils ne sont pas li�s de mani�re 
    automatique au programme qui les appelle. Celui-ci les charge en 
    temps r�el lors de son ex�cution, au moyen de <code>dlopen()</code>. 
    � cet instant, aucune r�solution des symboles du DSO n'est r�alis�e. 
    C'est le "chargeur" Unix qui r�alise la t�che de r�soudre les 
    symboles non r�solus du DSO, � partir du jeu de symboles export�s 
    par le programme et ses biblioth�ques DSO (en particulier, tous 
    les symboles de l'omnipr�sente <code>libc.so</code>). Ainsi, le DSO 
    gagne la connaissance des symboles du programme ex�cutable, comme 
    s'il lui avait �t� li� statiquement au d�part.</p>
    
    <p>Enfin, pour tirer parti de l'API DSO, l'ex�cutable doit r�soudre 
    les symboles propres au DSO via <code>dlsym()</code>, pour les 
    utiliser plus tard dans les tables de r�partition (NdT&nbsp;: "dispatch 
    tables"), <em>etc.</em> En d'autres termes, le programme ex�cutable 
    doit r�soudre lui-m�me chaque symbole pour utiliser chacun d'entre 
    eux. L'avantage de ce m�canisme est que les parties optionnelles 
    d'un programme ne sont pas charg�es (et donc, n'encombrent pas la 
    m�moire) avant que le programme n'en ait effectivement besoin. 
    Quand elles deviennent n�cessaires, ces parties du programme peuvent 
    �tre charg�es dynamiquement pour �tendre les fonctionnalit�s du 
    programme.</p>

    <p>Bien que ce fonctionnement de DSO puisse para�tre simple � 
    comprendre, il existe au moins une difficult� d'impl�mentation&nbsp;: 
    permettre au DSO de r�soudre les symboles du programme quand un DSO 
    est utilis� pour �tendre un programme. Pourquoi cela&nbsp;? Parce que la 
    "r�solution � l'envers" des symboles DSO � partir des symboles du 
    programme ex�cutable est contraire au principe de conception des 
    biblioth�ques (o�, rappelons-le, la biblioth�que ne sait rien du 
    programme qui l'utilise)&nbsp;; cette "r�solution � l'envers" n'est pas 
    standardis�e, et n'existe pas sur toutes les plates-formes. En 
    pratique, les symboles globaux d'un programme ex�cutable ne sont 
    que rarement r�export�s vers un DSO, et donc ne sont pas accessibles. 
    Celui qui veut pouvoir �tendre les fonctionnalit�s d'un programme 
    dynamiquement, lors de l'ex�cution, doit trouver un moyen de forcer 
    le programme de liaison � exporter tous les symboles globaux de ce 
    programme.</p>

    <p>L'approche par biblioth�ques partag�es est de loin la plus courante
    parce que c'est celle pour laquelle les m�canismes DSO ont �t� con�us&nbsp;; 
    elle est donc utilis�e par presque toutes les biblioth�ques du syst�me
    d'exploitation. De l'autre cot�, l'utilisation des objets partag�s reste 
    une approche marginale.</p>
    
    <p>Depuis 1998, seules quelques solutions logiciels existantes 
    utilisent le m�canisme des DSO pour �tendre leurs fonctionnalit�s 
    en cours ex�cution&nbsp;: Perl 5 (via son "XS mechanism" et le module 
    DynaLoader), Netscape Server, <em>etc.</em> Depuis la version 1.3, 
    Apache a rejoint ce groupe, car Apache utilise une approche 
    modulaire pour �tendre ses fonctionnalit�s, et utilise de mani�re 
    interne des m�canismes de r�partition par liste pour lier des 
    modules externes � son noyau. Apache �tait vraiment pr�destin�, 
    par concept, � utiliser les DSO pour charger ses modules en temps 
    r�el.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="advantages" id="advantages">Avantages et Inconv�nients</a></h2>

    <p>Les possibilit�s des DSO d�crites ci-avant pr�sentent les
    avantages suivants&nbsp;:</p>

    <ul>
      <li>Le paquetage du serveur est plus flexible lors de son ex�cution, 
      car les processus du serveur central peuvent �tre �tendus pendant 
      son ex�cution, au moyen de la directive 
      <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>, dans 
      <code>httpd.conf</code>, plut�t que forcer les utilisateurs � 
      recompiler le serveur pour modifier ses fonctionnalit�s. Par 
      exemple, ce mode de fonctionnement permet de faire tourner 
      plusieurs instances du serveur (version standard &amp; SSL 
      version, version minimaliste &amp; �tendue [mod_perl, PHP3], 
      <em>etc.</em>) au moyen d'une seule installation d'Apache.</li>

      <li>Il est tr�s facile d'�tendre les fonctionnalit�s du serveur 
      de base, m�me apr�s son installation. Ceci est d'un grand secours 
      aux mainteneurs des paquets qui peuvent facilement cr�er des 
      paquets pour l'installation de base d'Apache et d'autres paquets 
      diff�rents pour les extensions, comme PHP3, mod_perl, 
      mod_fastcgi, <em>etc.</em></li>

      <li>Facilit� de d�veloppement des modules Apache&nbsp;; gr�ce aux outils
      DSO/<code>apxs</code>, ce travail est faisable sans l'arborescence 
      source d'Apache, et ne n�cessite qu'une commande <code>apxs -i</code> 
      suivi d'un <code>apachectl restart</code> pour ajouter au serveur 
      d�j� en marche les fonctionnalit�s du module d�velopp�.</li>
    </ul>

    <p>Les inconv�nients li�s � l'utilisation des DSO&nbsp;:</p>

    <ul>
      <li>Les m�canismes de DSO ne sont pas portables sur toutes les
      plates-formes, car tous les syst�mes d'exploitation ne supportent 
      pas le chargement dynamique de code dans l'espace d'adressage d'un 
      programme en marche.</li>

      <li>Le serveur est � peu pr�s 20% plus lent au d�marrage, � cause de la
      charge prise par le "chargeur" Unix de la r�solution des symboles.</li>

      <li>Le serveur est � peu pr�s 5% plus lent en fonctionnement sur 
      certaines plates-formes parce que le code ind�pendant de la 
      position ("position independent code" - PIC) requiert parfois des 
      tours de passe-passe en assembleur pour l'adressage relatif, ce qui 
      n'est pas toujours aussi rapide que l'adressage absolu.</li>

      <li>Les modules DSO ne pouvant pas �tre li�s � d'autres biblioth�ques 
      DSO (<code>ld -lfoo</code>) sur toutes les plates-formes (par 
      exemple, les plates-formes bas�es sur a.out ne le permettent pas, 
      alors que celles bas�es sur ELF le permettent), il n'est pas possible
      d'utiliser les m�canismes de DSO pour tous les modules. En d'autres
      termes, les modules compil�s en tant que fichiers DSO sont limit�s 
      � l'utilisation des symboles export�s par le noyau d'Apache, par 
      la biblioth�que C (<code>libc</code>) et toute autre biblioth�que 
      dynamique ou statique utilis�e par le noyau d'Apache, ou par des 
      archives de biblioth�ques statiques (<code>libfoo.a</code>) qui 
      contiennent du code ind�pendant de la position. Les seuls moyens 
      d'utiliser du code � l'ext�rieur d'un fichier DSO sont, soit de 
      s'assurer que le noyau d'Apache contienne une r�f�rence vers ce 
      code, soit de charger ce code au moyen de <code>dlopen()</code>.</li>
    </ul>

</div></div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="./es/dso.html" hreflang="es" rel="alternate" title="Espa�ol">&nbsp;es&nbsp;</a> |
<a href="./fr/dso.html" title="Fran�ais">&nbsp;fr&nbsp;</a> |
<a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="./tr/dso.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div>
</body></html>