版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、 APACHE及DSO模塊工作原理詳解 Apache bbb Server(簡(jiǎn)稱Apache)是Apache軟件基金會(huì)的一個(gè)開放源碼的網(wǎng)頁(yè)服務(wù)器,可以在大多數(shù)計(jì)算機(jī)操作系統(tǒng)中運(yùn)行,由于其多平臺(tái)和安全性被廣泛使用,是最流行的Web服務(wù)器端軟件之一。它快速、可靠并且可通過(guò)簡(jiǎn)單的API擴(kuò)展,將Perl/Python等解釋器編譯到服務(wù)器中。專職優(yōu)化、域名注冊(cè)、網(wǎng)站空間、虛擬主機(jī)、服務(wù)器托管、vps主機(jī)、服務(wù)器租用的中國(guó)信息港在這里為你做詳細(xì)介紹!本文闡述如何使用DSO模塊及其工作原理。工作原理DSO是Dynamic Shared Objects(動(dòng)態(tài)共享目標(biāo))的縮寫,它是現(xiàn)代Un
2、ix派生出來(lái)的操作系統(tǒng)都存在著的一種動(dòng)態(tài)連接機(jī)制。它提供了一種在運(yùn)行時(shí)將特殊格式的代碼,在程序 運(yùn)行需要時(shí),將需要的部分從外存調(diào)入內(nèi)存執(zhí)行的方法。Apache在1.3以后的版本后開始支持它。因?yàn)锳pache早就使用一個(gè)模塊概念來(lái)擴(kuò)展它的功能 并且在內(nèi)部使用一個(gè)基于調(diào)度的列表來(lái)鏈接擴(kuò)展模塊到Apache核心模塊.所以,Apache早就注定要使用DSO來(lái)在運(yùn)行時(shí)加載它的模塊。讓我們先來(lái)看一下Apache本身的程序結(jié)構(gòu):這是一個(gè)很復(fù)雜的四層結(jié)構(gòu)-每一層構(gòu)建在下一層之上。第四層是用Apache模塊開發(fā)的第三方庫(kù)-比如open ssl一般來(lái)說(shuō)在Apache的官方發(fā)行版中這層是空的,但是在實(shí)際的Apach
3、e結(jié)構(gòu)中這些庫(kù)構(gòu)成的層結(jié)構(gòu)肯定是存在的。第三層是一些可選的附加功能模塊-如mod_ssl,mod_perl。這一層的每個(gè)模塊通常實(shí)現(xiàn)的是Apache的一個(gè)獨(dú)立的分離的功能而事實(shí)上這些模塊沒(méi)有一個(gè)是必須的,運(yùn)行一個(gè)最小的Apache不需要任何一個(gè)此層的模塊。第二層是Apache的基本功能庫(kù)-這也是Apache的核心本質(zhì)層-這層包括Apache內(nèi)核,bbb_core(Apache的核心模 塊),它們實(shí)現(xiàn)了基本bbb功能(比如資源處理(通過(guò)文件描述符和內(nèi)存段等等),保持預(yù)生成(pre-forked)子進(jìn)程模型,監(jiān)聽(tīng)已配置的虛擬服務(wù) 器的TCP/IP套接字,傳輸bbb請(qǐng)求流到處理進(jìn)程,處理bbb協(xié)議狀
4、態(tài),讀寫緩沖,此外還有附加的許多功能比如URL和MIME頭的解析及DSO 的裝載等),也提供了Apache的應(yīng)用程序接口(API)(其實(shí)Apache的真正功能還是包含在內(nèi)部模塊中的,為了允許這些模塊完全控制Apache 進(jìn)程,內(nèi)核必須提供API接口),這層也包括了一般性的可用代碼庫(kù)(libap)和實(shí)現(xiàn)正則表達(dá)式匹配的庫(kù)(libregex)還有就是一個(gè)小的操作系統(tǒng) 的抽象庫(kù)(libos)。最低層是與OS相關(guān)的平臺(tái)性應(yīng)用函數(shù),這些OS可以是不同現(xiàn)代UNIX的變種,win32,os/2,MacOS甚至只要是一個(gè)POSIX子系統(tǒng)。圖1 apache模塊功能分層在這個(gè)復(fù)雜的程序結(jié)構(gòu)中有趣的部分是-事實(shí)上
5、第三層和第四層與第二層之間是松散的連接,而另一方面第三層的模塊間是互相依賴的-因這種結(jié) 構(gòu)造成的顯著影響就是第三層和第四層的代碼不能靜態(tài)地連接到最低層平臺(tái)級(jí)的代碼上。因此DSO模式就成了解決它的一種手段。結(jié)合DSO功能,這個(gè)結(jié)構(gòu)就變 得很靈活了,可以讓Apache內(nèi)核(從技術(shù)上說(shuō)應(yīng)該是mod_so模塊而不是內(nèi)核)在啟動(dòng)時(shí)(而不是安裝時(shí))裝載必要的部分以實(shí)現(xiàn)第三層和第四層的功 能?,F(xiàn)代類Unix的系統(tǒng)都有一種叫動(dòng)態(tài)共享對(duì)象(DSO)的動(dòng)態(tài)連接/加載的巧妙的機(jī)制,從而可以在運(yùn)行時(shí)刻,將編譯成特殊格式的代碼加載到一個(gè)可執(zhí)行程序的位置空間。加載的方法通常有兩種:其一是,在可執(zhí)行文件啟動(dòng)時(shí)由系統(tǒng)程序ld
6、.so自動(dòng)加載;其二是,在執(zhí)行程序中手工地通過(guò)Unix加載器的系統(tǒng)接口執(zhí)行系統(tǒng)調(diào)用dlopen()/dlsym()以實(shí)現(xiàn)加載。按第一種方法,DSO通常被稱為共享庫(kù)(shared libraries)或者DSO庫(kù)(DSO libraries),使用libfoo.so或者libfoo.so.1.2的文件名,被存儲(chǔ)在系統(tǒng)目錄中(通常是/usr/lib),并在編譯安裝 時(shí),使用連接器參數(shù)-lfoo建立了指向可執(zhí)行程序的連接。通過(guò)設(shè)置連接器參數(shù)-R或者環(huán)境變量LD_LIBRARY_PATH,庫(kù)中硬編碼了可執(zhí)行文件 的路徑,使Unix加載器能夠定位到位于/usr/lib的libfoo.so,以解析可執(zhí)行文
7、件中尚未解析的位于DSO的符號(hào)。通常,DSO不會(huì)引用可執(zhí)行文件中的符號(hào)(因?yàn)樗峭ㄓ么a的可重用庫(kù)),也不會(huì)有后繼的解析動(dòng)作??蓤?zhí)行文件無(wú)須自己作任何動(dòng)作以使用DSO 中的符號(hào),而完全由Unix加載器代辦(事實(shí)上,調(diào)用ld.so的代碼是被連入每個(gè)可執(zhí)行文件的非靜態(tài)運(yùn)行時(shí)刻啟動(dòng)代碼的一部分)。動(dòng)態(tài)加載公共庫(kù)代碼的 優(yōu)點(diǎn)是明顯的:只需要在系統(tǒng)庫(kù)libc.so中存儲(chǔ)一個(gè)庫(kù)代碼,從而為每個(gè)程序節(jié)省了磁盤存儲(chǔ)空間。按第二種方法,DSO通常被稱為共享對(duì)象(shared objects)或者DSO文件(DSO files),可以使用任何文件名(但是規(guī)范的名稱是foo.so),被存儲(chǔ)在程序特定的目錄中,也不會(huì)
8、自動(dòng)建立指向其所用的可執(zhí)行文件的連接,而由可執(zhí) 行文件在運(yùn)行時(shí)自己調(diào)用dlopen()來(lái)加載DSO到其位置空間,同時(shí)也不會(huì)進(jìn)行為可執(zhí)行文件解析DSO中符號(hào)的操作。Unix加載器會(huì)根據(jù)可執(zhí)行程序 的輸出符號(hào)表和已經(jīng)加載的DSO庫(kù)自動(dòng)解析DSO中尚未解析的符號(hào)(尤其是無(wú)所不在的libc.so中的符號(hào)),如此DSO就獲得了可執(zhí)行程序的符號(hào)信 息,就好象是被靜態(tài)連接的。最后,為了利用DSO API的優(yōu)點(diǎn),執(zhí)行程序必須用dlsym()解析DSO中的符號(hào),以備稍后在諸如指派表等中使用。也就是說(shuō),執(zhí)行程序必須自己解析其所需的符號(hào)。這種機(jī)制 的優(yōu)點(diǎn)是允許不加載可選的程序部件,直到程序需要的時(shí)候才被動(dòng)態(tài)地加載(
9、也就不需要內(nèi)存開銷),以擴(kuò)展程序的功能。雖然這種DSO機(jī)制看似很直接,但至少有一個(gè)難點(diǎn),就是在用DSO擴(kuò)展程序功能(即第二種方法)時(shí)為DSO對(duì)可執(zhí)行程序中符號(hào)的解析,這是因 為,“反向解析”可執(zhí)行程序中的DSO符號(hào)在所有標(biāo)準(zhǔn)平臺(tái)上與庫(kù)的設(shè)計(jì)都是矛盾的(庫(kù)不會(huì)知道什么程序會(huì)使用它)。實(shí)際應(yīng)用中,可執(zhí)行文件中的全局符號(hào)通 常不是重輸出的,因此不能為DSO所用。所以在運(yùn)行時(shí)刻用DSO來(lái)擴(kuò)展程序功能,就必須找到強(qiáng)制連接器輸出所有全局符號(hào)的方法。共享庫(kù)是一種典型的解決方法,因?yàn)樗螪SO機(jī)制,而且為操作系統(tǒng)所提供的幾乎所有類型的庫(kù)所使用。另一方面,使用共享對(duì)象并不是許多程序?yàn)閿U(kuò)展其功能所采用的方法。截
10、止到1998年,只有少數(shù)軟件包使用DSO機(jī)制在運(yùn)行時(shí)刻實(shí)際地?cái)U(kuò)展其功能,諸如Perl 5(通過(guò)其XS機(jī)制和DynaLoader模塊), Netscape Server等。從1.3版本開始,Apache也加入此列,因?yàn)锳pache已經(jīng)用了基于指派表(dispatch-list-based)的方法來(lái)連 接外部模塊到Apache的核心。所以,Apache也就當(dāng)然地在運(yùn)行時(shí)刻用DSO來(lái)加載其模塊。優(yōu)點(diǎn)和缺點(diǎn)上述基于DSO的功能有如下優(yōu)點(diǎn):由于服務(wù)器包的裝配工作可以在運(yùn)行時(shí)刻使用bbbd.conf的配置命令LoadModule來(lái)進(jìn)行,而不是在編譯中使用configure 來(lái)進(jìn)行,因此顯得更靈活。比如:只
11、需要安裝一個(gè)Apache,就可以運(yùn)行多個(gè)不同的服務(wù)器實(shí)例(如標(biāo)準(zhǔn)&SSL版本,濃縮的&功能加強(qiáng)版 本mod_perl, PHP3,等等)。服務(wù)器包可以在安裝后使用第三方模塊被輕易地?cái)U(kuò)展。這至少對(duì)廠商發(fā)行包的維護(hù)者有巨大的好處,他可以建立一個(gè)Apache核心包,而為諸如PHP3, mod_perl, mod_fastcgi等擴(kuò)展另建附加的包。更簡(jiǎn)單的Apache模塊原型。使用DSO配合apxs,可以脫離Apache源代碼樹,僅需要一個(gè)apxs -i和一個(gè)apachectl restart命令,把開發(fā)的模塊新版本納入運(yùn)行中的Apache服務(wù)器。DSO有如下缺點(diǎn):由于并不是所有的操作
12、系統(tǒng)都支持動(dòng)態(tài)加載代碼到一個(gè)程序的位置空間,因此DSO機(jī)制并不能用于所有的平臺(tái)。由于Unix加載器有必須進(jìn)行的符號(hào)解析的開銷,服務(wù)器的啟動(dòng)會(huì)慢20%左右。在某些平臺(tái)上,獨(dú)立位置代碼(positon independent codePIC)有時(shí)需要復(fù)雜的匯編語(yǔ)言技巧來(lái)實(shí)現(xiàn)相對(duì)尋址,而絕對(duì)尋址則不需要,因此服務(wù)器在運(yùn)行時(shí)會(huì)慢5%左右。由于DSO模塊不能在所有平臺(tái)上為其他基于DSO的庫(kù)所連接(ld -lfoo),比如,基于a.out的平臺(tái)通常不提供此功能,而基于ELF的平臺(tái)則提供,因此DSO機(jī)制并不能被用于所有類型的模塊?;蛘呖梢赃@樣說(shuō),編 譯為DSO文件的模塊只能使用由Apache核心、C庫(kù)(li
13、bc)和Apache核心所用的所有其他動(dòng)態(tài)或靜態(tài)的庫(kù)、含有獨(dú)立位置代碼的靜態(tài)庫(kù) (libfoo.a)所提供的符號(hào)。而要使用其他代碼,就只能確保Apache核心本身包含對(duì)此代碼的引用,或者自己用dlopen()來(lái)加載此代碼。模塊實(shí)現(xiàn)相關(guān)模塊 相關(guān)指令mod_so <IfModule>LoadModuleApache對(duì)獨(dú)立模塊的DSO支持是建立在被靜態(tài)編譯進(jìn)Apache核心的mod_so模塊基礎(chǔ)上的,這是core以外唯一不能作為DSO存 在的模塊,而其他所有已發(fā)布的Apache模塊,都可以通過(guò)安裝文檔中闡述的配置選項(xiàng)-enable-module=shared,被獨(dú)立地編譯成 DSO并使
14、之生效。一個(gè)被編譯為mod_foo.so的DSO模塊,可以在bbbd.conf中使用mod_so的LoadModule指令,在服務(wù)器 啟動(dòng)或重新啟動(dòng)時(shí)被加載。用命令行參數(shù)-l可以查看已經(jīng)編譯到服務(wù)器中的模塊。新提供的支持程序apxs(APache eXtenSion)可以在Apache源代碼樹以外編譯基于DSO的模塊,從而簡(jiǎn)化Apache DSO模塊的建立過(guò)程。其原理很簡(jiǎn)單:安裝Apache時(shí),配置命令make install會(huì)安裝Apache C頭文件,并把依賴于平臺(tái)的編譯器和連接器參數(shù)傳給apxs程序,使用戶可以脫離Apache的發(fā)布源代碼樹編譯其模塊源代碼,而不改變支持DSO的編譯 器和
15、連接器的參數(shù)。用法概要Apache 2.0的DSO功能簡(jiǎn)要說(shuō)明:編譯并安裝已發(fā)布的Apache模塊,比如編譯mod_foo.c為mod_foo.so的DSO模塊:$ ./configure -prefix=/path/to/install -enable-foo=shared$ make install編譯并安裝第三方Apache模塊, 比如編譯mod_foo.c為mod_foo.so的DSO模塊:$ ./configure -add-module=module_type:/path/to/3rdparty/mod_foo.c -enable-foo=shared$ make install配置Apache以便共享后續(xù)安裝的模塊:$ ./configure -enable-so$ make install用apxs在Apache源代碼樹以外編譯并安裝第三方Apac
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 錳礦影響下小江河的重金屬污染以及水生植物的響應(yīng)
- 剪切波彈性成像及超聲造影在直腸癌新輔助治療療效評(píng)估的應(yīng)用價(jià)值研究
- 基于組學(xué)數(shù)據(jù)的食管鱗癌早期診斷與治療策略的研究
- 漢代家庭書寫研究
- 2025年度藝術(shù)工作室營(yíng)業(yè)場(chǎng)所租賃合同
- 二零二五年度股份占比協(xié)議書:家族企業(yè)股權(quán)繼承與調(diào)整協(xié)議范本
- 二零二五年度股權(quán)激勵(lì)計(jì)劃股份解除合同
- 2025年度航空航天研發(fā)三方合作版合同
- 二零二五年度無(wú)子女無(wú)共同財(cái)產(chǎn)離婚財(cái)產(chǎn)分割實(shí)施協(xié)議
- 2025年度版干股虛擬股分紅收益結(jié)算及支付協(xié)議模板
- 2024版塑料購(gòu)銷合同范本買賣
- JJF 2184-2025電子計(jì)價(jià)秤型式評(píng)價(jià)大綱(試行)
- GB/T 44890-2024行政許可工作規(guī)范
- 2024年安徽省中考數(shù)學(xué)試卷含答案
- 2025屆山東省德州市物理高三第一學(xué)期期末調(diào)研模擬試題含解析
- 2024年滬教版一年級(jí)上學(xué)期語(yǔ)文期末復(fù)習(xí)習(xí)題
- 兩人退股協(xié)議書范文合伙人簽字
- 2024版【人教精通版】小學(xué)英語(yǔ)六年級(jí)下冊(cè)全冊(cè)教案
- 汽車噴漆勞務(wù)外包合同范本
- 2024年重慶南開(融僑)中學(xué)中考三模英語(yǔ)試題含答案
- 2023年最新的校長(zhǎng)給教師春節(jié)祝福語(yǔ)
評(píng)論
0/150
提交評(píng)論