]> granicus.if.org Git - apache/blob - docs/manual/dso.html.tr.utf8
update transformation
[apache] / docs / manual / dso.html.tr.utf8
1 <?xml version="1.0" encoding="UTF-8"?>
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="tr" xml:lang="tr"><head><!--
4         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5               This file is generated from xml source: DO NOT EDIT
6         XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7       -->
8 <title>Devingen Paylaşımlı Nesne Desteği - Apache HTTP Sunucusu</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/">Modüller</a> | <a href="./mod/directives.html">Yönergeler</a> | <a href="./faq/">SSS</a> | <a href="./glossary.html">Terimler</a> | <a href="./sitemap.html">Site Haritası</a></p>
15 <p class="apache">Apache HTTP Sunucusu Sürüm 2.3</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/">HTTP Sunucusu</a> &gt; <a href="http://httpd.apache.org/docs/">Belgeleme</a> &gt; <a href="./">Sürüm 2.3</a></div><div id="page-content"><div id="preamble"><h1>Devingen Paylaşımlı Nesne Desteği</h1>
20 <div class="toplang">
21 <p><span>Mevcut Diller: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
22 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
23 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
24 <a href="./tr/dso.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
25 </div>
26
27     <p>Apache HTTP Sunucusu modüler bir program olup, yönetici sadece bir
28       grup modül seçerek sunucuya işlevsellik ekleyebilir. Modüller sunucunun
29       derlenmesi sırasında doğrudan <code class="program"><a href="./programs/httpd.html">httpd</a></code> programının
30       içinde derlenebileceği gibi Devingen Paylaşımlı Nesneler (DSO - Dynamic
31       Shared Object) halinde <code class="program"><a href="./programs/httpd.html">httpd</a></code> programından ayrı
32       olarak da derlenebilir. DSO modülleri sunucunun derlenmesi sırasında
33       derlenebileceği gibi ayrı olarak derlenip daha sonra Apache Eklenti
34       Aracı (Apache Extension Tool) <code class="program"><a href="./programs/apxs.html">apxs</a></code> programı
35       kullanılarak sunucuya eklenebilir.</p>
36
37     <p>Bu belgede DSO modüllerinin kullanımının yanında teorisine de
38       değinilecektir.</p>
39   </div>
40 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Gerçeklenim</a></li>
41 <li><img alt="" src="./images/down.gif" /> <a href="#usage">Kullanıcı Özeti</a></li>
42 <li><img alt="" src="./images/down.gif" /> <a href="#background">Artalan Bilgisi</a></li>
43 <li><img alt="" src="./images/down.gif" /> <a href="#advantages">Getiriler ve Götürüler</a></li>
44 </ul></div>
45 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
46 <div class="section">
47 <h2><a name="implementation" id="implementation">Gerçeklenim</a></h2>
48
49 <table class="related"><tr><th>İlgili Modüller</th><th>İlgili Yönergeler</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>
50
51     <p>Apache modüllerini yüklemek için DSO desteği, Apache çekirdeğine
52       durağan olarak ilintilenerek derlenmiş olan <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>
53       adında bir modül tarafından sağlanır. <code class="module"><a href="./mod/core.html">core</a></code> modülünden
54       başka, bir DSO modülü olamayan tek modül <code class="module"><a href="./mod/mod_so.html">mod_so</a></code>
55       modülüdür. Hemen hemen tüm diğer Apache modülleri <a href="install.html">kurulum belgesinde</a> de açıklandığı gibi
56       <code class="program"><a href="./programs/configure.html">configure</a></code> betiğinin
57       <code>--enable-<em>modül</em>=shared</code> seçeneği her modül için ayrı
58       ayrı belirtilerek birer DSO modülü olarak derlenebilir. Derlenmiş
59       modüller <code>mod_filanca.so</code> biçeminde birer DSO ismi alırlar ve
60       her biri istenirse <code>httpd.conf</code> dosyasında
61       <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> modülünün <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergesiyle belirtilerek sunucu başlatılırken
62       veya yeniden başlatılırken sunucuya yüklenebilir.</p>
63
64     <p>Apache modülleri için (özellikle üçüncü parti modüller için) DSO
65       dosyası üretimini kolaylaştırmak amacıyla <code class="program"><a href="./programs/apxs.html">apxs</a></code>
66       (<dfn>APache eXtenSion</dfn>) adında yeni bir destek programı
67       kullanılmaktadır. Bu program Apache modüllerini Apache kaynak ağacından
68       ayrı olarak derlemek için kullanılabilir. Fikir basittir: Apache
69       derlenirken DSO dosyalarını derlemek için platforma bağımlı
70       derleyici ve ilintileyici seçenekleri <code class="program"><a href="./programs/apxs.html">apxs</a></code>
71       programının içine konur ve Apache’nin <code>make install</code> ile
72       kurulumu sırasında Apache C başlık dosyaları da kurulur. Böylece
73       kullanıcı Apache dağıtımının kaynak ağacına ihtiyaç duymadan ve
74       platforma bağımlı derleyici ve ilintileyici seçeneklerini bilmek zorunda
75       kalmadan istediği Apache modülünü <code class="program"><a href="./programs/apxs.html">apxs</a></code> programını
76       kullanarak derleyebilir.</p>
77 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
78 <div class="section">
79 <h2><a name="usage" id="usage">Kullanıcı Özeti</a></h2>
80
81     <p>Apache 2.x’in DSO özelliklerine bir giriş olarak burada kısaca bir
82       bilgi vermekle yetinilecektir:</p>
83
84     <ol>
85       <li>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
86         <em>özgün</em> Apache modülünü <code>mod_filanca.so</code> isminde bir
87         DSO modülü olarak derlemek ve kurmak için şöyle yapılır:
88
89 <div class="example"><p><code>
90   $ ./configure --prefix=/kurulum/yeri --enable-filanca=shared<br />
91   $ make install
92 </code></p></div>
93       </li>
94
95       <li>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
96         <em>üçüncü parti</em> Apache modülünü <code>mod_filanca.so</code>
97         isminde bir DSO modülü olarak derlemek ve kurmak için şöyle yapılır:
98
99 <div class="example"><p><code>
100 $ ./configure --add-module=<var>modül-türü</var>:/bir/kurulum/yeri/mod_filanca.c \<br />
101 <span class="indent">
102   --enable-filanca=shared<br />
103 </span>
104 $ make install
105 </code></p></div>
106       </li>
107
108       <li>Paylaşımlı modülleri <em>sonradan kurmak için</em> Apache şöyle
109         yapılandırılır:
110
111 <div class="example"><p><code>
112 $ ./configure --enable-so<br />
113 $ make install
114 </code></p></div>
115       </li>
116
117       <li>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
118         <em>üçüncü parti</em> Apache modülü <code>mod_filanca.so</code>
119         isminde bir DSO modülü olarak Apache kaynak ağacının dışında
120         <code class="program"><a href="./programs/apxs.html">apxs</a></code> kullanarak derlemek ve kurmak için şöyle
121         yapılır:
122
123 <div class="example"><p><code>
124 $ cd /bir/kurulum/yeri<br />
125 $ apxs -c mod_filanca.c<br />
126 $ apxs -i -a -n filanca mod_filanca.la
127 </code></p></div>
128       </li>
129     </ol>
130
131     <p>Tüm durumlarda derlenen paylaşımlı modülü Apache’nin etkin kılabilmesi
132       için <code>httpd.conf</code> dosyasında o modül için bir <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergesi bulunmalıdır.</p>
133 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
134 <div class="section">
135 <h2><a name="background" id="background">Artalan Bilgisi</a></h2>
136
137     <p>Günümüzün Unix türevlerinde var olan şık bir mekanizma sayesinde
138       çalıştırılabilir bir programın adres uzayına çalışma anında yüklenmek
139       veya ilintilenmek üzere <em>Devingen Paylaşımlı Nesneler</em> (DSO -
140       Dynamic Shared Object) adı verilen, özel bir biçem kullanarak kodlanmış
141       program parçaları oluşturulabilir.</p>
142
143     <p>Bu yükleme normalde iki yolla yapılabilir: Ya çalıştırılabilir
144       programın başlatılması sırasında yüklenen <code>ld.so</code> adlı bir
145       sistem programınının devingen olarak yüklenmesi ile ya da
146       çalıştırılabilir programın içinden Unix yükleyicisine programsal sistem
147       arayüzü sağlayan <code>dlopen()/dlsym()</code> sistem çağrılarının elle
148       yapılması suretiyle.</p>
149
150     <p>İlk yöntemde kullanılan DSO’lara genelde <em>paylaşımlı
151       kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir ve
152       bunların dosyaları <code>libfilanca.so</code> veya
153       <code>libfilanca.so.1.2</code> biçiminde isimlendirilir. Belli bir
154       sistem dizininde (normalde <code>/usr/lib</code>) bulunurlar ve derleme
155       sırasında ilintileyici komutuna <code>-lfilanca</code> şeklinde
156       belirtilerek çalıştırılabilir programla ilintilenirler. Doğrudan
157       çalıştırılabilir koda eklenen bu kodlar Unix yükleyicisinin programın
158       başlatılması sırasında kütüphaneyi <code>/usr/lib</code> altında
159       <code>libfilanca.so</code> adıyla bulabilmesini sağlar. Kütüphanelerin
160       aranacağı yerler ya <code>-R</code> gibi bir ilintileyici seçeneği ile
161       koda eklenir ya da arama yolları <code>LD_LIBRARY_PATH</code> ortam
162       değişkeni aracılığıyla yapılandırılır. Böylece çalıştırılabilir
163       programda henüz çözümlenmemiş simgeler DSO içinde bulunarak
164       çözümlenebilir.</p>
165
166     <p>Çalıştırılabilir program içindeki simgelere normalde DSO içinden
167       atıfta bulunulmaz (genel kod kütüphanesinin başka programlarca da
168       kullanılması nedeniyle). Bu bakımdan DSO tarafında böyle bir çözümleme
169       yapılmaz. Çalıştırılabilir program da DSO’daki simgeleri kendisi
170       çözümlemeye uğraşmaz, bu işlemlerden tamamen Unix yükleyicisi
171       (<code>ld.so</code>) sorumludur. (Aslında, <code>ld.so</code>’yu
172       çağıracak kod, her çalıştırılabilir programın içine ilintilenmiş
173       (durağan değil) başlatma kodunun bir parçasıdır.) Programlar tarafından
174       ortaklaşa kullanılan kütüphanelerin devingen olarak yüklenmesinin sebebi
175       basittir: Kütüphane kodu <code>libc.so</code> gibi bir sistem
176       kütüphanesine bir kere kaydedilip disk alanından yer kazanılmış
177       olur.</p>
178
179     <p>İkinci yöntemde kullanılan DSO’lara yine <em>paylaşımlı
180       kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir fakat
181       bunların dosyaları geçerli kabule göre <code>filanca.so</code> gibi
182       isimlendirilse de genelde keyfi olarak seçilen bir dosya uzantısı
183       kullanılarak isimlendirilirler. Bu dosyalar genellikle programa özel bir
184       dizinde dururlar ve bu dosyaları kullanacak olan çalıştırılabilir
185       programla aralarında özdevimli olarak bağ kurulmamıştır. Bunun yerine,
186       çalıştırılabilir program DSO’yu çalışma anında <code>dlopen()</code>
187       sayesinde kendi adres uzayına ekler. Çalıştırılabilir program için
188       DSO’daki simgeler bu sırada çözümlenmez. Özdevimli olarak devreye
189       giren Unix yükleyicisi, (varsa) artakalan simgeleri, çalıştırılabilir
190       ihraç edilen simge kümelerini (ve özellikle her yerde hazır ve nazır
191       <code>libc.so</code> içindeki tüm simgeleri) kullanarak çözümler. Bu
192       yolla DSO, çalıştırılabilir programın simge kümesi bilgilerini sanki
193       kendisine baştan durağan olarak ilintilenmiş gibi ulaşabilir.</p>
194
195     <p>Son olarak, DSO’nun programlama arayüzünün getirilerinden yararlanmak
196       amacıyla çalıştırılabilir program, daha sonra dağıtım tabloları vb.
197       yerlerde kullanmak üzere <code>dlsym()</code> üzerinden DSO’daki belli
198       simgeleri çözümlemek zorundadır. Başka bir deyişle: Çalıştırılabilir
199       program ihtiyaç duyduğu her simgeyi kullanmak için kendisi çözümleme
200       yapmak zorundadır. Böyle bir mekanizmanın getirisi, programın isteğe
201       bağlı parçalarının gerekli olana kadar yüklenmemesidir (böylece daha az
202       bellek alanı kullanılır). Gerektiği zaman programın işlevselliğini
203       arttırmak amacıyla bu parçalar devingen olarak programa
204       yüklenebilir.</p>
205
206     <p>DSO mekanizmasının bu basit gibi görünen işleyişinde zorluk içeren bir
207       adım şudur (başkaları da olabilir): Bir programın işlevselliğini
208       genişletmek için DSO kullanılırken (ikinci yöntem) çalıştırılabilir
209       programdan DSO için simgelerin çözümlenmesi.  Zorluğun sebebi,
210       "tersine çözümleme" yapılmasıdır; çalıştırılabilir programın simge
211       kümesindeki DSO simgeleri kütüphane tasarımına aykırı bir şekilde
212       çözümlenir ve bu uygulama tüm platformlarda hazır olarak
213       desteklenmediği gibi standartlaşmış da değildir. Geçer uygulamada
214       çalıştırılabilir programın evrensel simgeleri çoğunlukla yeniden dışa
215       verilmez ve bu bakımdan bir DSO içinde kullanılmaları uygun değildir.
216       Esas sorun, çalıştırılabilir bir programın işlevselliğini çalışma
217       anında genişletmek için DSO kullanımı sırasında ilintileyicinin tüm
218       evrensel simgeleri dışa vermesini zorlamanın bir yolunu bulmaktır.</p>
219
220     <p>Paylaşımlı kütüphane yaklaşımı bu bakımdan türünün tek örneğidir,
221       çünkü DSO mekanizması özellikle bunun için tasarlanmıştır, dolayısıyla
222       işletim sisteminin sağladığı hemen hemen tüm kütüphaneler için
223       kullanılabilir. Diğer taraftan, bir programın işlevselliğini
224       genişletmek için paylaşımlı nesne kullanımı çoğu program tarafından
225       kullanılan bir şey değildir.</p>
226
227     <p>1998 itibariyle, DSO nesneleriyle çalışma anında çalıştırılabilir
228       program işlevselliğini genişleten başlıca birkaç yazılım paketi vardır:
229       Perl 5 (XS mekanizması ve DynaLoader modülü üzerinden), Netscape
230       Sunucusu, vd. 1.3 sürümünden itibaren Apache de bu gruba katıldı. Çünkü
231       Apache, modül kavramını zaten program işlevselliğini genişletmek için
232       kullanıyordu ve temel işlevselliğine dış modülleri ilintilemek için
233       dahili olarak dağıtım listesine dayalı bir yaklaşım kullanmaktaydı.
234       Dolayısıyla Apache, modüllerini çalışma anında yüklemek için DSO
235       kullanmaya baştan yazgılıydı.</p>
236 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
237 <div class="section">
238 <h2><a name="advantages" id="advantages">Getiriler ve Götürüler</a></h2>
239
240     <p>Yukarıda bahsedilen DSO’ya dayalı özelliklerin getirileri
241       şunlardır:</p>
242
243     <ul>
244       <li>Sunucu paketi çalışma anında daha esnektir çünkü, asıl sunucuyu
245         oluşturan parçalar derleme sırasında <code class="program"><a href="./programs/configure.html">configure</a></code>
246         seçenekleriyle birleştirilmek yerine <code>httpd.conf</code> içinde
247         <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergeleri
248         sayesinde çalışma anında birleştirilebilmektedir. Bu yolla, örneğin
249         tek bir Apache kurulumuyla birbirinden farklı yapılandırmalara sahip
250         çok sayıda sunucu çalıştırmak mümkündür. (standart veya SSL sürümü;
251         basitleştirilmiş veya güçlendirilmiş sürümü [mod_perl, PHP3],
252         vs.)</li>
253
254       <li>Sunucu paketi kurulumdan sonra bile üçüncü parti modüllerle kolayca
255         genişletilebilir. Bu özellikle, bir Apache temel paketinin yanında
256         PHP3, mod_perl, mod_fastcgi gibi ek paketler oluşturan paket
257         dağıtıcılarına büyük yarar sağlar.</li>
258
259       <li>Yeni Apache modülleri için daha kolay prototip geliştirilebilir:
260         Modül kaynak kodunu DSO/<code class="program"><a href="./programs/apxs.html">apxs</a></code> çifti sayesinde
261         Apache kaynak ağacının dışında derleyip modülün yeni bir sürümünü bir
262         <code>apxs -i</code> komutunun ardından <code>apachectl
263         restart</code> yaparak çalışan bir Apache sunucusunda denemek daha
264         kolay hale getirilmiştir.</li>
265     </ul>
266
267     <p>DSO kullanımının götürüleri ise şunlardır:</p>
268
269     <ul>
270       <li>Her platformda hazır olarak desteklenmeme: Tüm işletim sistemleri
271         bir programa devingen olarak kod yükleme becerisine sahip
272         olmadığından DSO mekanizması her platformda kullanılamaz.</li>
273
274       <li>İlk yüklemede %20 yavaşlama: Unix yükleyicisi simgeleri çözümlemek
275         zorunda olduğundan sunucu ilk başlatılırken yaklaşık %20 daha yavaş
276         faaliyete geçer.</li>
277
278       <li>Çalışma sırasında % 5 yavaşlama: Konumdan bağımsız kodun (PIC -
279         Position Independent Code) göreli adresleme için karmaşık oyunlara
280         girmesi ve bunun mutlak adresleme kadar hızlı olmaması nedeniyle
281         sunucu bazı platformlarda çalışma anında yaklaşık %5 daha yavaş
282         çalışabilir.</li>
283
284       <li>DSO'nun tüm modüller için uygun olmaması: DSO modülleri bazı
285         platformlarda diğer DSO temelli kütüphanelerle ilintilenemediğinden
286         (<code>ld -lfilanca</code>) DSO mekanizmasını tüm modül türleri için
287         kullanamazsınız (örneğin a.out temelli platformlar bu işlevselliği
288         ELF temelli platformlar kadar iyi sağlamaz). Başka bir deyişle, DSO
289         dosyaları olarak derlenmiş modüllerin kullanabileceği simgeler ya
290         Apache temel kodunda vardır ya Apache temel kodunun kullandığı C
291         kütüphanesinde (<code>libc</code>) ve diğer durağan ve devingen
292         kütüphanelerde vardır ya da konumdan bağımsız kodu içeren
293         durağan kütüphane arşivlerinde (<code>libfilanca.a</code>)
294         vardır. Diğer modülleri kullanmak için tek şansınız ya Apache
295         çekirdeğinin modüle bir atıf içermesini sağlamak ya da modül kodunu
296         <code>dlopen()</code> vasıtasıyla yüklemektir.</li>
297     </ul>
298
299 </div></div>
300 <div class="bottomlang">
301 <p><span>Mevcut Diller: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
302 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
303 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
304 <a href="./tr/dso.html" title="Türkçe">&nbsp;tr&nbsp;</a></p>
305 </div><div id="footer">
306 <p class="apache">Copyright 2008 The Apache Software Foundation.<br /><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p>
307 <p class="menu"><a href="./mod/">Modüller</a> | <a href="./mod/directives.html">Yönergeler</a> | <a href="./faq/">SSS</a> | <a href="./glossary.html">Terimler</a> | <a href="./sitemap.html">Site Haritası</a></p></div>
308 </body></html>