《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 插件虛擬機(jī)的設(shè)計(jì)與實(shí)現(xiàn)
插件虛擬機(jī)的設(shè)計(jì)與實(shí)現(xiàn)
來(lái)源:微型機(jī)與應(yīng)用2014年第3期
劉洪蕾,丁香乾,,侯瑞春
(中國(guó)海洋大學(xué) 信息科學(xué)與工程學(xué)院,山東 青島 266100)
摘要: 在基于.Net平臺(tái)的信息系統(tǒng)開(kāi)發(fā)過(guò)程中,,組件-控件的復(fù)用已經(jīng)很常見(jiàn),但是,,邏輯流程部分的代碼始終沒(méi)有得到有效的縮減,。針對(duì)這種現(xiàn)狀,提出對(duì)插件虛擬機(jī)的研究,。在組件-控件和功能模塊間抽象一層“插件”,,將信息系統(tǒng)劃分為不同的“插件”,通過(guò)XML配置文件來(lái)定義“插件”間的邏輯關(guān)系,,同時(shí),,“插件”也可以很好地實(shí)現(xiàn)功能的復(fù)用。插件虛擬機(jī)用于解釋執(zhí)行該配置文件,。
Abstract:
Key words :

摘  要: 在基于.Net平臺(tái)的信息系統(tǒng)開(kāi)發(fā)過(guò)程中,,組件-控件的復(fù)用已經(jīng)很常見(jiàn),但是,,邏輯流程部分的代碼始終沒(méi)有得到有效的縮減,。針對(duì)這種現(xiàn)狀,提出對(duì)插件虛擬機(jī)的研究,。在組件-控件和功能模塊間抽象一層“插件”,,將信息系統(tǒng)劃分為不同的“插件”,通過(guò)XML配置文件來(lái)定義“插件”間的邏輯關(guān)系,同時(shí),,“插件”也可以很好地實(shí)現(xiàn)功能的復(fù)用,。插件虛擬機(jī)用于解釋執(zhí)行該配置文件。
關(guān)鍵詞: XML,;插件;虛擬機(jī),;業(yè)務(wù)邏輯

 虛擬機(jī)并不是新技術(shù),,早在20世紀(jì)六七十年代,IBM研究中心就在試驗(yàn)室里實(shí)現(xiàn)了其主機(jī)的鏡像,,算是最原始的虛擬機(jī)了,。之后一段時(shí)間發(fā)展緩慢,一度由于分時(shí)操作系統(tǒng)的出現(xiàn)而處于停滯狀態(tài),。20世紀(jì)90年代隨著Java虛擬機(jī)的推出,,使對(duì)虛擬機(jī)技術(shù)的研究成為處理器設(shè)計(jì)人員、軟件設(shè)計(jì)人員,、服務(wù)器設(shè)計(jì)人員和網(wǎng)絡(luò)安全設(shè)計(jì)人員的熱門研究課題,。虛擬機(jī)并不只是應(yīng)用于對(duì)操作系統(tǒng),目前,,在具體應(yīng)用領(lǐng)域的虛擬機(jī)開(kāi)發(fā)得到迅速發(fā)展,。這里將虛擬機(jī)的概念首次應(yīng)用到Net環(huán)境下的信息系統(tǒng)的開(kāi)發(fā)過(guò)程中。
 為了便于理解插件虛擬機(jī)的作用,,首先介紹一種自動(dòng)化業(yè)務(wù)流程規(guī)范語(yǔ)言——業(yè)務(wù)流程執(zhí)行語(yǔ)言BPEL(Business Process Execution Language),,這與插件虛擬機(jī)中用XML配置文件實(shí)現(xiàn)業(yè)務(wù)邏輯有相似之處。BPEL是基于XML和Web服務(wù)的,,用XML文檔寫(xiě)入BPEL中的流程能在Web服務(wù)之間以標(biāo)準(zhǔn)化的交互方式得到精心組織,,它簡(jiǎn)化了將多個(gè)Web服務(wù)合成到一個(gè)新的業(yè)務(wù)流程中的操作[1]。這些流程能夠在任何一個(gè)符合BPEL規(guī)范的平臺(tái)或產(chǎn)品上執(zhí)行,。BPEL通過(guò)合作伙伴連接來(lái)實(shí)現(xiàn)服務(wù)的調(diào)用,,合作伙伴連接只定義所要調(diào)用的接口,它是一個(gè)抽象的網(wǎng)絡(luò)服務(wù)描述語(yǔ)言WSDL(Web Services Description Language)接口,,這個(gè)接口在BPEL運(yùn)行時(shí)再綁定到真正的服務(wù)提供者上面[2],。這樣使接口和實(shí)現(xiàn)之間達(dá)到了一種松散耦合的效果,Web Service實(shí)現(xiàn)了接口的可重用性,,而B(niǎo)PEL實(shí)現(xiàn)的是流程的可重用性,。在XML配置文件中,“插件”類似于Web Service的接口,,而B(niǎo)PEL對(duì)Web Service提供的服務(wù)類似于XML配置文檔對(duì)“插件”的執(zhí)行順序的控制,。插件虛擬機(jī)的研究,提出了一種新的業(yè)務(wù)邏輯部分的實(shí)現(xiàn),在此之前,,業(yè)務(wù)邏輯部分只能通過(guò)程序代碼實(shí)現(xiàn),,現(xiàn)在轉(zhuǎn)換成只需要編寫(xiě)描述性的文本語(yǔ)言,從而有效減少開(kāi)發(fā)工作量,,降低軟件開(kāi)發(fā)成本,。
