專利名稱:基于Linux的Windows軟件兼容層體系結(jié)構(gòu)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)軟件技術(shù)領(lǐng)域,它提供一種在Linux操作系統(tǒng)上實(shí)現(xiàn)Microsoft Windows上應(yīng)用程序二進(jìn)制級(jí)兼容的兼容層體系結(jié)構(gòu),可以把已有的Windows應(yīng)用程序移植到Linux上運(yùn)行。
2.技術(shù)背景Microsoft Windows是美國(guó)Microsoft公司開(kāi)發(fā)的電腦操作系統(tǒng),非特殊聲明,以下文中所提及的Windows,都特指Microsoft Windows操作系統(tǒng)。Windows在世界個(gè)人計(jì)算機(jī)操作系統(tǒng)領(lǐng)域占有壟斷地位,絕大多數(shù)的應(yīng)用軟件是針對(duì)Windows操作系統(tǒng)而開(kāi)發(fā)的。
Linux操作系統(tǒng)自1991年發(fā)展以來(lái),以其開(kāi)放源代碼和較強(qiáng)的穩(wěn)定性而日益受到IT行業(yè)的重視,用戶只需很低的費(fèi)用,就可以使用這一性能優(yōu)越的操作系統(tǒng),同時(shí)用戶還可以洞悉系統(tǒng)內(nèi)核而建立更加安全的信息體統(tǒng)。目前Linux操作系統(tǒng)在嵌入式設(shè)計(jì)和服務(wù)器領(lǐng)域發(fā)展很快,在電腦桌面系統(tǒng)也有了長(zhǎng)足的進(jìn)步。但是與Windows操作系統(tǒng)相比,Linux操作系統(tǒng)的市場(chǎng)占有率還不是很高,目前只有少數(shù)應(yīng)用程序移植到Linux操作系統(tǒng)上,不利于Linux操作系統(tǒng)的推廣和打破Windows操作系統(tǒng)的壟斷。
要將已有的Windows應(yīng)用程序移植到Linux上,傳統(tǒng)方法有兩種第一種方法重新修改編譯源代碼,生成基于Linux的可執(zhí)行程序法。由于運(yùn)行在Linux操作系統(tǒng)上的開(kāi)發(fā)調(diào)試工具的功能和數(shù)量都很少,而且與Windows環(huán)境下的開(kāi)發(fā)調(diào)試有很大的不同,加之Linux與Windows體系內(nèi)部運(yùn)行機(jī)理有很大的不同,源代碼的重新修改調(diào)試要耗費(fèi)大量的精力,在Linux平臺(tái)上開(kāi)發(fā)調(diào)試程序要比在Windows操作系統(tǒng)上困難得多,而且需要很專業(yè)的Linux程序員,開(kāi)發(fā)周期較長(zhǎng)、開(kāi)發(fā)成本也很高。另外以這方法移植的應(yīng)用程序與在Windows操作系統(tǒng)運(yùn)行相比,還會(huì)出現(xiàn)功能丟失、用戶使用不習(xí)慣的問(wèn)題,不利于推廣Linux,打破Windows操作系統(tǒng)的市場(chǎng)壟斷。
第二種方法Wine模擬器法。Wine模擬器的實(shí)現(xiàn)方法是直接在Linux平臺(tái)上模擬Windows API的實(shí)現(xiàn),它是基于Linux環(huán)境開(kāi)發(fā)的ELF格式執(zhí)行程序,采用ELF格式的Win32仿真模塊來(lái)模擬Windows執(zhí)行環(huán)境(PE格式),在技術(shù)上面臨較大的困難,直接影響了Windows程序移植后的運(yùn)行速度和穩(wěn)定性。Wine模擬器完全基于ELF格式,使得Wine對(duì)Linux平臺(tái)有巨大的關(guān)聯(lián)性,Wine本身在Linux平臺(tái)上并不能實(shí)現(xiàn)二進(jìn)制兼容。另外由于Wine模擬器是從Linux用戶使用習(xí)慣的角度來(lái)實(shí)現(xiàn)的,通過(guò)Wine模擬器移植的應(yīng)用程序無(wú)法保留Windows用戶所習(xí)慣的圖形界面和操作方式。
3.發(fā)明內(nèi)容為了解決目前將Windows應(yīng)用程序移植到Linux操作系統(tǒng)上運(yùn)行的技術(shù)問(wèn)題,本發(fā)明旨在提出一種能夠在Linux上實(shí)現(xiàn)Windows應(yīng)用程序二進(jìn)制級(jí)兼容,而且主要基于Windows而不是Linux的開(kāi)發(fā)環(huán)境而實(shí)現(xiàn)的兼容層體系結(jié)構(gòu)(以下簡(jiǎn)稱兼容層體系結(jié)構(gòu)),可以使Windows應(yīng)用程序能夠在Linux上正常運(yùn)行。
為了解決以上技術(shù)問(wèn)題,本發(fā)明提供的技術(shù)方案是1.依據(jù)微內(nèi)核思想,在Linux內(nèi)核上面設(shè)計(jì)一個(gè)Windows兼容層,該兼容層模擬運(yùn)行Windows程序所需的環(huán)境,向Windows程序提供其運(yùn)行所需要的數(shù)據(jù)結(jié)構(gòu),系統(tǒng)對(duì)象,過(guò)程和服務(wù)。
2.兼容層主要由PE格式的程序模塊組成,它采用基于Windows平臺(tái)而不是Linux平臺(tái)的開(kāi)發(fā)環(huán)境如VC來(lái)開(kāi)發(fā)實(shí)現(xiàn)。
3.兼容層需要實(shí)現(xiàn)的模塊包括符合Windows標(biāo)準(zhǔn)的Win32仿真動(dòng)態(tài)鏈接庫(kù),比如與USER32.DLL、KERNAL32.DLL、GDI32.DLL、NTDLL.DLL等模塊相對(duì)應(yīng)的一系列仿真動(dòng)態(tài)鏈接庫(kù)。
4.兼容層體系結(jié)構(gòu)中,Linux內(nèi)核運(yùn)行在核心態(tài),Windows應(yīng)用程序和兼容層則以客戶/服務(wù)器(Client/Server)模式運(yùn)行在用戶態(tài),客戶進(jìn)程和服務(wù)進(jìn)程之間通過(guò)消息機(jī)制進(jìn)行通訊。兼容層通過(guò)Linux內(nèi)核提供的進(jìn)程調(diào)度、消息隊(duì)列、圖形窗口、文件管理、虛擬內(nèi)存、設(shè)備驅(qū)動(dòng)等基本服務(wù),實(shí)現(xiàn)Windows平臺(tái)上相應(yīng)的服務(wù)。
使用本發(fā)明專利可以獲得的有益效果是1.采用微內(nèi)核結(jié)構(gòu)使Windows兼容層只需要內(nèi)核提供的一個(gè)很小的功能集合,這樣可以使得它和Linux內(nèi)核都可以獲得較大的獨(dú)立性,便于Windows兼容層和Linux內(nèi)核的功能擴(kuò)充,保證了二者的發(fā)展?jié)摿?,也最大限度的保證了Windows兼容層在Linux平臺(tái)之間的兼容性。
2.采用客戶/服務(wù)器(Client/Server)的實(shí)現(xiàn)模式使兼容層作為一個(gè)運(yùn)行在用戶態(tài)下的應(yīng)用程序來(lái)實(shí)現(xiàn),使程序的開(kāi)發(fā)與調(diào)試變得高效簡(jiǎn)便,同時(shí)也使得兼容層的擴(kuò)展變得更加容易。
3.基于微內(nèi)核結(jié)構(gòu)的Windows兼容層,使兼容層的開(kāi)發(fā)不再局限于Linux特定的開(kāi)發(fā)平臺(tái),可以采用Windows平臺(tái)上的VC等成熟的開(kāi)發(fā)工具來(lái)實(shí)現(xiàn),進(jìn)一步提高了兼容層本身的開(kāi)發(fā)效率,同時(shí)使更多的程序員參與到開(kāi)發(fā)Linux程序上來(lái),有利于解決Linux專業(yè)人才匱乏的問(wèn)題。另外,由于采用PE執(zhí)行文件格式的Win32仿真模塊來(lái)模擬Windows運(yùn)行環(huán)境,可以從根本上保證Windows程序的運(yùn)行速度和用戶界面的無(wú)損移植。
4.兼容層使Windows應(yīng)用程序可以直接運(yùn)行在Linux平臺(tái)上而不需要改動(dòng)任何源代碼,以更低的移植成本和更短的開(kāi)發(fā)周期,獲得與在Windows平臺(tái)上運(yùn)行時(shí)同樣的功效,包括用戶界面,操作習(xí)慣,運(yùn)行速度和穩(wěn)定性等,解決了傳統(tǒng)方法移植成本高、周期長(zhǎng)、產(chǎn)品功能丟失、性能不穩(wěn)定,用戶使用不習(xí)慣等問(wèn)題。原來(lái)運(yùn)行于Windows平臺(tái)上的服務(wù)器也可以改在Linux上運(yùn)行,充分享有Linux服務(wù)器的穩(wěn)定性,安全性和低成本帶來(lái)的好處。
4.
圖1說(shuō)明了本發(fā)明基于微內(nèi)核思想構(gòu)建的兼容層體系結(jié)構(gòu)。
圖2說(shuō)明了本發(fā)明基于微內(nèi)核思想構(gòu)建的兼容層體系結(jié)構(gòu)的實(shí)施方案。
圖3說(shuō)明了本發(fā)明關(guān)于微內(nèi)核思想構(gòu)建的兼容層體系結(jié)構(gòu)的一個(gè)實(shí)施例。
圖4說(shuō)明了本發(fā)明中采用客戶/服務(wù)器(Client/Server)模式模擬Windows環(huán)境的實(shí)現(xiàn)方案。
5.具體實(shí)施方式
圖1說(shuō)明了本發(fā)明基于微內(nèi)核思想構(gòu)建的兼容層體系結(jié)構(gòu)。該圖中描述了一個(gè)包括Linux內(nèi)核、Windows應(yīng)用程序以及使Windows應(yīng)用程序能夠運(yùn)行在Linux上的兼容層的系統(tǒng)。
Linux和WINDOWS是兩種依據(jù)不同設(shè)計(jì)思想建立的操作系統(tǒng),Linux采用的是傳統(tǒng)的扁平模塊結(jié)構(gòu),即是由多個(gè)相互對(duì)獨(dú)立又相互依存的模塊組成的大內(nèi)核系統(tǒng),而以Windows2k和Windows XP為代表的Windows系統(tǒng)是則用了以微內(nèi)核結(jié)構(gòu)為主兼有扁平模塊結(jié)構(gòu)的操作系統(tǒng)。除體系結(jié)構(gòu)不同外Linux和Windows在文件系統(tǒng),內(nèi)存管理,進(jìn)程調(diào)度,圖形用戶系統(tǒng)等方面有各自的實(shí)現(xiàn)方法,因而Windows應(yīng)用程序不能直接在Linux平臺(tái)上運(yùn)行。微內(nèi)核結(jié)構(gòu)是現(xiàn)代操作系統(tǒng)的發(fā)展趨勢(shì),即只在內(nèi)核里保留了操作系統(tǒng)中最基本最本質(zhì)的功能,比如中斷處理,進(jìn)程調(diào)度,虛擬存儲(chǔ)等以核心態(tài)運(yùn)行的系統(tǒng)功能,而將其余功能移到內(nèi)核外用戶態(tài)以服務(wù)進(jìn)程形式運(yùn)行,這樣只要在內(nèi)核的基礎(chǔ)上依據(jù)不同的設(shè)計(jì)目標(biāo)實(shí)現(xiàn)相應(yīng)的服務(wù)進(jìn)程就能構(gòu)建不同的操作系統(tǒng)平臺(tái)。依據(jù)微內(nèi)核設(shè)計(jì)思想,如果以Linux系統(tǒng)作內(nèi)核,運(yùn)用Linux系統(tǒng)中已經(jīng)實(shí)現(xiàn)的文件系統(tǒng),進(jìn)程調(diào)度,內(nèi)存管理,圖形用戶系統(tǒng)等功能作為基礎(chǔ),建立一個(gè)WINDOWS的仿真環(huán)境,即提供一個(gè)與Windows的文件系統(tǒng),進(jìn)程調(diào)度,內(nèi)存管理,圖形用戶系統(tǒng)等功能相一致的仿真實(shí)現(xiàn),就可以在Linux平臺(tái)上實(shí)現(xiàn)WINDOWS程序的二進(jìn)制兼容。
在本發(fā)明中,兼容層以一組服務(wù)進(jìn)程的形式運(yùn)行在Linux內(nèi)核上,包括有Win32子系統(tǒng),X-Windows服務(wù)器,PE可執(zhí)行文件加載器等。其中Win32子系統(tǒng)提供了對(duì)Windows API的仿真實(shí)現(xiàn),Windows程序通過(guò)Win32子系統(tǒng)獲取與Windows平臺(tái)上同等的數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)對(duì)象、過(guò)程和服務(wù),這些數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)對(duì)象、過(guò)程和服務(wù)是利用Linux內(nèi)核的相應(yīng)功能為基礎(chǔ),按Windows平臺(tái)的標(biāo)準(zhǔn)進(jìn)行映射而實(shí)現(xiàn)的。X-Windows是Linux自帶的圖形用戶服務(wù)器,提供Linux平臺(tái)上圖形窗口、消息隊(duì)列等功能,兼容層的Win32子系統(tǒng)充分利用X-Windows在圖形用戶方面的基本功能,將Linux的圖形用戶接口進(jìn)行映射處理,獲得Windows平臺(tái)上的圖形用戶接口,從而保證了程序在移植之后圖形用戶界面的一致性。
PE可執(zhí)行文件加載器實(shí)現(xiàn)將PE格式的Windows程序加載到Linux上并運(yùn)行的功能,該服務(wù)進(jìn)程監(jiān)聽(tīng)來(lái)自客戶的連接,當(dāng)有客戶發(fā)出運(yùn)行Windows程序的請(qǐng)求時(shí),該服務(wù)進(jìn)程先創(chuàng)建一個(gè)代理線程接受客戶的服務(wù)請(qǐng)求,緊接著進(jìn)入監(jiān)聽(tīng)狀態(tài)準(zhǔn)備接受其他客戶請(qǐng)求,代理線程將PE格式的Windows程序及相關(guān)的動(dòng)態(tài)連接庫(kù)加載到Linux上并解決各模塊之間的鏈接,之后啟動(dòng)Windows程序的執(zhí)行并結(jié)束代理線程。所有兼容層系統(tǒng)服務(wù)進(jìn)程,也包括用戶的應(yīng)用進(jìn)程運(yùn)行在內(nèi)核之外的用戶空間,這些用戶進(jìn)程之間的關(guān)系是客戶/服務(wù)器的關(guān)系,它們以發(fā)送消息的方式通過(guò)內(nèi)核向服務(wù)器進(jìn)程提出服務(wù)請(qǐng)求,服務(wù)進(jìn)程在處理服務(wù)請(qǐng)求之后也以發(fā)送消息形式通過(guò)內(nèi)核把結(jié)果返回客戶進(jìn)程。在微內(nèi)核結(jié)構(gòu)之下,Win32子系統(tǒng)是一組相對(duì)獨(dú)立服務(wù)進(jìn)程,可以按應(yīng)用程序的方式進(jìn)行開(kāi)發(fā),因而Win32子系統(tǒng)可以選擇不同平臺(tái)的開(kāi)發(fā)工具進(jìn)行實(shí)現(xiàn)。
在本發(fā)明中,兼容層體系結(jié)構(gòu)的主體部分Win32子系統(tǒng)采用了基于Windows平臺(tái)上的開(kāi)發(fā)工具如VC來(lái)實(shí)現(xiàn)。Win32子系統(tǒng)包括基本應(yīng)用程序接口、用戶應(yīng)用程序接口、圖形設(shè)備接口、上層鏈接庫(kù)和驅(qū)動(dòng)程序、Windows小內(nèi)核、Linux兼容庫(kù)等模塊,這些模塊是PE格式的可執(zhí)行模塊。采用PE格式而不是ELF格式的Win32子系統(tǒng)直接消除了PE格式模塊和ELF格式模塊之間進(jìn)行連接的復(fù)雜性,大大提高了Windows程序在加載啟動(dòng)過(guò)程中的速度,同時(shí)Windows開(kāi)發(fā)工具在程序開(kāi)發(fā)調(diào)試效率方面是目前任何Linux開(kāi)發(fā)工具所無(wú)法比擬的。包含了Win32子系統(tǒng)和PE可執(zhí)行文件加載器的兼容層具備了運(yùn)行Windows程序的基本環(huán)境,因而可以實(shí)現(xiàn)Windows程序在Linux平臺(tái)上加載與運(yùn)行。PE可執(zhí)行文件加載器和Linux接口模塊是采用Linux平臺(tái)開(kāi)發(fā)的ELF可執(zhí)行模塊。
圖2說(shuō)明了本發(fā)明以微內(nèi)核思想建立的兼容層體系結(jié)構(gòu)的實(shí)施方案。該圖中進(jìn)一步描述了實(shí)現(xiàn)Win32子系統(tǒng)及PE可執(zhí)行文件加載器所采用的模塊結(jié)構(gòu)。
Windows應(yīng)用程序在運(yùn)行時(shí)需要獲得系統(tǒng)及用戶動(dòng)態(tài)連接庫(kù)支持,這些系統(tǒng)及用戶動(dòng)態(tài)連接庫(kù)最終會(huì)調(diào)用Windows的三個(gè)應(yīng)用程序接口基本應(yīng)用程序接口,用戶應(yīng)用程序接口,圖形設(shè)備接口,并通過(guò)三個(gè)接口調(diào)用Windows內(nèi)核。依照Windows系統(tǒng)的體系結(jié)構(gòu),兼容層在Linux內(nèi)核的基礎(chǔ)上重構(gòu)包括三個(gè)接口模塊在內(nèi)的一系列系統(tǒng)動(dòng)態(tài)連接庫(kù)。
如圖2所示,圖1中的Win32子系統(tǒng)包括了基本應(yīng)用程序接口、用戶應(yīng)用程序接口、圖形設(shè)備接口、上層鏈接庫(kù)和驅(qū)動(dòng)程序、Windows小內(nèi)核、Linux兼容庫(kù)等模塊,其中基本應(yīng)用程序接口,用戶應(yīng)用程序接口,圖形設(shè)備接口及上層連接庫(kù)等模塊與Windows平臺(tái)上的接口標(biāo)準(zhǔn)相一致。兼容層的Windows小內(nèi)核實(shí)現(xiàn)了Windows內(nèi)核一組最小的功能集,作為建立其他模塊的基礎(chǔ),兼容層各模塊最終通過(guò)Linux接口訪問(wèn)Linux內(nèi)核功能。示圖中的兼容層各模塊均采用VC等Windows平臺(tái)上的開(kāi)發(fā)工具實(shí)現(xiàn),而PE可執(zhí)行文件加載器和Linux接口模塊則采用Linux平臺(tái)開(kāi)發(fā)工具實(shí)現(xiàn)。采用該結(jié)構(gòu)的兼容層體系可以充分地模擬運(yùn)行Windows應(yīng)用程序所需操作系統(tǒng)環(huán)境,從而在Linux平臺(tái)上實(shí)現(xiàn)Windows應(yīng)用程序二進(jìn)制級(jí)兼容。
圖3說(shuō)明了本發(fā)明以微內(nèi)核思想建立的兼容層體系結(jié)構(gòu)的一個(gè)實(shí)施例。該圖中描述了兼容層關(guān)于WIN32子系統(tǒng)中的基本應(yīng)用程序接口、用戶應(yīng)用程序接口、圖形設(shè)備接口、上層鏈接庫(kù)、Windows小內(nèi)核、Linux兼容庫(kù)等模塊的具體實(shí)施過(guò)程。Windows系統(tǒng)中與基本應(yīng)用程序接口,用戶應(yīng)用程序接口,圖形設(shè)備接口相對(duì)應(yīng)的三個(gè)最重要的核心DLL是Kernel32,GDI32,和User32,這三個(gè)DLL建立在另一個(gè)核心DLLNTDLL之上,Windows應(yīng)用程序和其他DLL會(huì)直接或間接調(diào)這四個(gè)核心DLL,兼容層必需提供包括這四個(gè)DLL在內(nèi)的一系列系統(tǒng)DLL的仿真實(shí)現(xiàn)。本實(shí)施例采用Core32,GUI32,Sys32,Class32的別名建立了分別與Kernel32,GDI32,User32,和NTDLL相對(duì)應(yīng)的仿真DLL。仿真DLL通過(guò)Stdlib,XDLL,GLD11訪問(wèn)Linux內(nèi)核,其中Stdlib是基本輸入輸出庫(kù),由Linux的Libc實(shí)現(xiàn),XDLL是圖形窗口庫(kù),由Linux上的LibX實(shí)現(xiàn),GLD11是OpenGL的三維圖形庫(kù),由Linux上的LibGL庫(kù)實(shí)現(xiàn)。PE可執(zhí)行文件加載器CLASS在內(nèi)存中建立一份Windows動(dòng)態(tài)連接庫(kù)與兼容層仿真動(dòng)態(tài)連接庫(kù)的對(duì)應(yīng)表,CLASS在加載Windows應(yīng)用程序時(shí)首先歷遍其輸入輸出動(dòng)態(tài)連接庫(kù)表,按照動(dòng)態(tài)連接庫(kù)的對(duì)應(yīng)表將相應(yīng)兼容層仿真動(dòng)態(tài)連接庫(kù)加載到內(nèi)存上,并進(jìn)行連接。由于連接的是同樣格式的PE模塊,Windows應(yīng)用程序的啟動(dòng)與運(yùn)行要比采用ELF格式的模塊要更快。
圖4說(shuō)明了本發(fā)明中采用客戶/服務(wù)器(Client/Server)模式模擬Windows環(huán)境的實(shí)現(xiàn)方案。該圖中所示的Server是兼容層用于實(shí)現(xiàn)Windows仿真服務(wù)的服務(wù)器,提供客戶進(jìn)程有關(guān)進(jìn)程,線程,共享句柄,同步和其他相關(guān)資源的服務(wù)。當(dāng)客戶進(jìn)程(Win32進(jìn)程)發(fā)出服務(wù)請(qǐng)求時(shí),它將所有參數(shù)打包裝入一個(gè)共享主存塊并用消息發(fā)送給服務(wù)進(jìn)程,然后并進(jìn)入阻塞狀態(tài);服務(wù)器進(jìn)程工作于睡眠阻塞方式,當(dāng)用戶消息到來(lái)后,服務(wù)器進(jìn)程被喚醒并創(chuàng)建一個(gè)代理線程以完成客戶服務(wù)請(qǐng)求,緊接著重新進(jìn)入睡眠阻塞方式以等待下一個(gè)請(qǐng)求;新創(chuàng)建的代理線程負(fù)責(zé)具體服務(wù)工作,對(duì)于必須由Linux內(nèi)核實(shí)現(xiàn)的服務(wù),代理線程將請(qǐng)求按Linux的規(guī)則傳入Linux內(nèi)核,內(nèi)核接受請(qǐng)求并將結(jié)果返回給服務(wù)線程,服務(wù)線程再將內(nèi)核返回結(jié)果轉(zhuǎn)換成Windows系統(tǒng)所需的數(shù)據(jù)結(jié)構(gòu)形式,通過(guò)消息返回給客戶進(jìn)程;收到返回消息的客戶進(jìn)程被喚醒并繼續(xù)運(yùn)行。
如圖4中舉例說(shuō)明了一個(gè)Windows應(yīng)用程序用OpenFile函數(shù)獲取一個(gè)Windows文件句柄的實(shí)現(xiàn)過(guò)程,Windows應(yīng)用程序在調(diào)用OpenFile時(shí)激活兼容層文件服務(wù)器Server,Server創(chuàng)建一個(gè)代理線程以接收服務(wù),代理線程將文件名,路徑,打開(kāi)方式等參數(shù)傳入Linux內(nèi)核并獲得一個(gè)Linux文件句柄,Server按Window文件句柄格式分配并管理一個(gè)數(shù)據(jù)結(jié)構(gòu),將其作為OpenFile的結(jié)果返回給Window應(yīng)用程序,當(dāng)Server接到一個(gè)對(duì)Window文件句柄進(jìn)行讀寫(xiě)操作的請(qǐng)求時(shí),Server先在其管理的數(shù)據(jù)結(jié)構(gòu)中找出與該句柄相對(duì)應(yīng)的Linux文件句柄,再將請(qǐng)求傳入到Linux內(nèi)核中去。
權(quán)利要求
1.基于Linux的Windows軟件兼容層體系結(jié)構(gòu)一種在Linux操作系統(tǒng)上實(shí)現(xiàn)Microsoft Windows上應(yīng)用程序二進(jìn)制級(jí)兼容的兼容層體系結(jié)構(gòu),包括第一層支持Linux內(nèi)核以及基于Linux內(nèi)核的各種操作系統(tǒng);第二層包含一個(gè)能夠模擬運(yùn)行Microsoft Windows應(yīng)用程序所需的環(huán)境,向其提供運(yùn)行所需要的數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)對(duì)象、過(guò)程和服務(wù)的“兼容層”;第三層包含各種Microsoft Windows應(yīng)用程序。位于“第一層”與“第二層”之間,包含一個(gè)為第二層(兼容層)各模塊提供訪問(wèn)第一層(Linux內(nèi)核)功能的“Linux接口模塊”。
2.依據(jù)權(quán)利要求1,其中“第二層包含一個(gè)能夠模擬運(yùn)行MicrosoftWindows應(yīng)用程序所需的環(huán)境,向其提供運(yùn)行所需要的數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)對(duì)象、過(guò)程和服務(wù)的兼容層”,該兼容層包括Win32子系統(tǒng);X-Windows服務(wù)器;PE可執(zhí)行文件加載器。
3.依據(jù)權(quán)利要求2,其中“Win32子系統(tǒng)”提供對(duì)Windows API的仿真實(shí)現(xiàn)功能,實(shí)現(xiàn)Windows模擬環(huán)境,使MicrosoftWindows應(yīng)用程序?qū)崿F(xiàn)在Linux平臺(tái)上二進(jìn)制級(jí)兼容;Microsoft Windows應(yīng)用程序通過(guò)Win32子系統(tǒng)獲取與Microsoft Windows平臺(tái)上同等的數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)對(duì)象、過(guò)程和服務(wù),這些數(shù)據(jù)結(jié)構(gòu)、系統(tǒng)對(duì)象、過(guò)程和服務(wù);利用Linux內(nèi)核的相應(yīng)功能,按照Microsoft Windows平臺(tái)的標(biāo)準(zhǔn)進(jìn)行映射而實(shí)現(xiàn)。
4.依據(jù)權(quán)利要求2,其中“Win32子系統(tǒng)”,包括與Microsoft Windows標(biāo)準(zhǔn)相一致的一系列仿真動(dòng)態(tài)連接庫(kù),包括基本應(yīng)用程序接口,用戶應(yīng)用程序接口,圖形設(shè)備接口以及上層連接庫(kù)等;為實(shí)現(xiàn)以上功能模塊提供支持的驅(qū)動(dòng)程序、Microsoft Windows小內(nèi)核,Linux兼容庫(kù)等模塊。
5.依據(jù)權(quán)利要求2,其中“Win32子系統(tǒng)”采用基于Microsoft Windows開(kāi)發(fā)環(huán)境,如VC等,進(jìn)行開(kāi)發(fā)、編譯;生成基于PE格式的可執(zhí)行模塊。
6.依據(jù)權(quán)利要求2,其中“Win32子系統(tǒng)”利用“X-Windows服務(wù)器”在圖形用戶方面的基本功能,將Linux的圖形用戶接口進(jìn)行映射處理,獲得Windows平臺(tái)上的圖形用戶接口,從而保證了程序在移植之后圖形用戶界面的一致性。
7.依據(jù)權(quán)利要求2,其中“PE可執(zhí)行文件加載器”以服務(wù)器形式運(yùn)行在用戶態(tài),提供將PE可執(zhí)行文件加載到Linux平臺(tái)上并運(yùn)行的功能。
8.依據(jù)權(quán)利要求2,其中“PE可執(zhí)行文件加載器”,包括以下步驟PE可執(zhí)行文件加載器在內(nèi)存中建立一份“Microsoft Windows系統(tǒng)下DLL與兼容層仿真DLL對(duì)應(yīng)表”;PE可執(zhí)行文件加載器運(yùn)行于睡眠阻塞方式,當(dāng)有用戶發(fā)出運(yùn)行MicrosoftWindows應(yīng)用程序請(qǐng)求時(shí)創(chuàng)建一個(gè)代理線程,自身返回睡眠狀態(tài),等待下一個(gè)用戶請(qǐng)求;PE可執(zhí)行文件加載器代理線程在加載Microsoft Windows可執(zhí)行文件時(shí)歷遍其輸入輸出模塊表,并將對(duì)Windows系統(tǒng)下的DLL的加載改用兼容層中相應(yīng)的仿真DLL來(lái)替代;PE可執(zhí)行文件加載器代理線程完成Windows可執(zhí)行程序與兼容層中相應(yīng)的仿真DLL的連接;PE可執(zhí)行文件加載器代理線程結(jié)束并啟動(dòng)Windows程序運(yùn)行。
9.依據(jù)權(quán)利要求2,其中“PE可執(zhí)行文件加載器”基于Linux環(huán)境開(kāi)發(fā)、編譯;生成基于ELF格式的可執(zhí)行程序。
10.依據(jù)權(quán)利要求1,其中“Linux接口模塊”采用基于Linux環(huán)境開(kāi)發(fā)、編譯;生成基于ELF格式的可執(zhí)行模塊。
11.依據(jù)權(quán)利要求1,其中Linux內(nèi)核運(yùn)行在核心態(tài),“Microsoft Windows應(yīng)用程序”和“兼容層”以客戶/服務(wù)器(Client/Server)模式通過(guò)消息機(jī)制進(jìn)行通訊;兼容層通過(guò)Linux接口模塊,利用“Linux內(nèi)核”提供的進(jìn)程調(diào)度、消息隊(duì)列、圖形窗口、文件管理、虛擬內(nèi)存、設(shè)備驅(qū)動(dòng)等基本服務(wù),實(shí)現(xiàn)MicrosoftWindows平臺(tái)上相應(yīng)的服務(wù)。
12.依據(jù)權(quán)利要求11,其中“Linux內(nèi)核運(yùn)行在核心態(tài),Microsoft Windows應(yīng)用程序和兼容層以客戶/服務(wù)器(Client/Server)模式通過(guò)消息機(jī)制進(jìn)行通訊;兼容層通過(guò)Linux內(nèi)核提供的進(jìn)程調(diào)度、消息隊(duì)列、圖形窗口、文件管理、虛擬內(nèi)存、設(shè)備驅(qū)動(dòng)等基本服務(wù),實(shí)現(xiàn)Microsoft Windows平臺(tái)上相應(yīng)的服務(wù)”,包括以下步驟客戶進(jìn)程(Win32進(jìn)程)發(fā)出服務(wù)請(qǐng)求時(shí),兼容層中的Server將所有參數(shù)打包裝入一個(gè)共享主存塊并用消息發(fā)送給服務(wù)進(jìn)程,然后并進(jìn)入阻塞狀態(tài);服務(wù)器進(jìn)程工作于睡眠阻塞方式,當(dāng)用戶消息到來(lái)后,服務(wù)器進(jìn)程被喚醒并創(chuàng)建一個(gè)代理線程以完成客戶服務(wù)請(qǐng)求,緊接著重新進(jìn)入睡眠阻塞方式以等待下一個(gè)請(qǐng)求;新創(chuàng)建的代理線程負(fù)責(zé)具體服務(wù)工作,對(duì)于必須由Linux內(nèi)核實(shí)現(xiàn)的服務(wù),代理線程將請(qǐng)求按Linux的規(guī)則傳入Linux內(nèi)核,內(nèi)核接受請(qǐng)求并將結(jié)果返回給服務(wù)線程;服務(wù)線程再將內(nèi)核返回結(jié)果轉(zhuǎn)換成Microsoft Windows系統(tǒng)所需的數(shù)據(jù)結(jié)構(gòu)形式,通過(guò)消息返回給客戶進(jìn)程。收到返回消息的客戶進(jìn)程被喚醒并繼續(xù)運(yùn)行。
全文摘要
基于Linux的Windows軟件兼容層體系結(jié)構(gòu)是在Linux內(nèi)核上層設(shè)計(jì)一個(gè)Windows兼容層,模擬運(yùn)行Windows程序所需的環(huán)境,提供該程序運(yùn)行所需要的數(shù)據(jù)結(jié)構(gòu),系統(tǒng)對(duì)象,過(guò)程和服務(wù)。該兼容層包括基本應(yīng)用程序接口、用戶應(yīng)用程序接口、圖形設(shè)備接口、上層鏈接庫(kù)和驅(qū)動(dòng)程序、Windows小內(nèi)核、Linux兼容庫(kù)等模塊,這些模塊主要基于Windows開(kāi)發(fā)環(huán)境如VC等開(kāi)發(fā)編譯,生成PE格式文件。兼容層可以使Windows應(yīng)用程序直接運(yùn)行在Linux平臺(tái)上而不需要改動(dòng)任何源代碼,以最低的移植成本獲得與在Windows平臺(tái)上運(yùn)行時(shí)同樣的功效,包括用戶界面,操作習(xí)慣,運(yùn)行速度和穩(wěn)定性等。
文檔編號(hào)G06F9/44GK1731347SQ200410009410
公開(kāi)日2006年2月8日 申請(qǐng)日期2004年8月6日 優(yōu)先權(quán)日2004年8月6日
發(fā)明者梁肇新 申請(qǐng)人:梁肇新