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, Devingen
30 Paylaşımlı Nesneler (DSO - Dynamic Shared Object) halinde
31 <code class="program"><a href="./programs/httpd.html">httpd</a></code> programından ayrı olarak derlenir. DSO modülleri
32 sunucunun derlenmesi sırasında derlenebileceği gibi ayrı olarak derlenip
33 daha sonra Apache Eklenti Aracı (Apache Extension Tool)
34 <code class="program"><a href="./programs/apxs.html">apxs</a></code> programı kullanılarak da sunucuya eklenebilir.</p>
36 <p>Bu belgede DSO modüllerinin kullanımının yanında teorisine de
39 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#implementation">Gerçeklenim</a></li>
40 <li><img alt="" src="./images/down.gif" /> <a href="#usage">Kullanım Özeti</a></li>
41 <li><img alt="" src="./images/down.gif" /> <a href="#background">Artalan Bilgisi</a></li>
42 <li><img alt="" src="./images/down.gif" /> <a href="#advantages">Getiriler ve Götürüler</a></li>
44 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
46 <h2><a name="implementation" id="implementation">Gerçeklenim</a></h2>
48 <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 <p>Apache httpd modüllerini yüklemek için DSO desteği, Apache httpd
51 çekirdeğine durağan olarak ilintilenerek derlenmiş olan
52 <code class="module"><a href="./mod/mod_so.html">mod_so</a></code> adında bir modül tarafından sağlanır.
53 <code class="module"><a href="./mod/core.html">core</a></code> modülünden başka, bir DSO modülü olamayan tek modül
54 <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
55 diğer Apache modülleri bir DSO modülüne yerleştirilebilir. Derlenmiş
56 modüller <code>mod_filanca.so</code> biçeminde birer DSO ismi alırlar ve
57 her biri istenirse <code>httpd.conf</code> dosyasında
58 <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
59 veya yeniden başlatılırken sunucuya yüklenebilir.</p>
61 <p><a href="install.html">Kurulum belgesinde</a> açıklandığı gibi, her DSO
62 modülü <code class="program"><a href="./programs/configure.html">configure</a></code> programının
63 <code>--enable-mods-static</code> seçeneği ile devredışı bırakılabilir.</p>
65 <p>Apache httpd 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 httpd modüllerini Apache httpd kaynak
69 ağacından ayrı olarak derlemek için kullanılabilir. Fikir basittir: Apache
70 HTTP Sunucusu 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 <code>make install</code> ile kurulum sırasında
73 Apache httpd C başlık dosyaları da kurulur. Böylece
74 kullanıcı Apache httpd 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 httpd modülünü <code class="program"><a href="./programs/apxs.html">apxs</a></code>
77 programını 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ım Özeti</a></h2>
82 <p>Apache HTTP Sunucusu 2.x’in DSO özelliklerine bir giriş olarak burada
83 kısaca bir bilgi vermekle yetinilecektir:</p>
86 <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
87 <em>özgün</em> Apache htpd modülünü <code>mod_filanca.so</code> isminde
88 bir DSO modülü olarak derlemek ve kurmak için şöyle yapılır:</p>
90 <div class="example"><p><code>
91 $ ./configure --prefix=/kurulum/yeri --enable-filanca<br />
96 <li><p>Apache HTTP Sunucusunu tüm modüller etkin ve paylaşımlı nesneler
97 yüklü olarak derleyebilir. Daha sonra <code>httpd.conf</code> içindeki
98 <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergelerinden
99 istemediklerinizi açıklama satırları haline getirerek bunları iptal
102 <div class="example"><p><code>
103 $ ./configure --enable-mods-shared=all<br />
108 <li><p>Kaynak dosyası <code>mod_filanca.c</code> dosyasında dağıtılan bir
109 <em>üçüncü parti</em> Apache httpd modülü <code>mod_filanca.so</code>
110 isminde bir DSO modülü olarak Apache httpd kaynak ağacının dışında
111 <code class="program"><a href="./programs/apxs.html">apxs</a></code> kullanarak derlemek ve kurmak için şöyle
114 <div class="example"><p><code>
115 $ cd /bir/kurulum/yeri<br />
116 $ apxs -c mod_filanca.c<br />
117 $ apxs -aci filanca mod_filanca.la
122 <p>Tüm durumlarda derlenen paylaşımlı modülü Apache httpd’nin etkin
123 kılabilmesi için <code>httpd.conf</code> dosyasında o modül için bir
124 <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergesi
127 <p>Ayrıntılı bilgi için <a href="programs/apxs.html">apxs belgelerine</a>
129 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
130 <div class="section">
131 <h2><a name="background" id="background">Artalan Bilgisi</a></h2>
133 <p>Günümüzün Unix türevlerinde var olan bir mekanizma sayesinde
134 çalıştırılabilir bir programın adres uzayına çalışma anında yüklenmek
135 veya ilintilenmek üzere <em>Devingen Paylaşımlı Nesneler</em> (DSO -
136 Dynamic Shared Object) adı verilen, özel bir biçem kullanarak kodlanmış
137 program parçaları oluşturulabilir.</p>
139 <p>Bu yükleme normalde iki yolla yapılabilir: Ya çalıştırılabilir
140 programın başlatılması sırasında yüklenen <code>ld.so</code> adlı bir
141 sistem programınının devingen olarak yüklenmesi ile ya da
142 çalıştırılabilir programın içinden Unix yükleyicisine programsal sistem
143 arayüzü sağlayan <code>dlopen()/dlsym()</code> sistem çağrılarının elle
144 yapılması suretiyle.</p>
146 <p>İlk yöntemde kullanılan DSO’lara genelde <em>paylaşımlı
147 kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir ve
148 bunların dosyaları <code>libfilanca.so</code> veya
149 <code>libfilanca.so.1.2</code> biçiminde isimlendirilir. Belli bir
150 sistem dizininde (normalde <code>/usr/lib</code>) bulunurlar ve derleme
151 sırasında ilintileyici komutuna <code>-lfilanca</code> şeklinde
152 belirtilerek çalıştırılabilir programla ilintilenirler. Doğrudan
153 çalıştırılabilir koda eklenen bu kodlar Unix yükleyicisinin programın
154 başlatılması sırasında kütüphaneyi <code>/usr/lib</code> altında
155 <code>libfilanca.so</code> adıyla bulabilmesini sağlar. Kütüphanelerin
156 aranacağı yerler ya <code>-R</code> gibi bir ilintileyici seçeneği ile
157 koda eklenir ya da arama yolları <code>LD_LIBRARY_PATH</code> ortam
158 değişkeni aracılığıyla yapılandırılır. Böylece çalıştırılabilir
159 programda henüz çözümlenmemiş simgeler DSO içinde bulunarak
162 <p>Çalıştırılabilir program içindeki simgelere normalde DSO içinden
163 atıfta bulunulmaz (genel kod kütüphanesinin başka programlarca da
164 kullanılması nedeniyle). Bu bakımdan DSO tarafında böyle bir çözümleme
165 yapılmaz. Çalıştırılabilir program da DSO’daki simgeleri kendisi
166 çözümlemeye uğraşmaz, bu işlemlerden tamamen Unix yükleyicisi
167 (<code>ld.so</code>) sorumludur. (Aslında, <code>ld.so</code>’yu
168 çağıracak kod, her çalıştırılabilir programın içine ilintilenmiş
169 (durağan değil) başlatma kodunun bir parçasıdır.) Programlar tarafından
170 ortaklaşa kullanılan kütüphanelerin devingen olarak yüklenmesinin sebebi
171 basittir: Kütüphane kodu <code>libc.so</code> gibi bir sistem
172 kütüphanesine bir kere kaydedilip disk alanından yer kazanılmış
175 <p>İkinci yöntemde kullanılan DSO’lara yine <em>paylaşımlı
176 kütüphaneler</em> veya <em>DSO kütüphaneleri</em> adı verilir fakat
177 bunların dosyaları geçerli kabule göre <code>filanca.so</code> gibi
178 isimlendirilse de genelde keyfi olarak seçilen bir dosya uzantısı
179 kullanılarak isimlendirilirler. Bu dosyalar genellikle programa özel bir
180 dizinde dururlar ve bu dosyaları kullanacak olan çalıştırılabilir
181 programla aralarında özdevimli olarak bağ kurulmamıştır. Bunun yerine,
182 çalıştırılabilir program DSO’yu çalışma anında <code>dlopen()</code>
183 sayesinde kendi adres uzayına ekler. Çalıştırılabilir program için
184 DSO’daki simgeler bu sırada çözümlenmez. Özdevimli olarak devreye
185 giren Unix yükleyicisi, (varsa) artakalan simgeleri, çalıştırılabilir
186 ihraç edilen simge kümelerini (ve özellikle her yerde hazır ve nazır
187 <code>libc.so</code> içindeki tüm simgeleri) kullanarak çözümler. Bu
188 yolla DSO, çalıştırılabilir programın simge kümesi bilgilerini sanki
189 kendisine baştan durağan olarak ilintilenmiş gibi ulaşabilir.</p>
191 <p>Son olarak, DSO’nun programlama arayüzünün getirilerinden yararlanmak
192 amacıyla çalıştırılabilir program, daha sonra dağıtım tabloları vb.
193 yerlerde kullanmak üzere <code>dlsym()</code> üzerinden DSO’daki belli
194 simgeleri çözümlemek zorundadır. Başka bir deyişle: Çalıştırılabilir
195 program ihtiyaç duyduğu her simgeyi kullanmak için kendisi çözümleme
196 yapmak zorundadır. Böyle bir mekanizmanın getirisi, programın isteğe
197 bağlı parçalarının gerekli olana kadar yüklenmemesidir (böylece daha az
198 bellek alanı kullanılır). Gerektiği zaman programın işlevselliğini
199 arttırmak amacıyla bu parçalar devingen olarak programa
202 <p>DSO mekanizmasının bu basit gibi görünen işleyişinde zorluk içeren bir
203 adım şudur (başkaları da olabilir): Bir programın işlevselliğini
204 genişletmek için DSO kullanılırken (ikinci yöntem) çalıştırılabilir
205 programdan DSO için simgelerin çözümlenmesi. Zorluğun sebebi,
206 "tersine çözümleme" yapılmasıdır; çalıştırılabilir programın simge
207 kümesindeki DSO simgeleri kütüphane tasarımına aykırı bir şekilde
208 çözümlenir ve bu uygulama tüm platformlarda hazır olarak
209 desteklenmediği gibi standartlaşmış da değildir. Geçer uygulamada
210 çalıştırılabilir programın evrensel simgeleri çoğunlukla yeniden dışa
211 verilmez ve bu bakımdan bir DSO içinde kullanılmaları uygun değildir.
212 Esas sorun, çalıştırılabilir bir programın işlevselliğini çalışma
213 anında genişletmek için DSO kullanımı sırasında ilintileyicinin tüm
214 evrensel simgeleri dışa vermesini zorlamanın bir yolunu bulmaktır.</p>
216 <p>Paylaşımlı kütüphane yaklaşımı bu bakımdan türünün tek örneğidir,
217 çünkü DSO mekanizması özellikle bunun için tasarlanmıştır, dolayısıyla
218 işletim sisteminin sağladığı hemen hemen tüm kütüphaneler için
220 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
221 <div class="section">
222 <h2><a name="advantages" id="advantages">Getiriler ve Götürüler</a></h2>
224 <p>Yukarıda bahsedilen DSO’ya dayalı özelliklerin getirileri
228 <li>Sunucu paketi çalışma anında daha esnektir çünkü, sunucuyu
229 oluşturan parçalar derleme sırasında <code class="program"><a href="./programs/configure.html">configure</a></code>
230 seçenekleriyle birleştirilmek yerine <code>httpd.conf</code> içinde
231 <code class="directive"><a href="./mod/mod_so.html#loadmodule">LoadModule</a></code> yönergeleri
232 sayesinde çalışma anında birleştirilebilmektedir. Bu yolla, örneğin
233 tek bir Apache kurulumuyla birbirinden farklı yapılandırmalara sahip
234 çok sayıda sunucu çalıştırmak mümkündür. (standart veya SSL sürümü;
235 basitleştirilmiş veya devingen sürümü [mod_perl, PHP3], vs.)</li>
237 <li>Sunucu paketi kurulumdan sonra bile üçüncü parti modüllerle kolayca
238 genişletilebilir. Bu özellikle, bir Apache temel paketinin yanında
239 PHP, mod_perl, mod_security gibi ek paketler oluşturan paket
240 dağıtıcılarına büyük yarar sağlar.</li>
242 <li>Yeni Apache httpd modülleri için daha kolay prototip
243 geliştirilebilir: Modül kaynak kodunu DSO/<code class="program"><a href="./programs/apxs.html">apxs</a></code> çifti
244 sayesinde Apache httpd kaynak ağacının dışında derleyip modülün yeni
245 bir sürümünü bir <code>apxs -i</code> komutunun ardından
246 <code>apachectl restart</code> yaparak çalışan bir Apache HTTP
247 Sunucusunda denemek daha kolay hale getirilmiştir.</li>
250 <p>DSO kullanımının götürüleri ise şunlardır:</p>
253 <li>İlk yüklemede %20 yavaşlama: Unix yükleyicisi simgeleri çözümlemek
254 zorunda olduğundan sunucu ilk başlatılırken yaklaşık %20 daha yavaş
255 faaliyete geçer.</li>
257 <li>Çalışma sırasında % 5 yavaşlama: Konumdan bağımsız kodun (PIC -
258 Position Independent Code) göreli adresleme için karmaşık oyunlara
259 girmesi ve bunun mutlak adresleme kadar hızlı olmaması nedeniyle
260 sunucu bazı platformlarda çalışma anında yaklaşık %5 daha yavaş
263 <li>DSO'nun tüm modüller için uygun olmaması: DSO modülleri bazı
264 platformlarda diğer DSO temelli kütüphanelerle ilintilenemediğinden
265 (<code>ld -lfilanca</code>) DSO mekanizmasını tüm modül türleri için
266 kullanamazsınız (örneğin a.out temelli platformlar bu işlevselliği
267 ELF temelli platformlar kadar iyi sağlamaz). Başka bir deyişle, DSO
268 dosyaları olarak derlenmiş modüllerin kullanabileceği simgeler ya
269 Apache httpd temel kodunda vardır ya Apache httpd temel kodunun
270 kullandığı C kütüphanesinde (<code>libc</code>) ve diğer durağan ve
271 devingen kütüphanelerde vardır ya da konumdan bağımsız kodu içeren
272 durağan kütüphane arşivlerinde (<code>libfilanca.a</code>)
273 vardır. Diğer modülleri kullanmak için tek şansınız ya Apache httpd
274 çekirdeğinin modüle bir atıf içermesini sağlamak ya da modül kodunu
275 <code>dlopen()</code> vasıtasıyla yüklemektir.</li>
279 <div class="bottomlang">
280 <p><span>Mevcut Diller: </span><a href="./en/dso.html" hreflang="en" rel="alternate" title="English"> en </a> |
281 <a href="./fr/dso.html" hreflang="fr" rel="alternate" title="Français"> fr </a> |
282 <a href="./ja/dso.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> |
283 <a href="./ko/dso.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
284 <a href="./tr/dso.html" title="Türkçe"> tr </a></p>
285 </div><div id="footer">
286 <p class="apache">Copyright 2011 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>
287 <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>