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