摘要:本文在嵌入式軟件設(shè)計的基礎(chǔ)上,提出了一種松耦合設(shè)計的方法。通過嵌入式軟件系統(tǒng)地橫向松耦合,實現(xiàn)了嵌入式系統(tǒng)中各個子模塊可以單獨編譯,單獨運行,模塊間故障隔離以及系統(tǒng)運行時動態(tài)升級的目的;通過嵌入式軟件系統(tǒng)的縱向松耦合設(shè)計,實現(xiàn)了嵌入式系統(tǒng)跨操作系統(tǒng),跨硬件平臺運行的需求。通過實驗結(jié)果以及在數(shù)據(jù)通信設(shè)備中的應(yīng)用表明,松耦合嵌入式系統(tǒng)設(shè)計具有良好的可擴展性和可移植性,非常適合現(xiàn)代通信系統(tǒng)的要求。
關(guān)鍵詞:嵌入式系統(tǒng);松耦合設(shè)計;可移植性
中圖分類號:TP315 文獻標識碼:A 文章編號:1007-9599 (2012) 24-0168-02
1 引言
松耦合就是降低系統(tǒng)部件和部件之間的偶合性,也就是降低部件的依賴性,使得部件之間相對獨立,這樣對于日后系統(tǒng)的維護及擴展都是很有好處的。在應(yīng)用軟件開發(fā)中,松耦合設(shè)計模塊得到了廣泛的應(yīng)用,并且取得了比較大的效果,而在嵌入式開發(fā)中,應(yīng)用卻比較少見。在一個嵌入式軟件系統(tǒng)中,由于模塊與模塊之間相互調(diào)用函數(shù),共享全局變量等,造成了模塊之間緊耦合的關(guān)系,一個模塊出現(xiàn)故障時,會造成其他模塊甚至整個軟件系統(tǒng)的崩潰。如果各個模塊之間是松耦合的關(guān)系,相互隔離,能夠單獨進行編譯,安裝,出現(xiàn)上述問題的可能性將會降低。更重要的是,在保持模塊間松耦合關(guān)系的基礎(chǔ)上,能夠?qū)崿F(xiàn)軟件運行時對單個模塊的升級而不影響整個系統(tǒng)。
與此同時,嵌入式軟件一般都與操作系統(tǒng)以及硬件平臺關(guān)系緊密,系統(tǒng)跨平臺移植一直是一項比較復(fù)雜的工作。特別在通信產(chǎn)品的嵌入式軟件開發(fā)中,對于一些公共的協(xié)議模塊,比如路由協(xié)議(OSPF,BGP),應(yīng)用協(xié)議(DHCP,F(xiàn)TP),這些在所有的產(chǎn)品中都是通用,而各個通信產(chǎn)品所用的硬件平臺和嵌入式操作系統(tǒng)是不一樣的,使這些模塊成為一個平臺,實現(xiàn)各個產(chǎn)品與平臺的無縫銜接,具有較高可移植性,是嵌入式軟件系統(tǒng)縱向松耦合設(shè)計的目標。
2 松耦合設(shè)計的方法
圖1為整個系統(tǒng)的架構(gòu)思想,對于松耦合的主要設(shè)計思想為上下分離,左右分開。該系統(tǒng)總共分為三層。
層1:主要是各個業(yè)務(wù)模塊,每個業(yè)務(wù)模塊可以是一個功能模塊,也可以是一個獨立的協(xié)議模塊,這些模塊就像刀片服務(wù)器一樣,能實現(xiàn)即插即用,具有高可擴展性。
層2:消息代理器層,這是整個系統(tǒng)的基礎(chǔ),也是本文的核心思想,從圖中可以看出,它是連接業(yè)務(wù)模塊之間,以及業(yè)務(wù)模塊與操作系統(tǒng)的樞紐。
層3:也是最底層,包括操作系統(tǒng)和硬件,本文設(shè)計的嵌入式系統(tǒng)不包括這層,對于不同的硬件架構(gòu)的產(chǎn)品,這一層是不一樣的。
消息代理模塊是本設(shè)計的核心部件,它是連接模塊間以及軟件與操作系統(tǒng)以及硬件之間的橋梁。橫向松耦合通過它實現(xiàn)了模塊間通信,是星型通信模型的中心節(jié)點;縱向松耦合通過它實現(xiàn)了軟件與操作系統(tǒng)以及硬件的通信,實現(xiàn)了平臺無關(guān)性功能。
圖1 松耦合嵌入式軟件系統(tǒng)總體架構(gòu)
2.1 橫向松耦合設(shè)計
模塊和模塊之間相互隔離,每個模塊即一個任務(wù),有自己獨立的堆??臻g,它們之間不能相互調(diào)用函數(shù),也不能相互訪問其他任務(wù)的全局變量。模塊和模塊之間只能通過進程間通信方式進行通信。由于有很多個模塊同時存在,一般情況下,各個模塊之間的通信模型是網(wǎng)狀模型,如圖2所示,我們在這里使用了星型模型,通過設(shè)立了一個消息代理模塊作為各個模塊通信的中轉(zhuǎn)站,各個模塊只需要和消息代理模塊建立連接即可,由消息代理模塊完成消息的發(fā)送。
模塊和消息代理之間是C/S關(guān)系,業(yè)務(wù)模塊是客戶端,消息代理模塊是服務(wù)器端。它們之間的通信方式包括兩種類型,一種是直接消息通信,另外一種是訂閱發(fā)布模型。 直接消息通信用于1對1的通信,而訂閱發(fā)布則用于多對1的通信,比如接口模塊檢測到網(wǎng)絡(luò)接口的Up/down狀態(tài)后,需要通知給多個模塊進行相應(yīng)處理。
圖2 星型通信模型
2.2 縱向松耦合設(shè)計
縱向耦合設(shè)計主要是為了解決嵌入式軟件在不同操作系統(tǒng)內(nèi)核和硬件平臺(商用芯片,網(wǎng)絡(luò)處理器)的可移植性。首先對于操作系統(tǒng),我們在這里主要考慮linux和vxworks。這兩個操作系統(tǒng)在任務(wù)管理和內(nèi)存管理方面相差比較多,如何做到軟件在這兩個系統(tǒng)間切換時候,修改工作量較??;而對于商用芯片,由于各個廠家芯片提供的API接口也是各不相同。如圖1所示,我們在消息代理器增加了兩個抽象層,一個是硬件抽象層,一個是平臺抽象層,這兩層都是兩個不同的任務(wù),它們和業(yè)務(wù)模塊之間通過消息代理器進行通信。
HAL:主要是對芯片的抽象,業(yè)務(wù)模塊有些信息需要寫入到芯片中,比如路由信息等。HAL層通過接收到業(yè)務(wù)模塊發(fā)來的路由信息,需要進行整合和適配到不同芯片,以實現(xiàn)跨芯片的無縫移植。
PAL:主要實現(xiàn)了內(nèi)存管理的適配,以及與內(nèi)核通信的適配,為不同內(nèi)核提供了不同的通信方式。業(yè)務(wù)模塊通過PAL層與內(nèi)核進行通信,獲取相關(guān)信息。
3 消息代理器
從上面介紹可以看出,整個松耦合系統(tǒng)設(shè)計的核心就是消息代理器,它完成了各個業(yè)務(wù)模塊之間的通信,同時也是連接底層操作系統(tǒng)內(nèi)核以及硬件的通道。消息代理器的設(shè)計主要分為三個部分。客戶端,服務(wù)器端,消息處理。各個部分的作用如下:
客戶端:業(yè)務(wù)模塊通過客戶端向服務(wù)器注冊,并且訂閱感興趣公共消息類型。
服務(wù)器端:服務(wù)器端偵聽各個業(yè)務(wù)模塊的注冊信息,并且維護各個客戶端的信息,并進行消息的發(fā)送與接受。
消息處理端:主要提供對服務(wù)器端和客戶端之間消息的封裝與解封裝。
消息代理器的工作過程如下:3.1 初始化過程,包括服務(wù)器端的初始化和客戶端的初始化,客戶端的初始化由各個業(yè)務(wù)模塊完成,每個業(yè)務(wù)模塊都初始化一個客戶端的實例。3.2 客戶端發(fā)起連接,服務(wù)器端收到連接后需要對連接成功的客戶端建立一個鏈表,用來保存客戶端信息,為后續(xù)通信做準備。3.3 客戶端與服務(wù)器端通信。通信由業(yè)務(wù)模塊發(fā)起,消息處理端進行消息的封裝,封裝完后,發(fā)送給服務(wù)期端,服務(wù)器端根據(jù)保存的客戶端鏈表來確認消息是從哪個客戶端發(fā)來的,然后進行對應(yīng)的回調(diào)處理。
圖3 消息代理器初始化過程
圖4 客戶端向服務(wù)器發(fā)起連接流程
4 總結(jié)與展望
通過將各個業(yè)務(wù)模塊設(shè)計成刀片式的應(yīng)用,并借助于消息代理器將業(yè)務(wù)模塊之間的通信模型改成星型模型,減少了模塊之間的連接關(guān)系。消息代理器 是本設(shè)計中最重要的組成部分,對整個框架起了基礎(chǔ)性的作用,其也可單獨作為一個獨立的模塊運行。
使用松耦合開發(fā)模式是開發(fā)一個高可移植性,高可擴展性系統(tǒng)的關(guān)鍵所在,本文在嵌入式軟件設(shè)計的基礎(chǔ)上,提出了模塊間的橫向松耦合以及軟件與嵌入式操作系統(tǒng),硬件平臺的縱向松耦合設(shè)計,并且進行了實現(xiàn)。適合應(yīng)用在通信產(chǎn)品的嵌入式軟件開發(fā)上,而需要把該系統(tǒng)運行在不同操作系統(tǒng)的產(chǎn)品上時,其更有用武之地。
參考文獻:
[1]李善平,劉文峰,王煥龍.Linux與嵌入式系統(tǒng)(2).北京:清華大學出版社,2006.3,208~211
[2]Kurt Wall等.GNU/Linux編程指南(2).張輝譯.北京:清華大學出版社,2002.6,372~390
[3]Neil Matthew,Richard Stones.Linux程序設(shè)計(3).陳健,宋健健等譯.北京:人民郵電出版社,2007.7,
[4]Barbara H. Liskov and Jeannette M. Wing, A Behavioral Notion of Subtyping, ACM Transactions on Programming Languages and Systems, November 1994.
[5]Barbara Liskov and Jeannette M. Wing, Family Values: A Behavioral Notion of Subtyping, CMU-CS-93-187 (supersedes CMU-CS-93-149 and CMU-CS-92-220)
[6]Boehm, Barry, Ellis Horowitz, Ray Madachy, Donald Reifer, Bradford Clark, Bert Steece, A. Winsor Brown, Sunita Chualani, and Chris Abts. Software Cost Estimation with Cocomo II. Upper Saddle River, NJ: Prentice Hall,January 2000
[作者簡介]曾紅李(1982- ),男,碩士,中興通訊股份有限責任公司,二級主任工程師,主要研究方向:數(shù)通產(chǎn)品軟件系統(tǒng)設(shè)計。