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