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="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
23 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
24 <a href="./tr/dso.html" title="Türkçe"> tr </a></p>
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>
37 <p>Bu belgede DSO modüllerinin kullanımının yanında teorisine de
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>
45 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
47 <h2><a name="implementation" id="implementation">Gerçeklenim</a></h2>
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>
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>
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>
79 <h2><a name="usage" id="usage">Kullanıcı Özeti</a></h2>
81 <p>Apache 2.x’in DSO özelliklerine bir giriş olarak burada kısaca bir
82 bilgi vermekle yetinilecektir:</p>
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:
89 <div class="example"><p><code>
90 $ ./configure --prefix=/kurulum/yeri --enable-filanca=shared<br />
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:
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 />
108 <li>Paylaşımlı modülleri <em>sonradan kurmak için</em> Apache şöyle
111 <div class="example"><p><code>
112 $ ./configure --enable-so<br />
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
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
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>
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>
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>
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
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ış
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>
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
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>
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>
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>
240 <p>Yukarıda bahsedilen DSO’ya dayalı özelliklerin getirileri
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],
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>
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>
267 <p>DSO kullanımının götürüleri ise şunlardır:</p>
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>
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>
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ş
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>
300 <div class="bottomlang">
301 <p><span>Mevcut Diller: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English"> en </a> |
302 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
303 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
304 <a href="./tr/dso.html" title="Türkçe"> tr </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>