1 相關(guān)名詞簡(jiǎn)介
1.1 虛擬機(jī)

 虛擬機(jī)按其表面意思來(lái)理解就是指虛擬的機(jī)器,這個(gè)機(jī)器并不是由真實(shí)的硬件所組成,,而是通過(guò)軟件系統(tǒng)虛擬而成的具有跟真正機(jī)器類似功能的一種實(shí)現(xiàn)[3-5],。“插件虛擬機(jī)”的命名,是因?yàn)槠湓O(shè)計(jì)思想與計(jì)算機(jī)的基本思想相類似:計(jì)算機(jī)的工作基于存儲(chǔ)程序與程序控制,,其中存儲(chǔ)程序包括對(duì)程序及運(yùn)行中所需數(shù)據(jù)的存儲(chǔ),,程序控制指計(jì)算機(jī)對(duì)程序中一條條指令的取出、分析與執(zhí)行[6],;在插件虛擬機(jī)中,,其主要工作是數(shù)據(jù)的存儲(chǔ)與插件的控制,數(shù)據(jù)的存儲(chǔ)包括外界輸入的數(shù)據(jù)及運(yùn)行時(shí)數(shù)據(jù)的存儲(chǔ),,插件的控制包括插件的取出,、分析與執(zhí)行。從功能上看,,CPU的內(nèi)部結(jié)構(gòu)分為控制單元,、邏輯單元和存儲(chǔ)單元3大部分[7],這3個(gè)部分互相協(xié)調(diào)進(jìn)行分析,、判斷,、運(yùn)算,并控制計(jì)算機(jī)各部件進(jìn)行工作,。插件虛擬機(jī)中根據(jù)各部分具體實(shí)現(xiàn)的功能,,可以把它分為如下幾部分:插件運(yùn)行時(shí)、插件執(zhí)行器,、路由規(guī)則器,、插件管理器、消息管理器,、線程管理器,、共享數(shù)據(jù)堆和運(yùn)行時(shí)上下文。通過(guò)這幾部分的相互協(xié)作,,共同完成信息系統(tǒng)中插件的有序調(diào)用與執(zhí)行,。
1.2 插件
 在開(kāi)發(fā)信息系統(tǒng)軟件的時(shí)候,現(xiàn)在最常見(jiàn)的做法是把軟件按功能模塊來(lái)劃分,,將每個(gè)功能模塊分別設(shè)計(jì)好之后,,最后再組合起來(lái)形成最終的信息系統(tǒng)軟件,。目前,在程序復(fù)用方面,,最常見(jiàn)的是組件復(fù)用,,最具有代表性的是微軟公司的組件對(duì)象模型COM(Component Object Model)和Sun公司的企業(yè)級(jí)JavaBean EJB(Enterprise JavaBean)。COM是基于分布式對(duì)象模型的開(kāi)放標(biāo)準(zhǔn),,它詳細(xì)規(guī)定了一個(gè)COM組件所應(yīng)具有的二進(jìn)制內(nèi)存結(jié)構(gòu)是組件集成的框架,,這個(gè)框架支持對(duì)象的互操作性和可重用性[8-9],COM組件的創(chuàng)建由COM庫(kù)和類工廠協(xié)作完成,,它是ActiveX技術(shù)的基礎(chǔ),,并且運(yùn)用于大多數(shù)的Windows編程;EJB是一種基于Java環(huán)境的針對(duì)服務(wù)器端的組件模型[10],,其設(shè)計(jì)目標(biāo)與核心應(yīng)用是部署分布式應(yīng)用程序,同時(shí)它定義了一個(gè)用于開(kāi)發(fā)基于組件的企業(yè)多重應(yīng)用程序的標(biāo)準(zhǔn),,EJB技術(shù)簡(jiǎn)化了用Java語(yǔ)言編寫(xiě)企業(yè)級(jí)應(yīng)用系統(tǒng)的開(kāi)發(fā),、配置和執(zhí)行[11]。插件虛擬機(jī)中的“插件”是在模塊,、控件-組件中抽象出來(lái)的,,單個(gè)模塊中可以包含多個(gè)插件,插件中可以包含控件和組件,,在復(fù)雜的應(yīng)用系統(tǒng)中可以實(shí)現(xiàn)插件的嵌套,,例如:信息系統(tǒng)首先劃分為幾個(gè)插件,插件中可以包含功能模塊,,然后功能模塊中再包含插件,。
