]> granicus.if.org Git - apache/blob - docs/manual/dso.xml.tr
update xforms
[apache] / docs / manual / dso.xml.tr
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
4 <!-- English Revision: 1058587:1174747 (outdated) -->
5 <!-- =====================================================
6  Translated by: Nilgün Belma Bugüner <nilgun belgeler.org>
7    Reviewed by: Yücel Haluk Bugüner <haluk buguner.name.tr>
8 ========================================================== -->
9
10 <!--
11  Licensed to the Apache Software Foundation (ASF) under one or more
12  contributor license agreements.  See the NOTICE file distributed with
13  this work for additional information regarding copyright ownership.
14  The ASF licenses this file to You under the Apache License, Version 2.0
15  (the "License"); you may not use this file except in compliance with
16  the License.  You may obtain a copy of the License at
17
18      http://www.apache.org/licenses/LICENSE-2.0
19
20  Unless required by applicable law or agreed to in writing, software
21  distributed under the License is distributed on an "AS IS" BASIS,
22  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23  See the License for the specific language governing permissions and
24  limitations under the License.
25 -->
26
27 <manualpage metafile="dso.xml.meta">
28
29   <title>Devingen Paylaşımlı Nesne Desteği</title>
30
31   <summary>
32     <p>Apache HTTP Sunucusu modüler bir program olup, yönetici sadece bir
33       grup modül seçerek sunucuya işlevsellik ekleyebilir. Modüller, Devingen
34       Paylaşımlı Nesneler (DSO - Dynamic Shared Object) halinde
35       <program>httpd</program> programından ayrı olarak derlenir. DSO modülleri
36       sunucunun derlenmesi sırasında derlenebileceği gibi ayrı olarak derlenip
37       daha sonra Apache Eklenti Aracı (Apache Extension Tool)
38       <program>apxs</program> programı kullanılarak da sunucuya eklenebilir.</p>
39
40     <p>Bu belgede DSO modüllerinin kullanımının yanında teorisine de
41       değinilecektir.</p>
42   </summary>
43
44
45 <section id="implementation"><title>Gerçeklenim</title>
46
47 <related>
48   <modulelist>
49     <module>mod_so</module>
50   </modulelist>
51   <directivelist>
52     <directive module="mod_so">LoadModule</directive>
53   </directivelist>
54 </related>
55
56     <p>Apache httpd modüllerini yüklemek için DSO desteği, Apache httpd
57       çekirdeğine durağan olarak ilintilenerek derlenmiş olan
58       <module>mod_so</module> adında bir modül tarafından sağlanır.
59       <module>core</module> modülünden  başka, bir DSO modülü olamayan tek modül
60       <module>mod_so</module> modülüdür. Apache ile dağıtılan hemen hemen tüm
61       diğer Apache modülleri bir DSO modülüne yerleştirilebilir. Derlenmiş
62       modüller <code>mod_filanca.so</code> biçeminde birer DSO ismi alırlar ve
63       her biri istenirse <code>httpd.conf</code> dosyasında
64       <module>mod_so</module> modülünün <directive module="mod_so"
65       >LoadModule</directive> yönergesiyle belirtilerek sunucu başlatılırken
66       veya yeniden başlatılırken sunucuya yüklenebilir.</p>
67
68     <p><a href="install.html">Kurulum belgesinde</a> açıklandığı gibi, her DSO
69       modülü <program>configure</program> programının
70       <code>--enable-mods-static</code> seçeneği ile devredışı bırakılabilir.</p>
71
72     <p>Apache httpd modülleri için (özellikle üçüncü parti modüller için) DSO
73       dosyası üretimini kolaylaştırmak amacıyla <program>apxs</program>
74       (<dfn>APache eXtenSion</dfn>) adında yeni bir destek programı
75       kullanılmaktadır. Bu program Apache httpd modüllerini Apache httpd kaynak
76       ağacından ayrı olarak derlemek için kullanılabilir. Fikir basittir: Apache
77       HTTP Sunucusu derlenirken DSO dosyalarını derlemek için platforma bağımlı
78       derleyici ve ilintileyici seçenekleri <program>apxs</program>
79       programının içine konur ve <code>make install</code> ile kurulum sırasında
80       Apache httpd C başlık dosyaları da kurulur. Böylece
81       kullanıcı Apache httpd dağıtımının kaynak ağacına ihtiyaç duymadan ve
82       platforma bağımlı derleyici ve ilintileyici seçeneklerini bilmek zorunda
83       kalmadan istediği Apache httpd modülünü <program>apxs</program>
84       programını kullanarak derleyebilir.</p>
85 </section>
86
87 <section id="usage"><title>Kullanım Özeti</title>
88
89     <p>Apache HTTP Sunucusu 2.x’in DSO özelliklerine bir giriş olarak burada
90       kısaca bir bilgi vermekle yetinilecektir:</p>
91
92     <ol>
93       <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
94         <em>özgün</em> Apache htpd modülünü <code>mod_filanca.so</code> isminde
95         bir  DSO modülü olarak derlemek ve kurmak için şöyle yapılır:</p>
96
97 <example>
98   $ ./configure --prefix=/kurulum/yeri --enable-filanca<br />
99   $ make install
100 </example>
101       </li>
102
103       <li><p>Apache HTTP Sunucusunu tüm modüller etkin ve paylaşımlı nesneler
104         yüklü olarak derleyebilir. Daha sonra <code>httpd.conf</code> içindeki
105         <directive module="mod_so">LoadModule</directive> yönergelerinden
106         istemediklerinizi açıklama satırları haline getirerek bunları iptal
107         edebilirsiniz.</p>
108
109 <example>
110 $ ./configure --enable-mods-shared=all<br />
111 $ make install
112 </example>
113       </li>
114
115       <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
116         <em>üçüncü parti</em> Apache httpd modülü <code>mod_filanca.so</code>
117         isminde bir DSO modülü olarak Apache httpd kaynak ağacının dışında
118         <program>apxs</program> kullanarak derlemek ve kurmak için şöyle
119         yapılır:</p>
120
121 <example>
122 $ cd /bir/kurulum/yeri<br />
123 $ apxs -c mod_filanca.c<br />
124 $ apxs -aci filanca mod_filanca.la
125 </example>
126       </li>
127     </ol>
128
129     <p>Tüm durumlarda derlenen paylaşımlı modülü Apache httpd’nin etkin
130       kılabilmesi  için <code>httpd.conf</code> dosyasında o modül için bir
131       <directive module="mod_so">LoadModule</directive> yönergesi
132       bulunmalıdır.</p>
133
134     <p>Ayrıntılı bilgi için <a href="programs/apxs.html">apxs belgelerine</a>
135       bakınız.</p>
136 </section>
137
138 <section id="background"><title>Artalan Bilgisi</title>
139
140     <p>Günümüzün Unix türevlerinde var olan bir mekanizma sayesinde
141       çalıştırılabilir bir programın adres uzayına çalışma anında yüklenmek
142       veya ilintilenmek üzere <em>Devingen Paylaşımlı Nesneler</em> (DSO -
143       Dynamic Shared Object) adı verilen, özel bir biçem kullanarak kodlanmış
144       program parçaları oluşturulabilir.</p>
145
146     <p>Bu yükleme normalde iki yolla yapılabilir: Ya çalıştırılabilir
147       programın başlatılması sırasında yüklenen <code>ld.so</code> adlı bir
148       sistem programınının devingen olarak yüklenmesi ile ya da
149       çalıştırılabilir programın içinden Unix yükleyicisine programsal sistem
150       arayüzü sağlayan <code>dlopen()/dlsym()</code> sistem çağrılarının elle
151       yapılması suretiyle.</p>
152
153     <p>İlk yöntemde kullanılan DSO’lara genelde <em>paylaşımlı
154       kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir ve
155       bunların dosyaları <code>libfilanca.so</code> veya
156       <code>libfilanca.so.1.2</code> biçiminde isimlendirilir. Belli bir
157       sistem dizininde (normalde <code>/usr/lib</code>) bulunurlar ve derleme
158       sırasında ilintileyici komutuna <code>-lfilanca</code> şeklinde
159       belirtilerek çalıştırılabilir programla ilintilenirler. Doğrudan
160       çalıştırılabilir koda eklenen bu kodlar Unix yükleyicisinin programın
161       başlatılması sırasında kütüphaneyi <code>/usr/lib</code> altında
162       <code>libfilanca.so</code> adıyla bulabilmesini sağlar. Kütüphanelerin
163       aranacağı yerler ya <code>-R</code> gibi bir ilintileyici seçeneği ile
164       koda eklenir ya da arama yolları <code>LD_LIBRARY_PATH</code> ortam
165       değişkeni aracılığıyla yapılandırılır. Böylece çalıştırılabilir
166       programda henüz çözümlenmemiş simgeler DSO içinde bulunarak
167       çözümlenebilir.</p>
168
169     <p>Çalıştırılabilir program içindeki simgelere normalde DSO içinden
170       atıfta bulunulmaz (genel kod kütüphanesinin başka programlarca da
171       kullanılması nedeniyle). Bu bakımdan DSO tarafında böyle bir çözümleme
172       yapılmaz. Çalıştırılabilir program da DSO’daki simgeleri kendisi
173       çözümlemeye uğraşmaz, bu işlemlerden tamamen Unix yükleyicisi
174       (<code>ld.so</code>) sorumludur. (Aslında, <code>ld.so</code>’yu
175       çağıracak kod, her çalıştırılabilir programın içine ilintilenmiş
176       (durağan değil) başlatma kodunun bir parçasıdır.) Programlar tarafından
177       ortaklaşa kullanılan kütüphanelerin devingen olarak yüklenmesinin sebebi
178       basittir: Kütüphane kodu <code>libc.so</code> gibi bir sistem
179       kütüphanesine bir kere kaydedilip disk alanından yer kazanılmış
180       olur.</p>
181
182     <p>İkinci yöntemde kullanılan DSO’lara yine <em>paylaşımlı
183       kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir fakat
184       bunların dosyaları geçerli kabule göre <code>filanca.so</code> gibi
185       isimlendirilse de genelde keyfi olarak seçilen bir dosya uzantısı
186       kullanılarak isimlendirilirler. Bu dosyalar genellikle programa özel bir
187       dizinde dururlar ve bu dosyaları kullanacak olan çalıştırılabilir
188       programla aralarında özdevimli olarak bağ kurulmamıştır. Bunun yerine,
189       çalıştırılabilir program DSO’yu çalışma anında <code>dlopen()</code>
190       sayesinde kendi adres uzayına ekler. Çalıştırılabilir program için
191       DSO’daki simgeler bu sırada çözümlenmez. Özdevimli olarak devreye
192       giren Unix yükleyicisi, (varsa) artakalan simgeleri, çalıştırılabilir
193       ihraç edilen simge kümelerini (ve özellikle her yerde hazır ve nazır
194       <code>libc.so</code> içindeki tüm simgeleri) kullanarak çözümler. Bu
195       yolla DSO, çalıştırılabilir programın simge kümesi bilgilerini sanki
196       kendisine baştan durağan olarak ilintilenmiş gibi ulaşabilir.</p>
197
198     <p>Son olarak, DSO’nun programlama arayüzünün getirilerinden yararlanmak
199       amacıyla çalıştırılabilir program, daha sonra dağıtım tabloları vb.
200       yerlerde kullanmak üzere <code>dlsym()</code> üzerinden DSO’daki belli
201       simgeleri çözümlemek zorundadır. Başka bir deyişle: Çalıştırılabilir
202       program ihtiyaç duyduğu her simgeyi kullanmak için kendisi çözümleme
203       yapmak zorundadır. Böyle bir mekanizmanın getirisi, programın isteğe
204       bağlı parçalarının gerekli olana kadar yüklenmemesidir (böylece daha az
205       bellek alanı kullanılır). Gerektiği zaman programın işlevselliğini
206       arttırmak amacıyla bu parçalar devingen olarak programa
207       yüklenebilir.</p>
208
209     <p>DSO mekanizmasının bu basit gibi görünen işleyişinde zorluk içeren bir
210       adım şudur (başkaları da olabilir): Bir programın işlevselliğini
211       genişletmek için DSO kullanılırken (ikinci yöntem) çalıştırılabilir
212       programdan DSO için simgelerin çözümlenmesi.  Zorluğun sebebi,
213       "tersine çözümleme" yapılmasıdır; çalıştırılabilir programın simge
214       kümesindeki DSO simgeleri kütüphane tasarımına aykırı bir şekilde
215       çözümlenir ve bu uygulama tüm platformlarda hazır olarak
216       desteklenmediği gibi standartlaşmış da değildir. Geçer uygulamada
217       çalıştırılabilir programın evrensel simgeleri çoğunlukla yeniden dışa
218       verilmez ve bu bakımdan bir DSO içinde kullanılmaları uygun değildir.
219       Esas sorun, çalıştırılabilir bir programın işlevselliğini çalışma
220       anında genişletmek için DSO kullanımı sırasında ilintileyicinin tüm
221       evrensel simgeleri dışa vermesini zorlamanın bir yolunu bulmaktır.</p>
222
223     <p>Paylaşımlı kütüphane yaklaşımı bu bakımdan türünün tek örneğidir,
224       çünkü DSO mekanizması özellikle bunun için tasarlanmıştır, dolayısıyla
225       işletim sisteminin sağladığı hemen hemen tüm kütüphaneler için
226       kullanılabilir.</p>
227 </section>
228
229 <section id="advantages"><title>Getiriler ve Götürüler</title>
230
231     <p>Yukarıda bahsedilen DSO’ya dayalı özelliklerin getirileri
232       şunlardır:</p>
233
234     <ul>
235       <li>Sunucu paketi çalışma anında daha esnektir çünkü, sunucuyu
236         oluşturan parçalar derleme sırasında <program>configure</program>
237         seçenekleriyle birleştirilmek yerine <code>httpd.conf</code> içinde
238         <directive module="mod_so">LoadModule</directive> yönergeleri
239         sayesinde çalışma anında birleştirilebilmektedir. Bu yolla, örneğin
240         tek bir Apache kurulumuyla birbirinden farklı yapılandırmalara sahip
241         çok sayıda sunucu çalıştırmak mümkündür. (standart veya SSL sürümü;
242         basitleştirilmiş veya devingen sürümü [mod_perl, PHP3], vs.)</li>
243
244       <li>Sunucu paketi kurulumdan sonra bile üçüncü parti modüllerle kolayca
245         genişletilebilir. Bu özellikle, bir Apache temel paketinin yanında
246         PHP, mod_perl, mod_security gibi ek paketler oluşturan paket
247         dağıtıcılarına büyük yarar sağlar.</li>
248
249       <li>Yeni Apache httpd modülleri için daha kolay prototip
250         geliştirilebilir: Modül kaynak kodunu DSO/<program>apxs</program> çifti
251         sayesinde Apache httpd kaynak ağacının dışında derleyip modülün yeni
252         bir sürümünü bir <code>apxs -i</code> komutunun ardından
253         <code>apachectl restart</code> yaparak çalışan bir Apache HTTP
254         Sunucusunda denemek daha kolay hale getirilmiştir.</li>
255     </ul>
256
257     <p>DSO kullanımının götürüleri ise şunlardır:</p>
258
259     <ul>
260       <li>İlk yüklemede %20 yavaşlama: Unix yükleyicisi simgeleri çözümlemek
261         zorunda olduğundan sunucu ilk başlatılırken yaklaşık %20 daha yavaş
262         faaliyete geçer.</li>
263
264       <li>Çalışma sırasında % 5 yavaşlama: Konumdan bağımsız kodun (PIC -
265         Position Independent Code) göreli adresleme için karmaşık oyunlara
266         girmesi ve bunun mutlak adresleme kadar hızlı olmaması nedeniyle
267         sunucu bazı platformlarda çalışma anında yaklaşık %5 daha yavaş
268         çalışabilir.</li>
269
270       <li>DSO'nun tüm modüller için uygun olmaması: DSO modülleri bazı
271         platformlarda diğer DSO temelli kütüphanelerle ilintilenemediğinden
272         (<code>ld -lfilanca</code>) DSO mekanizmasını tüm modül türleri için
273         kullanamazsınız (örneğin a.out temelli platformlar bu işlevselliği
274         ELF temelli platformlar kadar iyi sağlamaz). Başka bir deyişle, DSO
275         dosyaları olarak derlenmiş modüllerin kullanabileceği simgeler ya
276         Apache httpd temel kodunda vardır ya Apache httpd temel kodunun
277         kullandığı C kütüphanesinde (<code>libc</code>) ve diğer durağan ve
278         devingen kütüphanelerde vardır ya da konumdan bağımsız kodu içeren
279         durağan kütüphane arşivlerinde (<code>libfilanca.a</code>)
280         vardır. Diğer modülleri kullanmak için tek şansınız ya Apache httpd
281         çekirdeğinin modüle bir atıf içermesini sağlamak ya da modül kodunu
282         <code>dlopen()</code> vasıtasıyla yüklemektir.</li>
283     </ul>
284
285 </section>
286
287 </manualpage>