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