2 虛擬機(jī)的設(shè)計(jì)及實(shí)現(xiàn)
2.1 組成結(jié)構(gòu)

 插件虛擬機(jī)的工作是圍繞“插件”的調(diào)用展開(kāi)的,信息系統(tǒng)被劃分為插件的形式,,插件被統(tǒng)一定義在配置文件中,,其中插件的編碼與實(shí)現(xiàn)插件的類相互對(duì)應(yīng),便于插件虛擬機(jī)在合適的場(chǎng)景與環(huán)境中調(diào)用插件,。根據(jù)插件虛擬機(jī)要完成的功能將其分為以下幾部分,,其結(jié)構(gòu)圖如圖1所示。


?。?)插件虛擬機(jī)運(yùn)行時(shí),,為插件提供面向操作系統(tǒng)和Net環(huán)境的基礎(chǔ)服務(wù),解釋模塊配置文件,,根據(jù)模塊配置文件創(chuàng)建各種子系統(tǒng),;
 (2)上下文管理器,,提供對(duì)插件虛擬機(jī)傳入的參數(shù)的封裝,;
?。?)共享數(shù)據(jù)堆,提供插件間的數(shù)據(jù)共享服務(wù),;
?。?)消息管理器,提供插件間的消息發(fā)送功能,;
?。?)插件管理器,負(fù)責(zé)查找,、加載,、緩存插件;
?。?)插件執(zhí)行器,,負(fù)責(zé)從插件池中取出插件,執(zhí)行插件,,并根據(jù)插件參數(shù)確定插件顯示模式,;
 (7)路由規(guī)則器,,主要負(fù)責(zé)確定下一個(gè)需要執(zhí)行的插件的id,,并將插件id發(fā)送給插件執(zhí)行器,由插件執(zhí)行器運(yùn)行id對(duì)應(yīng)的插件,;
?。?)線程管理器,提供操作系統(tǒng)的線程封裝服務(wù),,提供線程間數(shù)據(jù)傳遞服務(wù),。
2.2 插件虛擬機(jī)的實(shí)現(xiàn)
 插件虛擬機(jī)的實(shí)現(xiàn),有其完備的執(zhí)行過(guò)程,,不僅能夠完成基本的功能,,而且能夠處理運(yùn)行過(guò)程中產(chǎn)生的各種異常。其主要的技術(shù)點(diǎn)包括:插件間數(shù)據(jù)的存儲(chǔ),、插件的生命周期以及接口規(guī)范等,。啟動(dòng)插件虛擬機(jī),會(huì)檢查各部分的完整性并加載XML配置文件中定義的所有“插件”,,用戶界面輸入的數(shù)據(jù)會(huì)在插件虛擬機(jī)中的得到相應(yīng)的處理并觸發(fā)相應(yīng)“插件”的執(zhí)行,。插件虛擬機(jī)的工作流程如圖2所示。

    插件虛擬機(jī)運(yùn)行時(shí),,主要包括以下步驟:
?。?)插件虛擬機(jī)運(yùn)行時(shí)加載并讀取配置文件信息,根據(jù)配置文件創(chuàng)建子系統(tǒng),。子系統(tǒng)包括:路由規(guī)則器,、消息管理器,、共享數(shù)據(jù)堆、線程管理器,、上下文管理器,、插件管理器、插件執(zhí)行器,。然后,,插件虛擬機(jī)運(yùn)行時(shí)調(diào)用插件管理器;
?。?)插件管理器加載配置文件中涉及到的插件,,由加載單元通過(guò)Net環(huán)境調(diào)用操作系統(tǒng),在操作系統(tǒng)下查找插件,。插件虛擬機(jī)運(yùn)行時(shí)包含在名為pluginvm core.dll的動(dòng)態(tài)鏈接庫(kù)中,,為插件提供面向操作系統(tǒng)和Net環(huán)境的基礎(chǔ)服務(wù)。具體包括:
?、傥募僮骷奥窂讲檎曳?wù),;
 ②唯一主機(jī)碼創(chuàng)建(包含CPU-網(wǎng)卡),,即密碼驗(yàn)證服務(wù),通過(guò)讀取主機(jī)唯一的CPU序列號(hào)以及網(wǎng)卡的序列號(hào),,按照相應(yīng)的公式計(jì)算出驗(yàn)證碼,,與軟件中存儲(chǔ)的密碼相匹配,保障了軟件安裝合法性,,可以有效防止盜版,;
 ③加密解密,;
