朱建新,趙亞輝
華中科技大學(xué),湖北武漢 430074
現(xiàn)在,隨著手機(jī)硬件功能的快速增強(qiáng),為了給手機(jī)提供靈活的應(yīng)用執(zhí)行環(huán)境,我們需要開(kāi)發(fā)各種各樣的手機(jī)操作系統(tǒng)和軟件平臺(tái)。本世紀(jì)初,手機(jī)WAP瀏覽器平臺(tái)被用來(lái)訪問(wèn)WAP網(wǎng)頁(yè)、圖片和下載手機(jī)鈴聲。之后,一些應(yīng)用平臺(tái)也被用來(lái)提供手機(jī)的應(yīng)用執(zhí)行環(huán)境,比如移動(dòng)虛擬機(jī)(Java、BREW、WIPI等)。但是多數(shù)移動(dòng)虛擬機(jī)只提供子自己特定的執(zhí)行環(huán)境,其應(yīng)用程序不兼容其它平臺(tái)。另外,多數(shù)手機(jī)應(yīng)用程序是用有平臺(tái)依賴(lài)性的API函數(shù)和庫(kù)編寫(xiě)的,而且編譯的方式也不同。由于最初手機(jī)硬件的限制,比如有限的CPU功能和內(nèi)存空間,多數(shù)手機(jī)只包含一個(gè)單一的應(yīng)用執(zhí)行平臺(tái)。但是,隨著手機(jī)硬件的發(fā)展,在手機(jī)中應(yīng)用復(fù)雜的軟件架構(gòu)也越來(lái)越容易,比如Android、Symbian OS、Windows Mobile等。
為了在單個(gè)設(shè)備上運(yùn)行多重虛擬機(jī),每個(gè)虛擬機(jī)都必須是像一個(gè)擁有分層軟件模塊的可執(zhí)行目標(biāo)一樣可移植。另外考慮到手機(jī)設(shè)備的硬件資源有限的特征,為了減少程序執(zhí)行的時(shí)間,手機(jī)設(shè)備中的軟件系統(tǒng)必須是輕量級(jí)的。根據(jù)上面所述的需求,我們?cè)O(shè)計(jì)了一個(gè)基于L4微內(nèi)核的輕量級(jí)手機(jī)中間軟件。
L4微內(nèi)核是德國(guó)科學(xué)家Jochen Liedtke設(shè)計(jì)的第二代微內(nèi)核中的一個(gè)族。它包含操作系統(tǒng)基本的服務(wù),如進(jìn)程控制、內(nèi)存管理和進(jìn)程間通信等。其進(jìn)程間通信功能優(yōu)于先前第一代微內(nèi)核。優(yōu)于其輕量級(jí)的體積和良好的性能,L4微內(nèi)核適用于在嵌入式平臺(tái)上實(shí)現(xiàn)虛級(jí)化。
在基于L4微內(nèi)核的虛擬機(jī)系統(tǒng)架構(gòu)中,虛擬化的操作系統(tǒng)和設(shè)備驅(qū)動(dòng)分別作為一個(gè)服務(wù)進(jìn)程運(yùn)行在L4微內(nèi)核上面,從而實(shí)現(xiàn)了虛擬化的用戶(hù)操作系統(tǒng)內(nèi)核與其它用戶(hù)操作系統(tǒng)或設(shè)備驅(qū)動(dòng)之間的隔離。每個(gè)系統(tǒng)調(diào)用都被轉(zhuǎn)換成調(diào)用進(jìn)程和目標(biāo)服務(wù)間的進(jìn)程間通信(IPC)消息。基于微內(nèi)核架構(gòu)的虛擬機(jī)的系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 基于微內(nèi)核架構(gòu)的虛擬機(jī)的系統(tǒng)結(jié)構(gòu)
圖2 NICTA:Pistachio-embedded 系統(tǒng)架構(gòu)
澳大利亞國(guó)家信息與通信技術(shù)中心(NICTA)的嵌入式實(shí)時(shí)操作系統(tǒng)研究小組以嵌入式系統(tǒng)為目標(biāo)對(duì)卡爾斯魯爾大學(xué)研發(fā)的L4Ka:Pistachio進(jìn)行了擴(kuò)展實(shí)現(xiàn)了一個(gè)嵌入式操作系統(tǒng)NICTA::Pistachio-embedded,其系統(tǒng)架構(gòu)如圖2所示。
這個(gè)操作系統(tǒng)的內(nèi)核選用Iguana提供大多數(shù)系統(tǒng)都需要的基本服務(wù),如內(nèi)存管理和進(jìn)程調(diào)度。在Iguana上面運(yùn)行著一個(gè)完全虛擬化的用戶(hù)態(tài)Linux內(nèi)核Wombat。Wombat是高度輕量級(jí)的而且可以運(yùn)行在ARM等多種不同的硬件平臺(tái)上,它的性能和標(biāo)準(zhǔn)的Linux非常相近,甚至在一些性能指標(biāo)上超過(guò)了Linux。
美國(guó)高通公司把L4微內(nèi)核應(yīng)用到了他們最新研制的擁有雙CPU核(ARM9和ARM11)的MSM7000芯片上。在這個(gè)架構(gòu)中,為了提高移動(dòng)手持終端的處理性能和穩(wěn)定性,操作系統(tǒng)被劃分為應(yīng)用操作系統(tǒng)和通信操作系統(tǒng),且每個(gè)操作系統(tǒng)都運(yùn)行在自己獨(dú)立的CPU核上,這意味著系統(tǒng)同時(shí)在L4微內(nèi)核上加載了兩個(gè)操作系統(tǒng)。在應(yīng)用操作系統(tǒng)一端,可以加載提供應(yīng)用服務(wù)功能的Windows mobile或其它手機(jī)操作系統(tǒng),在通信操作系統(tǒng)一端加載提供通信服務(wù)功能的L4/Iguana的REX實(shí)時(shí)操作系統(tǒng)。
Sun公司的J2ME平臺(tái)、高通公司的BREW(Binary Runtime Environment for Wireless)[3]和 韓 國(guó) TTA 公 司的 WIPI(Wireless Internet Platform for Inter-operability)[4]都是典型的支持動(dòng)態(tài)安裝應(yīng)用程序的移動(dòng)應(yīng)用平臺(tái),它們可以在手機(jī)硬件平臺(tái)上作為一個(gè)虛擬機(jī)運(yùn)行,為許多不同的手機(jī)硬件平臺(tái)提供通用的執(zhí)行環(huán)境。傳統(tǒng)的手機(jī)系統(tǒng)軟件架構(gòu)如圖3所示。
圖3 傳統(tǒng)的手持設(shè)備軟件架構(gòu)圖
圖4 總體系統(tǒng)架構(gòu)圖
我們提出的這種基于L4微內(nèi)核的輕量級(jí)可移植中間軟件可以在多種手機(jī)平臺(tái)上運(yùn)行應(yīng)用程序。
與前面講述的高通公司的最新軟件架構(gòu)不同,我們的系統(tǒng)運(yùn)行的目標(biāo)平臺(tái)是單處理器的嵌入式設(shè)備。在這個(gè)架構(gòu)中,有一個(gè)主控制操作系統(tǒng)或進(jìn)程運(yùn)行在L4微內(nèi)核上面,它把每個(gè)虛擬機(jī)都當(dāng)作一個(gè)應(yīng)用程序來(lái)執(zhí)行。它們之間依靠進(jìn)程間通信機(jī)制(IPC)實(shí)現(xiàn)通信,如圖4所示。
大多數(shù)應(yīng)用平臺(tái)有著相似的架構(gòu)和運(yùn)行方式,在這些平臺(tái)上運(yùn)行應(yīng)用程序時(shí),需要向應(yīng)用程序開(kāi)發(fā)者提供一套應(yīng)用程序接口(API),并把它們映射到系統(tǒng)的硬件抽象層。因此,我們?cè)O(shè)計(jì)一種在單個(gè)設(shè)備中同時(shí)支持多種虛擬機(jī)的通用硬件抽象層,就像第二部分提出的基于微內(nèi)核架構(gòu)的虛擬機(jī)的系統(tǒng)結(jié)構(gòu)一樣,每個(gè)虛擬機(jī)都作為一個(gè)服務(wù)運(yùn)行在我們的系統(tǒng)中,它可以獨(dú)立運(yùn)行并下載自己的應(yīng)用程序。
大多數(shù)虛擬機(jī)都有各自支持的各種設(shè)備的硬件抽象層,同時(shí)又有相同的API函數(shù),所以每種合適不同硬件平臺(tái)的應(yīng)用程序代碼都是相似的。例如,BREW平臺(tái)中,在嵌入式文件系統(tǒng)中處理一個(gè)文件,BREW的應(yīng)用程序可以調(diào)用API函數(shù)IFILWEMGR_OpenFile()去調(diào)用在硬件抽象層中的函數(shù)OEMFS_Open()。同樣的,在WIPI平臺(tái)中,API函數(shù)MS_fsOpen()也為WIPI應(yīng)用程序開(kāi)發(fā)者提供調(diào)用相應(yīng)的硬件抽象層函數(shù)的功能。
考慮到這些相似之處,為了支持系統(tǒng)頂層的應(yīng)用軟件層,我們?cè)O(shè)計(jì)了一個(gè)通用的硬件抽象層,它可以支持多種硬件平臺(tái),提供的服務(wù)由這些設(shè)備的具有代表性的功能組成。
為了將這個(gè)通用硬件抽象層應(yīng)用到我們的手機(jī)中間軟件中,它必須符合下面3個(gè)需求:
1)代碼輕量級(jí)。傳統(tǒng)上,大多數(shù)虛擬機(jī)需要它自己的硬件抽象層,其中實(shí)現(xiàn)一個(gè)接口函數(shù)就要數(shù)百行的代碼。我們提出的這個(gè)通用硬件抽象層架構(gòu)繼承了一般的可調(diào)用函數(shù),可以減少虛擬機(jī)的這些代碼;
2)簡(jiǎn)單和靈活的移植性。由于我們封裝了一般的可調(diào)用函數(shù),在移植一個(gè)新的虛擬機(jī)時(shí),每個(gè)接口都可以被簡(jiǎn)化;
3)可維護(hù)性和調(diào)試。在這個(gè)通用硬件抽象層架構(gòu)中,函數(shù)調(diào)用都被集中管理并被簡(jiǎn)化,這樣就可以減少對(duì)系統(tǒng)維護(hù)和調(diào)試的投入。
1)主控制任務(wù)。它是一個(gè)守護(hù)進(jìn)程任務(wù),可以初始化和結(jié)束虛擬機(jī)。它同時(shí)用一個(gè)鏈表結(jié)構(gòu)記錄虛擬機(jī)運(yùn)行信息。用這個(gè)任務(wù)提供的方法,系統(tǒng)可以獲取虛擬機(jī)的一個(gè)句柄,用這個(gè)句柄可以控制虛擬機(jī),并可避免重復(fù)執(zhí)行虛擬機(jī);
2)設(shè)備驅(qū)動(dòng)服務(wù)(DDS)。它適合于各個(gè)設(shè)備驅(qū)動(dòng),比如LCD顯示器、鍵盤(pán)、串行口和Flash驅(qū)動(dòng)。每個(gè)設(shè)備驅(qū)動(dòng)作為一個(gè)獨(dú)立的服務(wù)運(yùn)行,并在系統(tǒng)啟動(dòng)時(shí)被初始化。我們實(shí)現(xiàn)了四個(gè)設(shè)備驅(qū)動(dòng)服務(wù)(LCD、鍵盤(pán)、串行口和文件系統(tǒng)),其它設(shè)備驅(qū)動(dòng)如MSM6100芯片集中的射頻設(shè)備驅(qū)動(dòng)包含在高通公司的提供的函數(shù)庫(kù),并且在沒(méi)有得到證書(shū)的情況下是被禁止使用的;
3)通用硬件抽象層服務(wù)(GPHAL)。是一個(gè)面向多種虛擬機(jī)的通用服務(wù)層,它可以為各種各樣的虛擬機(jī)提供具體的API。每個(gè)虛擬機(jī)可以調(diào)用GPHAL應(yīng)用程序接口去處理目標(biāo)設(shè)備驅(qū)動(dòng)。用這個(gè)層,可以減少為新建虛擬機(jī)調(diào)用抽象的API函數(shù)進(jìn)行的移植包修改工作。
盡管我們提出的這種中間軟件是為擁有輕量級(jí)軟件架構(gòu)的手機(jī)系統(tǒng)設(shè)計(jì)的,不過(guò)它也可以適用于其它嵌入式設(shè)備。L4微內(nèi)核是一個(gè)帶有小TCB的輕量級(jí)內(nèi)核,包含我們的中間軟件層也只需要小于1M的存儲(chǔ)空間,它也可以嵌入到感測(cè)器設(shè)備或感測(cè)網(wǎng)絡(luò)中的一個(gè)感應(yīng)服務(wù)中。另外,我們的平臺(tái)有獨(dú)立的設(shè)備驅(qū)動(dòng)和通用硬件抽象層,可以為感測(cè)網(wǎng)絡(luò)提供了靈活的軟件執(zhí)行環(huán)境。
本文提出一個(gè)一個(gè)基于L4微內(nèi)核的輕量級(jí)手機(jī)中間軟件,它可以為多種虛擬機(jī)提供運(yùn)行環(huán)境,并可以為在可移動(dòng)設(shè)備和感測(cè)系統(tǒng)中的各種虛擬機(jī)提供靈活的軟件架構(gòu)。利用這個(gè)中間軟件平臺(tái),為各種虛擬機(jī)開(kāi)發(fā)的應(yīng)用程序可以不加修改便可運(yùn)行在同一款手機(jī)上。因此,這個(gè)輕量級(jí)的手機(jī)中間軟件為各種智能手機(jī)提供獨(dú)立的應(yīng)用程序執(zhí)行環(huán)境,并且使應(yīng)用程序的移植和重用變得容易。
[1]Ben Leslie,Carl Van Schaik and Gernot Heiser。Wombat:a portable user-mode Linux for embedded systems。 In Proceedings of the 6th Linux。Conf.Au,Canberra,April,2005.
[2]Sun Microsystems。The Java ME Platform-Most Ubiquitous Application Platform for Mobile Devices.
[3]Qualcomm Inc。BREWapiTM OEM Porting Guide for MSMTM Platforms,2003.
[4]TTA,Wireless Internet Platform for Interoperability TTAS.KO06.0036/R3,2004,6.