upload apache
[bottlenecks.git] / rubbos / app / apache2 / manual / dso.html.fr
1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>Support des objets partagés dynamiques (DSO) - Serveur Apache HTTP</title>
9 <link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <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>
15 <p class="apache">Serveur Apache HTTP Version 2.0</p>
16 <img alt="" src="./images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="./images/left.gif" /></a></div>
18 <div id="path">
19 <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>
20 <div class="toplang">
21 <p><span>Langues Disponibles: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
22 <a href="./es/dso.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
23 <a href="./fr/dso.html" title="Français">&nbsp;fr&nbsp;</a> |
24 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
25 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
26 <a href="./tr/dso.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
27 </div>
28 <div class="outofdate">Cette traduction peut être périmée. Consultez la version
29             Anglaise pour les changements récents.</div>
30
31     <p>Le serveur HTTP Apache est un programme modulaire permettant à
32     l'administrateur de choisir les fonctionnalités qu'il souhaite 
33     activer, au moyen de modules. Les modules peuvent être intégrés
34     dans le programme binaire <code>httpd</code> au moment de la 
35     compilation. Il est également possible de compiler à part des 
36     modules en tant qu'objets dynamiques partagés (Dynamic Shared 
37     Objects&nbsp;: DSOs) existant séparément du fichier binaire principal 
38     <code>httpd</code>. Les modules DSO peuvent être compilés en même 
39     temps que le serveur, ou après, au moyen de l'outil Apache pour 
40     les extensions (<code class="program"><a href="./programs/apxs.html">apxs</a></code>).</p>
41
42     <p>Ce document décrit les principes de fonctionnement des modules DSO, et
43     montre comment les utiliser.</p>
44   </div>
45 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Implémentation</a></li>
46 <li><img alt="" src="./images/down.gif" /> <a href="#usage">Résumé sur l'utilisation des DSO</a></li>
47 <li><img alt="" src="./images/down.gif" /> <a href="#background">Contexte</a></li>
48 <li><img alt="" src="./images/down.gif" /> <a href="#advantages">Avantages et Inconvénients</a></li>
49 </ul></div>
50 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
51 <div class="section">
52 <h2><a name="implementation" id="implementation">Implémentation</a></h2>
53
54 <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>
55
56     <p>Le support DSO servant à charger des modules Apache, est lui-même 
57     codé dans un module, nommé <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>, qui doit être 
58     compilé dans le noyau d'Apache. Ce module, ainsi que le module 
59     <code class="module"><a href="./mod/core.html">core</a></code>, sont les deux seuls modules qui ne peuvent 
60     être compilés séparément d'Apache. En pratique, tous les autres 
61     modules d'Apache peuvent être compilés en tant que modules DSO, 
62     en passant au script <code>configure</code> l'option 
63     <code>--enable-<em>module</em>=shared</code>, comme précisé dans 
64     la <a href="install.html">documentation d'installation</a>. Après 
65     qu'un module ait été compilé en DSO (nommé 
66     <code>mod_monmodule.so</code>), il est possible d'utiliser la 
67     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>, 
68     afin qu'Apache charge ledit module au démarrage ou redémarrage du 
69     serveur.</p>
70
71     <p>Afin de simplifier la création de fichiers DSO pour les 
72     modules Apache (et en particulier les modules tiers), un nouveau 
73     programme de support a été ajouté&nbsp;: <a href="programs/apxs.html">apxs</a> (<em>APache eXtenSion</em>). Ce programme peut être 
74     utilisé pour créer des modules DSO <em>en se passant de</em> 
75     l'arborescence source d'Apache. L'idée en est simple&nbsp;: lors de 
76     l'installation d'Apache, la commande <code>make install</code> 
77     positionne les fichiers d'en-têtes C d'Apache, ainsi que les 
78     options du compilateur et les options propres à la plate-forme 
79     dans le programme <code>apxs</code>. Ceci permet à l'utilisateur 
80     de compiler ses modules Apache, au moyen de <code>apxs</code>, 
81     sans disposer de l'arborescence source d'Apache et sans devoir 
82     manipuler les options de compilation ou les options propres à 
83     sa plate-forme.</p>
84 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
85 <div class="section">
86 <h2><a name="usage" id="usage">Résumé sur l'utilisation des DSO</a></h2>
87
88     <p>Voici un résumé bref des fonctionnalités DSO d'Apache 2.0&nbsp;:</p>
89
90     <ol>
91       <li>
92         Pour compiler et installer un module Apache <em>distribué 
93         avec Apache</em>, par exemple <code>mod_foo.c</code>, en tant 
94         que DSO, sous le nom <code>mod_foo.so</code>&nbsp;:
95
96 <div class="example"><p><code>
97 $ ./configure --prefix=/path/to/install --enable-foo=shared<br />
98 $ make install
99 </code></p></div>
100       </li>
101
102       <li>
103         Pour compiler et installer un module Apache <em>fourni par un 
104         tiers</em>, par exemple <code>mod_foo.c</code>, en tant que DSO, 
105         sous le nom <code>mod_foo.so</code>&nbsp;:
106
107 <div class="example"><p><code>
108 $ ./configure --add-module=module_type:/chemin/vers/le/tiers/mod_foo.c --enable-foo=shared<br />
109 $ make install
110 </code></p></div>
111       </li>
112
113       <li>
114         Pour configurer Apache afin qu'il puisse accepter les modules DSO&nbsp;:
115
116 <div class="example"><p><code>
117 $ ./configure --enable-so<br />
118 $ make install
119 </code></p></div>
120       </li>
121
122       <li>
123         Pour compiler et installer un module Apache <em>fourni par un 
124         tiers</em>, par exemple <code>mod_foo.c</code>, en tant que 
125         DSO, et sans disposer de l'arborescence source d'Apache 
126         (utilisation d'<a href="programs/apxs.html">apxs</a>)&nbsp;:
127
128 <div class="example"><p><code>
129 $ cd /chemin/vers/le/tiers<br />
130 $ apxs -c mod_foo.c<br />
131 $ apxs -i -a -n foo mod_foo.la
132 </code></p></div>
133       </li>
134     </ol>
135
136     <p>Dans tous les cas, une fois qu'un module a été compilé en tant 
137     que DSO, vous devrez utiliser la directive 
138     <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> dans le 
139     fichier <code>httpd.conf</code> afin qu'Apache active le module.</p>
140 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
141 <div class="section">
142 <h2><a name="background" id="background">Contexte</a></h2>
143
144     <p>Sur les systèmes récents, dérivés d'Unix, il existe un procédé 
145     élégant, habituellement appelé chargement dynamique d'objets 
146     partagés DSO,  permettant de compiler un morceau de code sous un 
147     format spécial, et de pouvoir le charger en temps réel dans 
148     l'espace d'adressage d'un programme exécutable.</p>
149     
150     <p>Ce chargement peut être réalisé de deux manières&nbsp;: 
151     automatiquement, grâce à un programme système nommé <code>ld.so</code> 
152     lors du démarrage d'un exécutable, ou manuellement depuis un programme 
153     en exécution via une interface programmée au moyen des appels 
154     systèmes <code>dlopen()/dlsym()</code> du "chargeur" Unix</p>
155     
156     <p>Dans le premier cas, il est courant d'appeler les DSO des 
157     <em>bibliothèques partagées</em> ou des <em>bibliothèques DSO</em>&nbsp;; 
158     on les nomme <code>libfoo.so</code> ou <code>libfoo.so.1.2</code>. 
159     Elles sont toutes placées dans un répertoire système (souvent 
160     <code>/usr/lib</code>) et sont liées par les programmes exécutables 
161     lors de la compilation de ces derniers, en précisant au moment de 
162     la compilation l'option <code>-lfoo</code> à la commande de link 
163     (linker command). Cette manière de procéder insère les références 
164     des bibliothèques dans le coeur des programmes, afin qu'au moment 
165     du démarrage du programme, le "chargeur" Unix puisse trouver 
166     <code>libfoo.so</code> dans <code>/usr/lib</code>, ou bien dans 
167     les chemins codés en dur au moyen de l'option de link <code>-R</code>, 
168     ou dans un chemin configuré au moyen de la variable d'environnement 
169     <code>LD_LIBRARY_PATH</code>. Tous les symboles non résolus présents 
170     dans le programme sont alors résolus au moyen de DSO.</p>
171
172     <p>Les symboles propres au programme exécutable ne sont généralement 
173     pas référencés par le DSO (puisque c'est une bibliothèque de code 
174     générique), et donc aucune résolution ne doit être suivie au delà 
175     de ce point. Le programme exécutable n'a pas de travail particulier 
176     à faire pour résoudre les symboles des DSO, puisque c'est le 
177     "chargeur" Unix qui s'occupe de cette tâche. (En réalité, le code 
178     utilisé pour invoquer <code>ld.so</code> fait partie du code de 
179     démarrage run-time, qui est lié à chaque programme exécutable 
180     non statique). L'avantage du chargement dynamique des bibliothèques 
181     de code générique est évident&nbsp;: le code n'est conservé qu'à un seul 
182     endroit du disque, dans une bibliothèque système comme 
183     <code>libc.so</code>, ce qui permet de gagner de l'espace disque 
184     pour chaque programme.</p>
185
186     <p>Dans le second cas, les DSO sont appelés <em>objets partagés</em> 
187     ou <em>fichiers DSO</em> et on peut leur attribuer une extension au 
188     choix (bien que leur nom soit habituellement <code>foo.so</code>). 
189     Ces fichiers résident normalement dans un répertoire propre au 
190     programme qui les utilise, et ils ne sont pas liés de manière 
191     automatique au programme qui les appelle. Celui-ci les charge en 
192     temps réel lors de son exécution, au moyen de <code>dlopen()</code>. 
193     À cet instant, aucune résolution des symboles du DSO n'est réalisée. 
194     C'est le "chargeur" Unix qui réalise la tâche de résoudre les 
195     symboles non résolus du DSO, à partir du jeu de symboles exportés 
196     par le programme et ses bibliothèques DSO (en particulier, tous 
197     les symboles de l'omniprésente <code>libc.so</code>). Ainsi, le DSO 
198     gagne la connaissance des symboles du programme exécutable, comme 
199     s'il lui avait été lié statiquement au départ.</p>
200     
201     <p>Enfin, pour tirer parti de l'API DSO, l'exécutable doit résoudre 
202     les symboles propres au DSO via <code>dlsym()</code>, pour les 
203     utiliser plus tard dans les tables de répartition (NdT&nbsp;: "dispatch 
204     tables"), <em>etc.</em> En d'autres termes, le programme exécutable 
205     doit résoudre lui-même chaque symbole pour utiliser chacun d'entre 
206     eux. L'avantage de ce mécanisme est que les parties optionnelles 
207     d'un programme ne sont pas chargées (et donc, n'encombrent pas la 
208     mémoire) avant que le programme n'en ait effectivement besoin. 
209     Quand elles deviennent nécessaires, ces parties du programme peuvent 
210     être chargées dynamiquement pour étendre les fonctionnalités du 
211     programme.</p>
212
213     <p>Bien que ce fonctionnement de DSO puisse paraître simple à 
214     comprendre, il existe au moins une difficulté d'implémentation&nbsp;: 
215     permettre au DSO de résoudre les symboles du programme quand un DSO 
216     est utilisé pour étendre un programme. Pourquoi cela&nbsp;? Parce que la 
217     "résolution à l'envers" des symboles DSO à partir des symboles du 
218     programme exécutable est contraire au principe de conception des 
219     bibliothèques (où, rappelons-le, la bibliothèque ne sait rien du 
220     programme qui l'utilise)&nbsp;; cette "résolution à l'envers" n'est pas 
221     standardisée, et n'existe pas sur toutes les plates-formes. En 
222     pratique, les symboles globaux d'un programme exécutable ne sont 
223     que rarement réexportés vers un DSO, et donc ne sont pas accessibles. 
224     Celui qui veut pouvoir étendre les fonctionnalités d'un programme 
225     dynamiquement, lors de l'exécution, doit trouver un moyen de forcer 
226     le programme de liaison à exporter tous les symboles globaux de ce 
227     programme.</p>
228
229     <p>L'approche par bibliothèques partagées est de loin la plus courante
230     parce que c'est celle pour laquelle les mécanismes DSO ont été conçus&nbsp;; 
231     elle est donc utilisée par presque toutes les bibliothèques du système
232     d'exploitation. De l'autre coté, l'utilisation des objets partagés reste 
233     une approche marginale.</p>
234     
235     <p>Depuis 1998, seules quelques solutions logiciels existantes 
236     utilisent le mécanisme des DSO pour étendre leurs fonctionnalités 
237     en cours exécution&nbsp;: Perl 5 (via son "XS mechanism" et le module 
238     DynaLoader), Netscape Server, <em>etc.</em> Depuis la version 1.3, 
239     Apache a rejoint ce groupe, car Apache utilise une approche 
240     modulaire pour étendre ses fonctionnalités, et utilise de manière 
241     interne des mécanismes de répartition par liste pour lier des 
242     modules externes à son noyau. Apache était vraiment prédestiné, 
243     par concept, à utiliser les DSO pour charger ses modules en temps 
244     réel.</p>
245 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
246 <div class="section">
247 <h2><a name="advantages" id="advantages">Avantages et Inconvénients</a></h2>
248
249     <p>Les possibilités des DSO décrites ci-avant présentent les
250     avantages suivants&nbsp;:</p>
251
252     <ul>
253       <li>Le paquetage du serveur est plus flexible lors de son exécution, 
254       car les processus du serveur central peuvent être étendus pendant 
255       son exécution, au moyen de la directive 
256       <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>, dans 
257       <code>httpd.conf</code>, plutôt que forcer les utilisateurs à 
258       recompiler le serveur pour modifier ses fonctionnalités. Par 
259       exemple, ce mode de fonctionnement permet de faire tourner 
260       plusieurs instances du serveur (version standard &amp; SSL 
261       version, version minimaliste &amp; étendue [mod_perl, PHP3], 
262       <em>etc.</em>) au moyen d'une seule installation d'Apache.</li>
263
264       <li>Il est très facile d'étendre les fonctionnalités du serveur 
265       de base, même après son installation. Ceci est d'un grand secours 
266       aux mainteneurs des paquets qui peuvent facilement créer des 
267       paquets pour l'installation de base d'Apache et d'autres paquets 
268       différents pour les extensions, comme PHP3, mod_perl, 
269       mod_fastcgi, <em>etc.</em></li>
270
271       <li>Facilité de développement des modules Apache&nbsp;; grâce aux outils
272       DSO/<code>apxs</code>, ce travail est faisable sans l'arborescence 
273       source d'Apache, et ne nécessite qu'une commande <code>apxs -i</code> 
274       suivi d'un <code>apachectl restart</code> pour ajouter au serveur 
275       déjà en marche les fonctionnalités du module développé.</li>
276     </ul>
277
278     <p>Les inconvénients liés à l'utilisation des DSO&nbsp;:</p>
279
280     <ul>
281       <li>Les mécanismes de DSO ne sont pas portables sur toutes les
282       plates-formes, car tous les systèmes d'exploitation ne supportent 
283       pas le chargement dynamique de code dans l'espace d'adressage d'un 
284       programme en marche.</li>
285
286       <li>Le serveur est à peu près 20% plus lent au démarrage, à cause de la
287       charge prise par le "chargeur" Unix de la résolution des symboles.</li>
288
289       <li>Le serveur est à peu près 5% plus lent en fonctionnement sur 
290       certaines plates-formes parce que le code indépendant de la 
291       position ("position independent code" - PIC) requiert parfois des 
292       tours de passe-passe en assembleur pour l'adressage relatif, ce qui 
293       n'est pas toujours aussi rapide que l'adressage absolu.</li>
294
295       <li>Les modules DSO ne pouvant pas être liés à d'autres bibliothèques 
296       DSO (<code>ld -lfoo</code>) sur toutes les plates-formes (par 
297       exemple, les plates-formes basées sur a.out ne le permettent pas, 
298       alors que celles basées sur ELF le permettent), il n'est pas possible
299       d'utiliser les mécanismes de DSO pour tous les modules. En d'autres
300       termes, les modules compilés en tant que fichiers DSO sont limités 
301       à l'utilisation des symboles exportés par le noyau d'Apache, par 
302       la bibliothèque C (<code>libc</code>) et toute autre bibliothèque 
303       dynamique ou statique utilisée par le noyau d'Apache, ou par des 
304       archives de bibliothèques statiques (<code>libfoo.a</code>) qui 
305       contiennent du code indépendant de la position. Les seuls moyens 
306       d'utiliser du code à l'extérieur d'un fichier DSO sont, soit de 
307       s'assurer que le noyau d'Apache contienne une référence vers ce 
308       code, soit de charger ce code au moyen de <code>dlopen()</code>.</li>
309     </ul>
310
311 </div></div>
312 <div class="bottomlang">
313 <p><span>Langues Disponibles: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
314 <a href="./es/dso.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
315 <a href="./fr/dso.html" title="Français">&nbsp;fr&nbsp;</a> |
316 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
317 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
318 <a href="./tr/dso.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
319 </div><div id="footer">
320 <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>
321 <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>
322 </body></html>