?、苊嫦騑indow操作系統(tǒng)API的托管封裝;
?、萁忉屇K配置文件,,根據(jù)模塊配置文件創(chuàng)建各種子系統(tǒng)。
 插件管理器查找到所有的配置文件中涉及到的插件后,,確認(rèn)可用的插件然后加載,,插件管理器加載完畢后,等待插件執(zhí)行器調(diào)用,。
 加載配置文件中將插件加載至插件管理器中,,由插件管理器統(tǒng)一管理加載的插件,并且將參數(shù)存儲(chǔ)至上下文管理器中,。上下文管理器提供對(duì)運(yùn)行插件虛擬機(jī)傳入的參數(shù)的封裝,,具體為一個(gè)面向?qū)ο蟮墓1恚?br /> ?。?)路由規(guī)則器根據(jù)插件執(zhí)行器調(diào)用插件后返回的結(jié)果或者根據(jù)加載單元提供的插件調(diào)用入口點(diǎn)確定插件執(zhí)行器需要執(zhí)行的插件編碼,并將該插件編碼傳遞給插件執(zhí)行器,;
?。?)插件執(zhí)行器接收路由規(guī)則器傳入的插件編碼,并從上下文管理器中獲得和本插件相關(guān)的參數(shù),;插件執(zhí)行器通過(guò)調(diào)用插件的約定方法并在調(diào)用時(shí)傳入從上下文管理器中獲得的參數(shù)來(lái)執(zhí)行插件,;
 將插件執(zhí)行過(guò)程中產(chǎn)生的數(shù)據(jù),存儲(chǔ)至共享數(shù)據(jù)堆中,,以供其他插件調(diào)用,。不同的插件可以將需要共享的數(shù)據(jù)放入共享數(shù)據(jù)堆中,插件虛擬機(jī)退出后共享數(shù)據(jù)堆可以自動(dòng)回收,。插件虛擬機(jī)維護(hù)共享數(shù)據(jù)堆中的數(shù)據(jù)的引用計(jì)數(shù),,當(dāng)數(shù)據(jù)引用計(jì)數(shù)為0的時(shí)候,共享數(shù)據(jù)將被自動(dòng)回收,。

 


插件執(zhí)行器負(fù)責(zé)從插件管理器中取出插件,,調(diào)用插件的特定方法Excute Plugin(PluginParam param)執(zhí)行插件;插件執(zhí)行器還負(fù)責(zé)處理插件異常信息,,如果遇到需要退出插件虛擬機(jī)的異常則直接調(diào)用插件虛擬機(jī)提供的退出函數(shù)ExitVm(Excption ecode)退出插件虛擬機(jī),。
 插件執(zhí)行器執(zhí)行完畢當(dāng)前插件后,還將當(dāng)前插件運(yùn)行完畢后返回的數(shù)據(jù)轉(zhuǎn)發(fā)至路由規(guī)則器中,,路由規(guī)則器根據(jù)插件執(zhí)行器返回的數(shù)據(jù)確定下一個(gè)需要執(zhí)行的插件的編碼,,并將插件編碼發(fā)送給插件執(zhí)行器,由插件執(zhí)行器運(yùn)行編碼對(duì)應(yīng)的插件,。
