摘要:Wine虛擬操作系統(tǒng)為Windows應(yīng)用程序在Linux上運(yùn)行提供了一個(gè)很好的虛擬環(huán)境。ElAura是類(lèi)似于Wine的虛擬操作系統(tǒng),它是Elastos操作系統(tǒng)在Linux上的虛擬環(huán)境。文章在分析Wine系統(tǒng)的基礎(chǔ)了,針對(duì)Elastos操作系統(tǒng)的特點(diǎn),設(shè)計(jì)并實(shí)現(xiàn)了基于共享內(nèi)存和動(dòng)態(tài)模塊加載方式結(jié)合的內(nèi)核對(duì)象服務(wù)系統(tǒng)。實(shí)驗(yàn)結(jié)果表明該文提出的內(nèi)核對(duì)象服務(wù)系統(tǒng)對(duì)應(yīng)用程序的響應(yīng)時(shí)間明顯少于Wine Server的響應(yīng)時(shí)間。
關(guān)鍵詞:ElAura;Linux;Elastos;內(nèi)核對(duì)象服務(wù)
中圖分類(lèi)號(hào):TP316 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)29-0429-02
The Study of the ElAura Kernel Object Service System
ZHANG Qi, CAO Tian-jie, CHEN Dai
(Department of Computer Science and Technology,China University of Mining Technology,Xuzhou 221008,China)
Abstract: Wine is a virtual operation system of Windows on Linux.ElAura is also a virtual operation system of Elastos on Linux that similar to Wine. In this paper, a sharememory and dinamic module mechanism of ElAura Server is proposed. A test result shows ElAura Server has a better performance than Wine Server, and proves the mechanism is an efficient approach for embeded system.
Key words: ElAura; Linux; Elastos; kernel object service
1 引言
虛擬操作系統(tǒng)是虛擬機(jī)技術(shù)中的一種,它不是硬件上的虛擬而是操作系統(tǒng)級(jí)別的虛擬,它在新的操作系統(tǒng)中虛擬出原來(lái)操作系統(tǒng)的運(yùn)行環(huán)境,使得編譯出的應(yīng)用程序在不用修改代碼的情況下,在新的操作系統(tǒng)上運(yùn)行,Wine是這種虛擬技術(shù)的代表。Wine在Windows和Linux之間起到軟件兼容層的作用,它是基于對(duì)Windows API的仿真。Wine作為一種虛擬技術(shù)為用戶(hù)提供了一種更為方便的方法,并且它在系統(tǒng)資源利用和運(yùn)行效率上都是一種更好的選擇。但是由于目前WINE自身所具有的許多局限性因素,如運(yùn)行效率、系統(tǒng)響應(yīng)時(shí)間等問(wèn)題,限制了它的應(yīng)用,如何保證Wine擁有更高的運(yùn)行效率和更好的響應(yīng)時(shí)間是當(dāng)前該領(lǐng)域研究的熱點(diǎn)問(wèn)題。
和欣操作系統(tǒng)(Elastos)是采用面向構(gòu)件技術(shù)、具有靈活內(nèi)核結(jié)構(gòu)的網(wǎng)絡(luò)操作系統(tǒng),它在操作系統(tǒng)層提供了對(duì)構(gòu)件運(yùn)行環(huán)境的支持[1]。它利用CAR(Component Assembly Runtime)構(gòu)件技術(shù)解決了長(zhǎng)期困擾系統(tǒng)結(jié)構(gòu)設(shè)計(jì)者的大內(nèi)核和微內(nèi)核在性能、效率與穩(wěn)定性、安全性之間不能兩全其美的矛盾[4]。為了使和欣操作系統(tǒng)有更好的應(yīng)用發(fā)展,必須要在其他操作系統(tǒng)上運(yùn)行它的應(yīng)用程序,實(shí)現(xiàn)和欣操作系統(tǒng)的虛擬環(huán)境。ElAura是在Linux上實(shí)現(xiàn)的Elastos虛擬操作系統(tǒng),它讓Elastos應(yīng)用程序無(wú)需重新編譯就可以跨平臺(tái)運(yùn)行在Linux操作系統(tǒng)上。本文在分析Wine技術(shù)的基礎(chǔ)上針對(duì)Wine虛擬操作系統(tǒng)的缺點(diǎn),根據(jù)Elastos操作系統(tǒng)的特點(diǎn)對(duì)Wine中的服務(wù)進(jìn)程模型進(jìn)行重新構(gòu)架,設(shè)計(jì)了一種更加高效的內(nèi)核對(duì)象服務(wù)系統(tǒng),很好的滿足了系統(tǒng)的需求。
2內(nèi)核對(duì)象服務(wù)系統(tǒng)結(jié)構(gòu)
2.1 Wine系統(tǒng)結(jié)構(gòu)
Wine 的系統(tǒng)結(jié)構(gòu)類(lèi)似于Windows NT ,Windows NT API函數(shù)調(diào)用主要分為 USER/GDI調(diào)用和KERNEL調(diào)用。它們分別位于WindowsNT的USER32.DLL/GDI32.DLL和KERNEL32.DLL中,這三個(gè)DLL是其它所有DLL的基礎(chǔ)。Wine為了運(yùn)行Windows應(yīng)用程序,必須模擬出Windows API,這些API函數(shù)在Windows上是以DLL格式存在的,而在Wine上是以和DLL對(duì)應(yīng)的Linux共享庫(kù)格式存在的,即把Windows下的DLL格式映射為L(zhǎng)inux下的ELF格式的共享鏈接文件。Wine中還實(shí)現(xiàn)了另一個(gè)核心-NTDLL,許多 KERNEL32等的特性都是通過(guò) NTDLL 來(lái)實(shí)現(xiàn)的。
圖1顯示了Wine虛擬操作系統(tǒng)的構(gòu)架。為了禰補(bǔ)Windows和Linux操作系統(tǒng)內(nèi)核之間的差異,Wine必須提供三個(gè)部分的功能:(1) 把Windows的PE格式的應(yīng)用程序加載進(jìn)Linux運(yùn)行空間環(huán)境,并提供各種函數(shù)的鏈接。(2) 在Linux上實(shí)現(xiàn)Windows的動(dòng)態(tài)鏈接庫(kù)(USER32.DLL/GDI32.DLL等),向Windows應(yīng)用程序Windows API調(diào)用。(3)對(duì)兩個(gè)操作系統(tǒng)內(nèi)核差異進(jìn)行補(bǔ)充的機(jī)制,它在Linux上提供了對(duì)Windows進(jìn)程、線程的調(diào)度管理。
服務(wù)進(jìn)程Wine server的存在就是為了補(bǔ)充兩個(gè)操作系統(tǒng)的內(nèi)核差異,它在Linux上提供了對(duì)Windows進(jìn)程、線程的調(diào)度管理以及進(jìn)程之間的通信等問(wèn)題。在Wine的實(shí)現(xiàn)中,Wine server是一個(gè)Linux進(jìn)程,它獨(dú)立于具體的Windows應(yīng)用,為了得到它的服務(wù),所有的Windows應(yīng)用在運(yùn)行之前都要建立起與Wine server服務(wù)進(jìn)程的連接,這是通過(guò)socket和pipe實(shí)現(xiàn)的。Wine在啟動(dòng)某個(gè)具體Windows應(yīng)用之前就應(yīng)存在,如果不存在,則作業(yè)裝入程序Loader會(huì)先啟動(dòng)服務(wù)進(jìn)程運(yùn)行,然后Windows應(yīng)用程序再與之建立連接。Wine server服務(wù)進(jìn)程對(duì)于Windows進(jìn)程的管理并不與Linux內(nèi)核所提供的管理沖突,而是對(duì)Linux內(nèi)核的補(bǔ)充。因?yàn)長(zhǎng)inux內(nèi)核所提供的是對(duì)Linux進(jìn)程/線程的管理,而Windows應(yīng)用所期待的是對(duì)于Windows進(jìn)程/線程的管理。Wine server的存在就是要在Linux核外對(duì)Linux和Windows內(nèi)核的差異進(jìn)行補(bǔ)充。所以,服務(wù)進(jìn)程只提供其中有差異的部分。從上面的分析可以知道,由于Wine虛擬操作系統(tǒng)使用了服務(wù)進(jìn)程的方式對(duì)Windows和Linux內(nèi)核之間的差異進(jìn)行補(bǔ)充。運(yùn)行在Wine上的Windows應(yīng)用程序每次進(jìn)行系統(tǒng)調(diào)用時(shí)都要兩次跨進(jìn)程空間,文件間操作要進(jìn)行跨進(jìn)程的Handle復(fù)制,對(duì)于文件的遺傳方式以及對(duì)設(shè)備驅(qū)動(dòng)等實(shí)現(xiàn)方式,這些實(shí)現(xiàn)機(jī)制都導(dǎo)致了Wine系統(tǒng)的效率很慢。
2.2ElAura內(nèi)核對(duì)象服務(wù)系統(tǒng)
2.2.1 Elastos操作系統(tǒng)簡(jiǎn)介
和欣操作系統(tǒng)是面向因特網(wǎng)時(shí)代的構(gòu)件化操作系統(tǒng)。它是一個(gè)基于靈活內(nèi)核的系統(tǒng),在實(shí)現(xiàn)和設(shè)計(jì)過(guò)程中,和欣操作系統(tǒng)采用了CAR面向構(gòu)件的技術(shù)方法。在靈活內(nèi)核模型中,可以使用系統(tǒng)擴(kuò)展軟件對(duì)操作系統(tǒng)功能進(jìn)行動(dòng)態(tài)擴(kuò)充。結(jié)構(gòu)如圖2所示。
和欣操作系統(tǒng)結(jié)構(gòu)主要包括以下幾個(gè)部分:硬件抽象層(對(duì)硬件的結(jié)構(gòu)進(jìn)行屏蔽,為該層之上提供統(tǒng)一的接口);內(nèi)核管理層;任務(wù)/進(jìn)程管理(對(duì)進(jìn)程進(jìn)行,負(fù)責(zé)支持多進(jìn)程,多線程以及進(jìn)程之間的通信);系統(tǒng)服務(wù)層(包括文件系統(tǒng)、設(shè)備驅(qū)動(dòng)、網(wǎng)絡(luò)支持系統(tǒng)和圖形系統(tǒng)等,它們都是以動(dòng)態(tài)鏈接庫(kù)的形式存在)。系統(tǒng)服務(wù)層包括了構(gòu)件支持模塊,它提供了對(duì)CAR構(gòu)件的運(yùn)行支持,實(shí)現(xiàn)了構(gòu)件運(yùn)行環(huán)境[4]。
2.2.2 ElAura內(nèi)核服務(wù)系統(tǒng)
由于Elastos操作系統(tǒng)是基于靈活內(nèi)核構(gòu)架,采用CAR構(gòu)件技術(shù)實(shí)現(xiàn)的操作系統(tǒng),所以在設(shè)計(jì)ElAura虛擬操作系統(tǒng)的時(shí)候可以充分利用這個(gè)特點(diǎn),特別是在設(shè)計(jì)內(nèi)核對(duì)象服務(wù)系統(tǒng)的時(shí)候我們可以對(duì)WINE的設(shè)計(jì)進(jìn)行改進(jìn)。因?yàn)镋lastos系統(tǒng)是面向嵌入式系統(tǒng)的,我們又充分考慮了Elastos應(yīng)用程序在嵌入式Linux上的應(yīng)用。所以在ElAura中的內(nèi)核服務(wù)系統(tǒng)采用了動(dòng)態(tài)模塊加載和內(nèi)核共享內(nèi)存結(jié)合的方式。結(jié)構(gòu)如圖3所示。
如圖3所示,當(dāng)Windows的應(yīng)用程序需要訪問(wèn)文件操作API時(shí),由于文件操作是一種效率很低的操作,我們利用共享內(nèi)存的方式把它放進(jìn)Linux共享內(nèi)存區(qū)域,這樣當(dāng)多個(gè)應(yīng)用程序需要進(jìn)行文件操作時(shí),就不需要跨進(jìn)程,可以直接訪問(wèn)共享內(nèi)存空間的程序和數(shù)據(jù),對(duì)于文件的Handle更不需要跨進(jìn)程的復(fù)制。這種20%的代碼完成了系統(tǒng)調(diào)用方面80%的工作,所以這對(duì)系統(tǒng)的效率特別是在嵌入式這種系統(tǒng)資源匱乏的情況下特別重要。
內(nèi)核對(duì)象服務(wù)系統(tǒng)中的其它內(nèi)核對(duì)象以動(dòng)態(tài)模塊的方式加載進(jìn)內(nèi)核,包括IModule、IKernel、IProcess、IThread、IMutex等等。如圖所示,內(nèi)核對(duì)象服務(wù)系統(tǒng)調(diào)用Linux內(nèi)核函數(shù)實(shí)現(xiàn)了Elastos中的內(nèi)核對(duì)象。使用動(dòng)態(tài)模塊的方式不需要重新編譯Linux內(nèi)核,便于隨時(shí)更新內(nèi)核對(duì)象服務(wù)系統(tǒng)模塊,提高了內(nèi)核對(duì)象服務(wù)系統(tǒng)靈活性和可移植性。
3 ElAura Server性能測(cè)試
本次測(cè)試主要針對(duì)ElAura內(nèi)核對(duì)象服務(wù)系統(tǒng)和Wine Server對(duì)應(yīng)用程序的響應(yīng)時(shí)間進(jìn)行測(cè)試。在測(cè)試前分別在ElAura內(nèi)核對(duì)象服務(wù)系統(tǒng)和Wine Server中各定義了一個(gè)新的文件系統(tǒng)調(diào)用ReadFile(),該系統(tǒng)調(diào)用從一個(gè)文件進(jìn)行讀,然后寫(xiě)到另一個(gè)文件。測(cè)試硬件環(huán)境為:CPU是賽揚(yáng)1.5G、內(nèi)存256M,硬盤(pán)80G。軟件環(huán)境為:操作系統(tǒng)是Red Hat Linux 9.0,內(nèi)核版本是2.4.20,編譯器是GNU-gcc。分別測(cè)試ElAura內(nèi)核對(duì)象服務(wù)系統(tǒng)和Elanix Server對(duì)用戶(hù)程序一百萬(wàn)次、二百萬(wàn)次、三百萬(wàn)次請(qǐng)求響應(yīng)時(shí)間。得到測(cè)試結(jié)果如表1所示。
結(jié)果顯示ElAura內(nèi)核對(duì)象服務(wù)系統(tǒng)的響應(yīng)時(shí)間明顯要小于Wine Server。文件的讀寫(xiě)操作使用內(nèi)存共享的方式,它不需要跨進(jìn)程操作,響應(yīng)用戶(hù)程序并不需要切換進(jìn)程上下文,直接到共享內(nèi)存中取數(shù)據(jù)。而且對(duì)于信號(hào)量、進(jìn)程管理等操作是通過(guò)Linux系統(tǒng)模塊的方式實(shí)現(xiàn)的,它的讀寫(xiě)是在內(nèi)核空間中進(jìn)行的,所以也不需要跨進(jìn)程。這種高效率的響應(yīng)時(shí)間可以滿足嵌入式系統(tǒng)的需求。
4 結(jié)束語(yǔ)
本課題在對(duì)Wine虛擬操作系統(tǒng)結(jié)構(gòu)和性能分析的基礎(chǔ)上,并根據(jù)Elastos操作系統(tǒng)基于靈活內(nèi)核、采用CAR構(gòu)件設(shè)計(jì)的特點(diǎn),在Linux上設(shè)計(jì)了Elastos的內(nèi)核對(duì)象服務(wù)系統(tǒng)。內(nèi)核服務(wù)服務(wù)系統(tǒng)采用了和Wine Server不同的構(gòu)架,它利用了共享內(nèi)存和Linux動(dòng)態(tài)模塊的方式。這兩種方式的實(shí)現(xiàn)使ElAura內(nèi)核對(duì)象服務(wù)系統(tǒng)的響應(yīng)時(shí)間遠(yuǎn)遠(yuǎn)小于Windows Server,很好的滿足了嵌入式系統(tǒng)的需求。
參考文獻(xiàn):
[1] 汪永紅,劉小春,張有為.嵌入式Linux下基于MiniGUI的GIS實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2008(1-2):88-89.
[2] 李輝,陳榕.一種新型的編程模型CAR事件編程模型[J].計(jì)算機(jī)工程與應(yīng)用,2005(10):86-90.
[3] 胡天華.基于“和欣”靈活內(nèi)核的安全構(gòu)件模型[J].計(jì)算機(jī)應(yīng)用,25(9).
[4] 杜永文,何華燦,陳志成.和欣操作系統(tǒng)的靈活內(nèi)核技術(shù)[J].計(jì)算機(jī)工程與應(yīng)用,2004,40(32):106.
[5] Grimm R, Bershad B. Separating access control policy,enforcement and functionality in extensible systems[C].ACMTransactions on Computer Systems,2001:36-70.