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
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" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" />
12 <script src="./style/scripts/prettify.js" type="text/javascript">
15 <link href="./images/favicon.ico" rel="shortcut icon" /></head>
16 <body id="manual-page"><div id="page-header">
17 <p class="menu"><a href="./mod/">Modüller</a> | <a href="./mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="./glossary.html">Terimler</a> | <a href="./sitemap.html">Site Haritası</a></p>
18 <p class="apache">Apache HTTP Sunucusu Sürüm 2.5</p>
19 <img alt="" src="./images/feather.gif" /></div>
20 <div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
22 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Sunucusu</a> > <a href="http://httpd.apache.org/docs/">Belgeleme</a> > <a href="./">Sürüm 2.5</a></div><div id="page-content"><div id="preamble"><h1>Devingen Paylaşımlı Nesne Desteği</h1>
24 <p><span>Mevcut Diller: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English"> en </a> |
25 <a href="./fr/dso.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
26 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
27 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
28 <a href="./tr/dso.html" title="Türkçe"> tr </a></p>
31 <p>Apache HTTP Sunucusu modüler bir program olup, yönetici sadece bir
32 grup modül seçerek sunucuya işlevsellik ekleyebilir. Modüller, Devingen
33 Paylaşımlı Nesneler (DSO - Dynamic Shared Object) halinde
34 <code class="program"><a href="./programs/httpd.html">httpd</a></code> programından ayrı olarak derlenir. DSO modülleri
35 sunucunun derlenmesi sırasında derlenebileceği gibi ayrı olarak derlenip
36 daha sonra Apache Eklenti Aracı (Apache Extension Tool)
37 <code class="program"><a href="./programs/apxs.html">apxs</a></code> programı kullanılarak da sunucuya eklenebilir.</p>
39 <p>Bu belgede DSO modüllerinin kullanımının yanında teorisine de
42 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Gerçeklenim</a></li>
43 <li><img alt="" src="./images/down.gif" /> <a href="#usage">Kullanım Özeti</a></li>
44 <li><img alt="" src="./images/down.gif" /> <a href="#background">Artalan Bilgisi</a></li>
45 <li><img alt="" src="./images/down.gif" /> <a href="#advantages">Getiriler ve Götürüler</a></li>
46 </ul><ul class="seealso"><li><a href="#comments_section">Yorum</a></li></ul></div>
47 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
49 <h2><a name="implementation" id="implementation">Gerçeklenim</a></h2>
51 <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>
53 <p>Apache httpd modüllerini yüklemek için DSO desteği, Apache httpd
54 çekirdeğine durağan olarak ilintilenerek derlenmiş olan
55 <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> adında bir modül tarafından sağlanır.
56 <code class="module"><a href="./mod/core.html">core</a></code> modülünden başka, bir DSO modülü olamayan tek modül
57 <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> modülüdür. Apache ile dağıtılan hemen hemen tüm
58 diğer Apache modülleri bir DSO modülüne yerleştirilebilir. 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>
64 <p><a href="install.html">Kurulum belgesinde</a> açıklandığı gibi, her DSO
65 modülü <code class="program"><a href="./programs/configure.html">configure</a></code> programının
66 <code>--enable-mods-static</code> seçeneği ile devredışı bırakılabilir.</p>
68 <p>Apache httpd modülleri için (özellikle üçüncü parti modüller için) DSO
69 dosyası üretimini kolaylaştırmak amacıyla <code class="program"><a href="./programs/apxs.html">apxs</a></code>
70 (<dfn>APache eXtenSion</dfn>) adında yeni bir destek programı
71 kullanılmaktadır. Bu program Apache httpd modüllerini Apache httpd kaynak
72 ağacından ayrı olarak derlemek için kullanılabilir. Fikir basittir: Apache
73 HTTP Sunucusu derlenirken DSO dosyalarını derlemek için platforma bağımlı
74 derleyici ve ilintileyici seçenekleri <code class="program"><a href="./programs/apxs.html">apxs</a></code>
75 programının içine konur ve <code>make install</code> ile kurulum sırasında
76 Apache httpd C başlık dosyaları da kurulur. Böylece
77 kullanıcı Apache httpd dağıtımının kaynak ağacına ihtiyaç duymadan ve
78 platforma bağımlı derleyici ve ilintileyici seçeneklerini bilmek zorunda
79 kalmadan istediği Apache httpd modülünü <code class="program"><a href="./programs/apxs.html">apxs</a></code>
80 programını kullanarak derleyebilir.</p>
81 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
83 <h2><a name="usage" id="usage">Kullanım Özeti</a></h2>
85 <p>Apache HTTP Sunucusu 2.x’in DSO özelliklerine bir giriş olarak burada
86 kısaca bir bilgi vermekle yetinilecektir:</p>
89 <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
90 <em>özgün</em> Apache htpd modülünü <code>mod_filanca.so</code> isminde
91 bir DSO modülü olarak derlemek ve kurmak için şöyle yapılır:</p>
93 <div class="example"><p><code>
94 $ ./configure --prefix=/kurulum/yeri --enable-filanca<br />
99 <li><p>Apache HTTP Sunucusunu tüm modüller etkin olarak
100 derleyebilirsiniz. Fakat sunucunun başlatılması sırasında sadece temel
101 modüller yüklenir. Daha sonra <code>httpd.conf</code> içindeki
102 <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergelerini etkin
103 veya etkisiz hale getirerek yüklenecek modülleri
104 değiştirebilirsiniz.</p>
106 <div class="example"><p><code>
107 $ ./configure --enable-mods-shared=all<br />
112 <li><p>Bazı modüller sadece geliştiriciler içindir ve bunlar tüm
113 modüllerin derlenmesini (<em>all</em>) seçseniz bile derlenmeyecektir.
114 Geliştirici modülleri dehil tüm modülleri derlemek isterseniz
115 <em>reallyall</em> kullanınız. Ek olarak, derlenmiş modüller için
116 kullanılan <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code>
117 yönergelerinin tamamını <code>--enable-load-all-modules</code> derleme
118 seçeneği ile etkin kılabilirsiniz.</p>
120 <div class="example"><p><code>
121 $ ./configure --enable-mods-shared=reallyall --enable-load-all-modules<br />
126 <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
127 <em>üçüncü parti</em> Apache httpd modülü <code>mod_filanca.so</code>
128 isminde bir DSO modülü olarak Apache httpd kaynak ağacının dışında
129 <code class="program"><a href="./programs/apxs.html">apxs</a></code> kullanarak derlemek ve kurmak için şöyle
132 <div class="example"><p><code>
133 $ cd /bir/kurulum/yeri<br />
134 $ apxs -c mod_filanca.c<br />
135 $ apxs -aci filanca mod_filanca.la
140 <p>Tüm durumlarda derlenen paylaşımlı modülü Apache httpd’nin etkin
141 kılabilmesi için <code>httpd.conf</code> dosyasında o modül için bir
142 <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergesi
145 <p>Ayrıntılı bilgi için <a href="programs/apxs.html">apxs belgelerine</a>
147 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
148 <div class="section">
149 <h2><a name="background" id="background">Artalan Bilgisi</a></h2>
151 <p>Günümüzün Unix türevlerinde var olan bir mekanizma sayesinde
152 çalıştırılabilir bir programın adres uzayına çalışma anında yüklenmek
153 veya ilintilenmek üzere <em>Devingen Paylaşımlı Nesneler</em> (DSO -
154 Dynamic Shared Object) adı verilen, özel bir biçem kullanarak kodlanmış
155 program parçaları oluşturulabilir.</p>
157 <p>Bu yükleme normalde iki yolla yapılabilir: Ya çalıştırılabilir
158 programın başlatılması sırasında yüklenen <code>ld.so</code> adlı bir
159 sistem programınının devingen olarak yüklenmesi ile ya da
160 çalıştırılabilir programın içinden Unix yükleyicisine programsal sistem
161 arayüzü sağlayan <code>dlopen()/dlsym()</code> sistem çağrılarının elle
162 yapılması suretiyle.</p>
164 <p>İlk yöntemde kullanılan DSO’lara genelde <em>paylaşımlı
165 kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir ve
166 bunların dosyaları <code>libfilanca.so</code> veya
167 <code>libfilanca.so.1.2</code> biçiminde isimlendirilir. Belli bir
168 sistem dizininde (normalde <code>/usr/lib</code>) bulunurlar ve derleme
169 sırasında ilintileyici komutuna <code>-lfilanca</code> şeklinde
170 belirtilerek çalıştırılabilir programla ilintilenirler. Doğrudan
171 çalıştırılabilir koda eklenen bu kodlar Unix yükleyicisinin programın
172 başlatılması sırasında kütüphaneyi <code>/usr/lib</code> altında
173 <code>libfilanca.so</code> adıyla bulabilmesini sağlar. Kütüphanelerin
174 aranacağı yerler ya <code>-R</code> gibi bir ilintileyici seçeneği ile
175 koda eklenir ya da arama yolları <code>LD_LIBRARY_PATH</code> ortam
176 değişkeni aracılığıyla yapılandırılır. Böylece çalıştırılabilir
177 programda henüz çözümlenmemiş simgeler DSO içinde bulunarak
180 <p>Çalıştırılabilir program içindeki simgelere normalde DSO içinden
181 atıfta bulunulmaz (genel kod kütüphanesinin başka programlarca da
182 kullanılması nedeniyle). Bu bakımdan DSO tarafında böyle bir çözümleme
183 yapılmaz. Çalıştırılabilir program da DSO’daki simgeleri kendisi
184 çözümlemeye uğraşmaz, bu işlemlerden tamamen Unix yükleyicisi
185 (<code>ld.so</code>) sorumludur. (Aslında, <code>ld.so</code>’yu
186 çağıracak kod, her çalıştırılabilir programın içine ilintilenmiş
187 (durağan değil) başlatma kodunun bir parçasıdır.) Programlar tarafından
188 ortaklaşa kullanılan kütüphanelerin devingen olarak yüklenmesinin sebebi
189 basittir: Kütüphane kodu <code>libc.so</code> gibi bir sistem
190 kütüphanesine bir kere kaydedilip disk alanından yer kazanılmış
193 <p>İkinci yöntemde kullanılan DSO’lara yine <em>paylaşımlı
194 kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir fakat
195 bunların dosyaları geçerli kabule göre <code>filanca.so</code> gibi
196 isimlendirilse de genelde keyfi olarak seçilen bir dosya uzantısı
197 kullanılarak isimlendirilirler. Bu dosyalar genellikle programa özel bir
198 dizinde dururlar ve bu dosyaları kullanacak olan çalıştırılabilir
199 programla aralarında özdevimli olarak bağ kurulmamıştır. Bunun yerine,
200 çalıştırılabilir program DSO’yu çalışma anında <code>dlopen()</code>
201 sayesinde kendi adres uzayına ekler. Çalıştırılabilir program için
202 DSO’daki simgeler bu sırada çözümlenmez. Özdevimli olarak devreye
203 giren Unix yükleyicisi, (varsa) artakalan simgeleri, çalıştırılabilir
204 ihraç edilen simge kümelerini (ve özellikle her yerde hazır ve nazır
205 <code>libc.so</code> içindeki tüm simgeleri) kullanarak çözümler. Bu
206 yolla DSO, çalıştırılabilir programın simge kümesi bilgilerini sanki
207 kendisine baştan durağan olarak ilintilenmiş gibi ulaşabilir.</p>
209 <p>Son olarak, DSO’nun programlama arayüzünün getirilerinden yararlanmak
210 amacıyla çalıştırılabilir program, daha sonra dağıtım tabloları vb.
211 yerlerde kullanmak üzere <code>dlsym()</code> üzerinden DSO’daki belli
212 simgeleri çözümlemek zorundadır. Başka bir deyişle: Çalıştırılabilir
213 program ihtiyaç duyduğu her simgeyi kullanmak için kendisi çözümleme
214 yapmak zorundadır. Böyle bir mekanizmanın getirisi, programın isteğe
215 bağlı parçalarının gerekli olana kadar yüklenmemesidir (böylece daha az
216 bellek alanı kullanılır). Gerektiği zaman programın işlevselliğini
217 arttırmak amacıyla bu parçalar devingen olarak programa
220 <p>DSO mekanizmasının bu basit gibi görünen işleyişinde zorluk içeren bir
221 adım şudur (başkaları da olabilir): Bir programın işlevselliğini
222 genişletmek için DSO kullanılırken (ikinci yöntem) çalıştırılabilir
223 programdan DSO için simgelerin çözümlenmesi. Zorluğun sebebi,
224 "tersine çözümleme" yapılmasıdır; çalıştırılabilir programın simge
225 kümesindeki DSO simgeleri kütüphane tasarımına aykırı bir şekilde
226 çözümlenir ve bu uygulama tüm platformlarda hazır olarak
227 desteklenmediği gibi standartlaşmış da değildir. Geçer uygulamada
228 çalıştırılabilir programın evrensel simgeleri çoğunlukla yeniden dışa
229 verilmez ve bu bakımdan bir DSO içinde kullanılmaları uygun değildir.
230 Esas sorun, çalıştırılabilir bir programın işlevselliğini çalışma
231 anında genişletmek için DSO kullanımı sırasında ilintileyicinin tüm
232 evrensel simgeleri dışa vermesini zorlamanın bir yolunu bulmaktır.</p>
234 <p>Paylaşımlı kütüphane yaklaşımı bu bakımdan türünün tek örneğidir,
235 çünkü DSO mekanizması özellikle bunun için tasarlanmıştır, dolayısıyla
236 işletim sisteminin sağladığı hemen hemen tüm kütüphaneler için
238 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
239 <div class="section">
240 <h2><a name="advantages" id="advantages">Getiriler ve Götürüler</a></h2>
242 <p>Yukarıda bahsedilen DSO’ya dayalı özelliklerin getirileri
246 <li>Sunucu paketi çalışma anında daha esnektir çünkü, sunucuyu
247 oluşturan parçalar derleme sırasında <code class="program"><a href="./programs/configure.html">configure</a></code>
248 seçenekleriyle birleştirilmek yerine <code>httpd.conf</code> içinde
249 <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergeleri
250 sayesinde çalışma anında birleştirilebilmektedir. Bu yolla, örneğin
251 tek bir Apache kurulumuyla birbirinden farklı yapılandırmalara sahip
252 çok sayıda sunucu çalıştırmak mümkündür. (standart veya SSL sürümü;
253 basitleştirilmiş veya devingen sürümü [mod_perl, PHP3], vs.)</li>
255 <li>Sunucu paketi kurulumdan sonra bile üçüncü parti modüllerle kolayca
256 genişletilebilir. Bu özellikle, bir Apache temel paketinin yanında
257 PHP, mod_perl, mod_security gibi ek paketler oluşturan paket
258 dağıtıcılarına büyük yarar sağlar.</li>
260 <li>Yeni Apache httpd modülleri için daha kolay prototip
261 geliştirilebilir: Modül kaynak kodunu DSO/<code class="program"><a href="./programs/apxs.html">apxs</a></code> çifti
262 sayesinde Apache httpd kaynak ağacının dışında derleyip modülün yeni
263 bir sürümünü bir <code>apxs -i</code> komutunun ardından
264 <code>apachectl restart</code> yaparak çalışan bir Apache HTTP
265 Sunucusunda denemek daha kolay hale getirilmiştir.</li>
268 <p>DSO kullanımının götürüleri ise şunlardır:</p>
271 <li>İlk yüklemede %20 yavaşlama: Unix yükleyicisi simgeleri çözümlemek
272 zorunda olduğundan sunucu ilk başlatılırken yaklaşık %20 daha yavaş
273 faaliyete geçer.</li>
275 <li>Çalışma sırasında % 5 yavaşlama: Konumdan bağımsız kodun (PIC -
276 Position Independent Code) göreli adresleme için karmaşık oyunlara
277 girmesi ve bunun mutlak adresleme kadar hızlı olmaması nedeniyle
278 sunucu bazı platformlarda çalışma anında yaklaşık %5 daha yavaş
281 <li>DSO'nun tüm modüller için uygun olmaması: DSO modülleri bazı
282 platformlarda diğer DSO temelli kütüphanelerle ilintilenemediğinden
283 (<code>ld -lfilanca</code>) DSO mekanizmasını tüm modül türleri için
284 kullanamazsınız (örneğin a.out temelli platformlar bu işlevselliği
285 ELF temelli platformlar kadar iyi sağlamaz). Başka bir deyişle, DSO
286 dosyaları olarak derlenmiş modüllerin kullanabileceği simgeler ya
287 Apache httpd temel kodunda vardır ya Apache httpd temel kodunun
288 kullandığı C kütüphanesinde (<code>libc</code>) ve diğer durağan ve
289 devingen kütüphanelerde vardır ya da konumdan bağımsız kodu içeren
290 durağan kütüphane arşivlerinde (<code>libfilanca.a</code>)
291 vardır. Diğer modülleri kullanmak için tek şansınız ya Apache httpd
292 çekirdeğinin modüle bir atıf içermesini sağlamak ya da modül kodunu
293 <code>dlopen()</code> vasıtasıyla yüklemektir.</li>
297 <div class="bottomlang">
298 <p><span>Mevcut Diller: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English"> en </a> |
299 <a href="./fr/dso.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
300 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
301 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
302 <a href="./tr/dso.html" title="Türkçe"> tr </a></p>
303 </div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Yorum</a></h2><div class="warning"><strong>This section is experimental!</strong><br />Comments placed here should not be expected
304 to last beyond the testing phase of this system, nor do we in any way guarantee that we'll read them.</div><div id="disqus_thread" /><script type="text/javascript"><!--//--><![CDATA[//><!--
306 var disqus_shortname = 'httpd';
307 var disqus_identifier = window.location.href.replace(/(current|trunk)/, "2.4").replace(/\/[a-z]{2}\//, "/").replace(window.location.protocol, "http:") + '.' + lang;
308 if (disqus_identifier.indexOf("httpd.apache.org") != -1) {
310 var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
311 dsq.src = window.location.protocol + '//' + disqus_shortname + '.disqus.com/embed.js';
312 (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
315 var text = document.createTextNode("Comments have been disabled for offline viewing.");
316 document.getElementById('disqus_thread').appendChild(text);
318 //--><!]]></script></div><div id="footer">
319 <p class="apache">Copyright 2012 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>
320 <p class="menu"><a href="./mod/">Modüller</a> | <a href="./mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="./glossary.html">Terimler</a> | <a href="./sitemap.html">Site Haritası</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
321 if (typeof(prettyPrint) !== undefined) {