?。?)插件間可以通過(guò)插件虛擬機(jī)發(fā)送/接收消息。消息管理器包括消息隊(duì)列和消息派發(fā)器,,消息隊(duì)列接收消息,,并將其加入隊(duì)列,消息派發(fā)器按照隊(duì)列順序?qū)⑾⑴砂l(fā)給該消息所指定的插件,。消息中攜帶有需要執(zhí)行插件的信息,,消息管理器向插件管理器中的需要執(zhí)行的插件(若插件管理器中沒(méi)有加載所述的需要執(zhí)行的插件,則由插件管理器重新加載,,然后由插件執(zhí)行器執(zhí)行,。具體過(guò)程與初始加載插件時(shí)一致:由加載單元通過(guò)Net環(huán)境調(diào)用操作系統(tǒng),在操作系統(tǒng)下查找插件,。加載后的插件存儲(chǔ)至插件管理器中,,參數(shù)存儲(chǔ)至參數(shù)封裝單元中,然后由插件執(zhí)行器可以調(diào)用)派發(fā)該消息,,由插件管理器將該插件的編碼傳給插件執(zhí)行器,,最終插件執(zhí)行器根據(jù)該插件的編碼執(zhí)行該插件,。消息管理器的功能還有:消息隊(duì)列,負(fù)責(zé)存儲(chǔ)插件發(fā)送過(guò)來(lái)的消息,,并按照先后順序排成隊(duì)列的形式,。其中,插件需要實(shí)現(xiàn)AcceptRunMsg(RunMessage msg)接口接收插件管理器發(fā)送的消息,。
 目前,,隨著軟件行業(yè)的發(fā)展,其規(guī)模和復(fù)雜性提高,、使用范圍擴(kuò)大,,為了便于維護(hù)和管理,軟件開(kāi)發(fā)過(guò)程中逐漸出現(xiàn)對(duì)開(kāi)發(fā)方法的研究,、軟件管理的規(guī)范,、體系結(jié)構(gòu)的分離[12]。在開(kāi)發(fā)信息系統(tǒng)軟件過(guò)程中,,通常會(huì)將一個(gè)系統(tǒng)分為幾個(gè)相互獨(dú)立的功能模塊,,由不同人員來(lái)開(kāi)發(fā),最后再根據(jù)用戶的操作邏輯和業(yè)務(wù)邏輯組織起來(lái),。通過(guò)對(duì)插件虛擬機(jī)的研究,,實(shí)現(xiàn)了縮減業(yè)務(wù)邏輯部分代碼,首次提出用配置文件的描述語(yǔ)言代替業(yè)務(wù)邏輯部分的代碼,;其次,,以“插件”的形式來(lái)實(shí)現(xiàn)信息系統(tǒng)中程序的復(fù)用,同一“插件”可以被多個(gè)模塊的配置文件使用,。由此,,可以降低軟件開(kāi)發(fā)成本,,縮短周期,,增強(qiáng)可讀性,更加便于維護(hù)和管理,。
參考文獻(xiàn)
[1] 劉樹(shù)軍,,王炳同,李莉.基于WS-BPEL的Web服務(wù)組合技術(shù)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,,2012(8):206-209.
[2] 陳建飛,,申晨光,韓偉力.面向WS-BPEL的訪問(wèn)控制策略合成研究[J].計(jì)算機(jī)應(yīng)用與軟件,,2012,,29(3):195-197.
[3] 劉菲軍,陳俊杰,,郭濤,,等.云計(jì)算下虛擬機(jī)部署機(jī)制的研究[J].電腦開(kāi)發(fā)與應(yīng)用,,2012(5):4-6.
[4] 鄧維,廖小飛,,金海.基于虛擬機(jī)的數(shù)據(jù)中心能耗管理機(jī)制[J].中興通訊技術(shù),,2012(4):15-18.
[5] Wu Dongyao, Wei Jun,, Gao Chushu,, et al. Event-driven process execution model for virtual machine[J]. Computer Integrated Manufacturing Systems, 2012(8): 1675-1685.
[6] 詹姆斯,,瑞維著,,安虹,等譯.虛擬機(jī):系統(tǒng)與進(jìn)程的通用平臺(tái)第二版[M].北京:機(jī)械工業(yè)出版社,,2009.
[7] EMOTO,, MASAHIKO, YOSHIDA,, et al. Application of virtual machine technology to real-time mapping of Thomson scattering data to flux coordinates for the LHD[J]. Fusion Engineering and Design,, 2012(87): 2076-2080.
[8] 劉春泉,周紹梅,,劉小東.COM在軟件復(fù)用中的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,,2005(5):28-30.
[9] 潘恒.中間件技術(shù)——COM組件的探究[J].科協(xié)論壇:下半月,2011(4):61-62.
[10] 喬波.新一代EJB組件技術(shù)研究[J].科技信息,,2009(5):62-63.
[11] 劉秋梅,,鄭耿忠.EJB組件技術(shù)在數(shù)字參考咨詢系統(tǒng)中的應(yīng)用[J].圖書(shū)館學(xué)刊,2010(12):85-87.
[12] 夏明忠,,夏以軒,,李兵元.軟件模塊化設(shè)計(jì)和模塊化管理[J].中國(guó)信息界,2012(11):56-59.

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。