本發(fā)明涉及嵌入式網(wǎng)絡(luò)設(shè)備,特別涉及一種嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng)及方法。
背景技術(shù):嵌入式設(shè)備是一種資源稀缺平臺,一般用于實(shí)現(xiàn)單一的功能。但隨著硬件技術(shù)的革新,平臺化的、可二次開發(fā)的嵌入式網(wǎng)絡(luò)設(shè)備平臺已經(jīng)實(shí)現(xiàn),但在嵌入式設(shè)備開發(fā)中,一旦不限于單一功能,業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)目便會增加,數(shù)據(jù)的訪問便成了性能和資源的瓶頸。在嵌入式網(wǎng)絡(luò)設(shè)備中,受限于硬件資源,平臺多業(yè)務(wù)應(yīng)用間數(shù)據(jù)訪問的時效性、穩(wěn)定性很難得到保證,特別是上層應(yīng)用與底層硬件關(guān)系比較緊密的嵌入式網(wǎng)絡(luò)設(shè)備中,給嵌入式網(wǎng)絡(luò)設(shè)備的業(yè)務(wù)應(yīng)用系統(tǒng)開發(fā)添加了諸多負(fù)擔(dān)。
技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供一種嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng),其可以實(shí)現(xiàn)在嵌入式網(wǎng)絡(luò)設(shè)備上向多個業(yè)務(wù)應(yīng)用系統(tǒng)提供統(tǒng)一的虛擬化數(shù)據(jù)訪問服務(wù)接口和方法,有效提高嵌入式網(wǎng)絡(luò)設(shè)備數(shù)據(jù)存取的一致性和時效性,有助于提升嵌入式網(wǎng)絡(luò)設(shè)備數(shù)據(jù)服務(wù)的可擴(kuò)展性。本發(fā)明的另一目的在于,利用上述系統(tǒng)在嵌入式網(wǎng)絡(luò)設(shè)備上向多個業(yè)務(wù)應(yīng)用系統(tǒng)提供統(tǒng)一的虛擬化數(shù)據(jù)訪問方法。為了達(dá)到上述第一個目的,本發(fā)明采用以下技術(shù)方案:嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng),包括數(shù)據(jù)存儲子系統(tǒng)、數(shù)據(jù)服務(wù)子系統(tǒng)和數(shù)據(jù)業(yè)務(wù)接口,所述數(shù)據(jù)業(yè)務(wù)接口通過數(shù)據(jù)服務(wù)子系統(tǒng)與所述數(shù)據(jù)存儲子系統(tǒng)連接;所述數(shù)據(jù)存儲子系統(tǒng)位于所述虛擬化數(shù)據(jù)訪問系統(tǒng)的底層,所述數(shù)據(jù)業(yè)務(wù)接口位于所述虛擬化數(shù)據(jù)訪問系統(tǒng)的頂層;所述數(shù)據(jù)業(yè)務(wù)接口包括相互連接的數(shù)據(jù)封裝與解釋模塊和服務(wù)調(diào)用接口模塊;所述數(shù)據(jù)封裝與解釋模塊接收業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)服務(wù)請求,按照通信報文結(jié)構(gòu)封裝數(shù)據(jù);所述數(shù)據(jù)服務(wù)子系統(tǒng)包括數(shù)據(jù)服務(wù)適配器、數(shù)據(jù)服務(wù)日志模塊和數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊,所述數(shù)據(jù)服務(wù)適配器、數(shù)據(jù)服務(wù)日志模塊和數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊兩兩相互連接;所述數(shù)據(jù)存儲子系統(tǒng)包括相互連接的數(shù)據(jù)接口模塊與數(shù)據(jù)存儲模塊;所述數(shù)據(jù)業(yè)務(wù)接口中的服務(wù)調(diào)用接口模塊與所述數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)適配器連接,所述數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊與所述數(shù)據(jù)存儲子系統(tǒng)的數(shù)據(jù)接口模塊連接。優(yōu)選的,所述數(shù)據(jù)服務(wù)子系統(tǒng)中數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊包含若干個業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊。更進(jìn)一步的,所述業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊在虛擬化數(shù)據(jù)訪問系統(tǒng)啟動時以模塊化的形態(tài)靜態(tài)方式加載或在虛擬化數(shù)據(jù)訪問系統(tǒng)運(yùn)行階段以動態(tài)方式加載。更進(jìn)一步的,所述通信報文依次由系統(tǒng)報頭、模塊報頭和模塊數(shù)據(jù)三個部分組成;所述系統(tǒng)報頭依次由模塊標(biāo)識、狀態(tài)碼、保留字段和報文總長度組成;所述模塊報頭依次由模塊版本號、操作號、保留字段和模塊數(shù)據(jù)類型標(biāo)識組成,所述模塊數(shù)據(jù)中包含了讀取或?qū)懭氲膶?shí)際數(shù)據(jù)。更進(jìn)一步的,所述數(shù)據(jù)存儲子系統(tǒng)中的數(shù)據(jù)存儲模塊包含若干個數(shù)據(jù)容器,所述數(shù)據(jù)容器與所述業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊一一對應(yīng),所述數(shù)據(jù)容器由若干個數(shù)據(jù)存儲單元組成,所述數(shù)據(jù)存儲單元分為正在使用的數(shù)據(jù)存儲單元和空閑的數(shù)據(jù)存儲單元,所述正在使用的數(shù)據(jù)存儲單元通過數(shù)據(jù)鏈接表方式組成工作鏈表,所述空閑的數(shù)據(jù)存儲單元通過數(shù)據(jù)鏈表方式組成空閑鏈表。更進(jìn)一步的,所述數(shù)據(jù)存儲單元包括索引號和鍵值,所述索引號為由模塊標(biāo)識和模塊數(shù)據(jù)類型通過哈希函數(shù)計算得到的存儲數(shù)據(jù)的索引序號,所述鍵值用于存儲應(yīng)用數(shù)據(jù)。為了達(dá)到上述第二個目的,本發(fā)明采用以下技術(shù)方案:嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問方法,包括以下步驟:(a)啟動虛擬化數(shù)據(jù)訪問系統(tǒng);(b)數(shù)據(jù)業(yè)務(wù)接口接收來自業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)服務(wù)請求,并由數(shù)據(jù)封裝與解釋模塊按照通信報文結(jié)構(gòu)對來自業(yè)務(wù)應(yīng)用系統(tǒng)的服務(wù)請求進(jìn)行封裝,再由服務(wù)調(diào)用接口模塊將通信報文傳送給數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)適配器處理;(c)數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)適配器校驗(yàn)通信報文的系統(tǒng)報頭是否正確;若校驗(yàn)正確,則解析出通信報文的模塊報頭,然后按照通信報文的模塊報頭,將通信報文交由數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊中相應(yīng)的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊處理;最后由業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊傳送給數(shù)據(jù)存儲子系統(tǒng)進(jìn)行處理;其中數(shù)據(jù)服務(wù)日志模塊記錄操作和運(yùn)行信息;(d)數(shù)據(jù)存儲子系統(tǒng)的數(shù)據(jù)接口對通信報文的模塊數(shù)據(jù)格式進(jìn)行校驗(yàn);若校驗(yàn)正確,則將通信報文傳遞給數(shù)據(jù)存儲模塊,數(shù)據(jù)存儲模塊根據(jù)通信報文的模塊標(biāo)識,選擇對應(yīng)的數(shù)據(jù)容器,再計算出索引號;若業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)服務(wù)請求為寫入數(shù)據(jù)請求,則將通信報文中的模塊數(shù)據(jù)作為鍵值,與索引號一起寫入到對應(yīng)的數(shù)據(jù)容器中,然后數(shù)據(jù)存儲子系統(tǒng)將寫入結(jié)果返回給數(shù)據(jù)服務(wù)子系統(tǒng);若業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)服務(wù)請求為讀取數(shù)據(jù)請求,則根據(jù)索引號,在對應(yīng)數(shù)據(jù)容器中找到對應(yīng)的鍵值,然后將鍵值復(fù)制到通信報文的模塊數(shù)據(jù)中,將通信報文與讀取結(jié)果狀態(tài)一起返回給數(shù)據(jù)服務(wù)子系統(tǒng);(e)數(shù)據(jù)服務(wù)子系統(tǒng)的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊將結(jié)果返回給數(shù)據(jù)服務(wù)適配器;(f)數(shù)據(jù)服務(wù)適配器將返回執(zhí)行結(jié)果傳送給數(shù)據(jù)業(yè)務(wù)接口;數(shù)據(jù)業(yè)務(wù)接口的服務(wù)調(diào)用接口模塊接收返回結(jié)果,并由數(shù)據(jù)封裝與解釋模塊對返回結(jié)果進(jìn)行解釋,將解釋后的數(shù)據(jù)返回給業(yè)務(wù)應(yīng)用系統(tǒng);優(yōu)選的,所述步驟(a)中,所述虛擬化數(shù)據(jù)訪問系統(tǒng)的啟動包括如下操作:首先初始化數(shù)據(jù)存儲模塊的存儲區(qū)域,將數(shù)據(jù)存儲模塊初始化為若干大小不等的數(shù)據(jù)容器;接著數(shù)據(jù)服務(wù)子系統(tǒng)啟動數(shù)據(jù)服務(wù)日志模塊;然后將設(shè)置為靜態(tài)加載的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊以模塊化的形式進(jìn)行靜態(tài)加載。優(yōu)選的,所述步驟(d)中寫入結(jié)果為數(shù)據(jù)寫入成功或數(shù)據(jù)寫入失?。蛔x取結(jié)果為數(shù)據(jù)讀取成功或數(shù)據(jù)讀取失敗。優(yōu)選的,所述步驟(d)中,若業(yè)務(wù)應(yīng)用系統(tǒng)的服務(wù)請求為寫入數(shù)據(jù)請求時,則數(shù)據(jù)存儲模塊首先在對應(yīng)數(shù)據(jù)容器的空閑鏈表上取出一個大小合適的數(shù)據(jù)存儲單元,嘗試鎖定該數(shù)據(jù)存儲單元,加鎖成功后,將索引號和通信報文中的模塊數(shù)據(jù)存放到數(shù)據(jù)存儲單元中,并將該數(shù)據(jù)存儲單元從空閑鏈表更改到工作鏈表中;所述步驟(d)中,若業(yè)務(wù)應(yīng)用系統(tǒng)的服務(wù)請求為讀取數(shù)據(jù)請求時,則根據(jù)索引號,在對應(yīng)數(shù)據(jù)容器的工作鏈表上找到對應(yīng)鍵值的數(shù)據(jù)存儲單元;然后將該數(shù)據(jù)存儲單元的鍵值復(fù)制到通信報文的模塊數(shù)據(jù)中。所述步驟(d)中在讀取數(shù)據(jù)時,每個數(shù)據(jù)容器中有一個或多個進(jìn)程進(jìn)行讀??;所述步驟(d)中在寫入數(shù)據(jù)時,每個數(shù)據(jù)容器中有一個進(jìn)程進(jìn)行寫入,當(dāng)數(shù)據(jù)容器有寫入操作時,對該數(shù)據(jù)容器的整個數(shù)據(jù)塊加上寫鎖;當(dāng)寫入數(shù)據(jù)操作沖突無法執(zhí)行操作時,數(shù)據(jù)存儲子系統(tǒng)以數(shù)據(jù)寫入失敗狀態(tài)返回此次操作,并由數(shù)據(jù)服務(wù)子系統(tǒng)的服務(wù)日志模塊記錄下操作沖突情景,業(yè)務(wù)應(yīng)用系統(tǒng)收到返回結(jié)果后,可以從失敗狀態(tài)信息得知失敗原因,并由業(yè)務(wù)應(yīng)用系統(tǒng)決定是否再次執(zhí)行操作。本發(fā)明相對于現(xiàn)有技術(shù)具有如下的優(yōu)點(diǎn)及效果:(1)本發(fā)明系統(tǒng)在嵌入式網(wǎng)絡(luò)設(shè)備上向多個業(yè)務(wù)應(yīng)用系統(tǒng)提供了統(tǒng)一的虛擬化數(shù)據(jù)訪問服務(wù)接口和方法,避免了由嵌入式網(wǎng)絡(luò)設(shè)備上的各個業(yè)務(wù)應(yīng)用系統(tǒng)去設(shè)計實(shí)現(xiàn)各自公共數(shù)據(jù)的訪問系統(tǒng),減少了業(yè)務(wù)應(yīng)用系統(tǒng)開發(fā)者在嵌入式網(wǎng)絡(luò)設(shè)備數(shù)據(jù)訪問上的開發(fā)負(fù)擔(dān),有效提高了嵌入式網(wǎng)絡(luò)設(shè)備數(shù)據(jù)存取的一致性。(2)本發(fā)明嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng)中,每個業(yè)務(wù)應(yīng)用系統(tǒng)在虛擬化數(shù)據(jù)訪問系統(tǒng)中都有一個對應(yīng)的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊和數(shù)據(jù)容器,各個業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)訪問方法在虛擬化數(shù)據(jù)訪問系統(tǒng)中是相互隔離的,因此不同業(yè)務(wù)應(yīng)用系統(tǒng)在虛擬化數(shù)據(jù)訪問系統(tǒng)中互不干擾,不同業(yè)務(wù)應(yīng)用系統(tǒng)的開發(fā)者可按需在嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng)中添加各自的數(shù)據(jù)訪問方法來實(shí)現(xiàn),提高了本發(fā)明數(shù)據(jù)服務(wù)的可擴(kuò)展性。本發(fā)明數(shù)據(jù)存取的效率主要在于將數(shù)據(jù)保存在數(shù)據(jù)存儲子系統(tǒng)的數(shù)據(jù)存儲模塊中,存取數(shù)據(jù)方式較為簡潔,因此數(shù)據(jù)存取的效率較高,提高了本發(fā)明數(shù)據(jù)存取的時效性。(3)本發(fā)明系統(tǒng)中的數(shù)據(jù)容器在寫入數(shù)據(jù)時,每個數(shù)據(jù)容器只允許有一個進(jìn)程進(jìn)行寫入,當(dāng)數(shù)據(jù)容器有寫入操作時,對該數(shù)據(jù)容器的整個數(shù)據(jù)塊加上寫鎖;有效避免了其它進(jìn)程對同一數(shù)據(jù)塊的寫入導(dǎo)致數(shù)據(jù)沖突的現(xiàn)象。附圖說明圖1是本發(fā)明系統(tǒng)的組成結(jié)構(gòu)框圖。圖2是本發(fā)明系統(tǒng)中通信報文的組成結(jié)構(gòu)圖。具體實(shí)施方式下面結(jié)合實(shí)施例及附圖對本發(fā)明作進(jìn)一步詳細(xì)的描述,但本發(fā)明的實(shí)施方式不限于此。實(shí)施例如圖1所示,本實(shí)施例公開了一種嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng),包括數(shù)據(jù)存儲子系統(tǒng)、數(shù)據(jù)服務(wù)子系統(tǒng)和數(shù)據(jù)業(yè)務(wù)接口,數(shù)據(jù)業(yè)務(wù)接口通過數(shù)據(jù)服務(wù)子系統(tǒng)與數(shù)據(jù)存儲子系統(tǒng)連接;數(shù)據(jù)存儲子系統(tǒng)位于虛擬化數(shù)據(jù)訪問系統(tǒng)的底層,數(shù)據(jù)業(yè)務(wù)接口位于虛擬化數(shù)據(jù)訪問系統(tǒng)的頂層;數(shù)據(jù)業(yè)務(wù)接口是本實(shí)施例嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng)提供給業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)業(yè)務(wù)訪問接口;其中數(shù)據(jù)業(yè)務(wù)接口包括相互連接的數(shù)據(jù)封裝與解釋模塊和服務(wù)調(diào)用接口模塊;數(shù)據(jù)封裝與解釋模塊的一個作用是:接收業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)服務(wù)請求,按照通信報文結(jié)構(gòu)封裝數(shù)據(jù)服務(wù)請求,并將封裝后的通信報文交由服務(wù)調(diào)用模塊發(fā)送;另一個作用是:按照通信報文結(jié)構(gòu)解釋有服務(wù)調(diào)用接口模塊接收到的數(shù)據(jù),并發(fā)送給業(yè)務(wù)應(yīng)用系統(tǒng)。數(shù)據(jù)服務(wù)子系統(tǒng)由數(shù)據(jù)存儲子系統(tǒng)提供數(shù)據(jù)存儲支持,向數(shù)據(jù)業(yè)務(wù)接口提供數(shù)據(jù)服務(wù)的注冊、數(shù)據(jù)服務(wù)的實(shí)現(xiàn)和數(shù)據(jù)服務(wù)的監(jiān)控,其中數(shù)據(jù)服務(wù)子系統(tǒng)包括數(shù)據(jù)服務(wù)適配器、數(shù)據(jù)服務(wù)日志模塊和數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊,數(shù)據(jù)服務(wù)適配器、數(shù)據(jù)服務(wù)日志模塊和數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊兩兩相互連接;本實(shí)施例數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)適配器接受來自業(yè)務(wù)應(yīng)用系統(tǒng)通過數(shù)據(jù)業(yè)務(wù)接口的服務(wù)請求,根據(jù)數(shù)據(jù)業(yè)務(wù)接口的請求適配特定的服務(wù),不同的服務(wù)可以由服務(wù)名或服務(wù)標(biāo)識來唯一標(biāo)識,對應(yīng)于數(shù)據(jù)存儲子系統(tǒng)中不同的數(shù)據(jù)容器。本實(shí)施例數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)日志模塊統(tǒng)計各項(xiàng)應(yīng)用服務(wù)的運(yùn)行信息,包括了各類調(diào)試信息、運(yùn)行狀態(tài)信息等,主要用于在故障或升級設(shè)備時查看系統(tǒng)的運(yùn)行流水。本實(shí)施例數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊包含10個業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊,業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊是各個業(yè)務(wù)應(yīng)用系統(tǒng)在數(shù)據(jù)服務(wù)子系統(tǒng)中對各自數(shù)據(jù)訪問抽象接口的具體實(shí)現(xiàn),不同的上層業(yè)務(wù)應(yīng)用對應(yīng)不同的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊,每個業(yè)務(wù)應(yīng)用系統(tǒng)在虛擬化數(shù)據(jù)訪問系統(tǒng)中都有一個對應(yīng)的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊和數(shù)據(jù)容器;其中數(shù)據(jù)訪問抽象接口是指對數(shù)據(jù)訪問方式的抽象,對二進(jìn)制數(shù)據(jù)、字符串?dāng)?shù)據(jù)及其他類型數(shù)據(jù)的操作都被整理為一組操作方法,作為虛擬方法由各個業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊去繼承與實(shí)現(xiàn)。業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊按照不同的啟動方式設(shè)置,可在系統(tǒng)啟動時以模塊化的形態(tài)靜態(tài)方式加載,或在系統(tǒng)運(yùn)行階段以動態(tài)方式加載。數(shù)據(jù)存儲子系統(tǒng)包括相互連接的數(shù)據(jù)接口模塊與數(shù)據(jù)存儲模塊;其中數(shù)據(jù)接口模塊是數(shù)據(jù)存儲子系統(tǒng)提供的數(shù)據(jù)訪問接口;數(shù)據(jù)存儲模塊為業(yè)務(wù)應(yīng)用系統(tǒng)寫入的數(shù)據(jù)提供了存儲空間及存儲了業(yè)務(wù)應(yīng)用系統(tǒng)需要讀取的數(shù)據(jù)。其中本實(shí)施例數(shù)據(jù)存儲模塊中包含10個數(shù)據(jù)容器,每個數(shù)據(jù)容器由100個100字節(jié)到10K字節(jié)大小不等的數(shù)據(jù)存儲單元組成。數(shù)據(jù)存儲單元分為正在使用的數(shù)據(jù)存儲單元和空閑的數(shù)據(jù)存儲單元,正在使用的數(shù)據(jù)存儲單元通過數(shù)據(jù)鏈接表方式組成used_list鏈表,空閑的數(shù)據(jù)存儲單元通過數(shù)據(jù)鏈表方式方式組成free_list鏈表。初始都未使用時,全部數(shù)據(jù)存儲單元鏈接在free_list鏈表。數(shù)據(jù)存儲單元包括索引號和鍵值,索引號為由模塊標(biāo)識和模塊數(shù)據(jù)類型通過哈希函數(shù)計算得到的存儲數(shù)據(jù)的索引序號。本實(shí)施例數(shù)據(jù)業(yè)務(wù)接口中的服務(wù)調(diào)用接口模塊與數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)適配器連接,數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊與數(shù)據(jù)存儲子系統(tǒng)的數(shù)據(jù)接口模塊連接。本實(shí)施例嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng)的配置包括分配給數(shù)據(jù)存儲模塊內(nèi)存大小,確定數(shù)據(jù)容器及其數(shù)據(jù)存儲單元的大小與個數(shù),確定數(shù)據(jù)服務(wù)子系統(tǒng)加載哪些業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊以及數(shù)據(jù)服務(wù)日志模塊記錄哪些信息。如圖2所示,本實(shí)施例中通信報文依次由4個字節(jié)的系統(tǒng)報頭、4個字節(jié)的模塊報頭和模塊數(shù)據(jù)三個部分組成;系統(tǒng)報頭依次由4位的模塊標(biāo)識、4位的狀態(tài)碼、8位的保留字段和16位的報文總長度組成,其中模塊標(biāo)識唯一標(biāo)識了數(shù)據(jù)存儲子系統(tǒng)中的數(shù)據(jù)存儲模塊,狀態(tài)碼指明了請求調(diào)用的執(zhí)行情況,報文總長度為整個通信報文的長度;模塊報頭依次由4位的模塊版本號、4位的操作號、8位的保留字段和16位的模塊數(shù)據(jù)類型標(biāo)識組成,其中模塊版本號指明模塊的版本,便于模塊的升級,操作號指定了對存儲數(shù)據(jù)的執(zhí)行何種操作,如讀取或?qū)懭耄K數(shù)據(jù)類型標(biāo)識指定了數(shù)據(jù)存儲子系統(tǒng)中存儲的數(shù)據(jù)類型.模塊數(shù)據(jù)中包含了讀取或?qū)懭氲膶?shí)際數(shù)據(jù),其長度為0~65531字節(jié)。本實(shí)施例公開了一種基于上述嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問系統(tǒng)的嵌入式網(wǎng)絡(luò)設(shè)備的虛擬化數(shù)據(jù)訪問方法,包括如下步驟:(a)啟動虛擬化數(shù)據(jù)訪問系統(tǒng);首先初始化數(shù)據(jù)存儲模塊的存儲區(qū)域,將數(shù)據(jù)存儲模塊初始化為若干大小不等的數(shù)據(jù)容器;接著數(shù)據(jù)服務(wù)子系統(tǒng)啟動數(shù)據(jù)服務(wù)日志模塊;然后將設(shè)置為靜態(tài)加載的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊以模塊化的形式進(jìn)行靜態(tài)加載。(b)數(shù)據(jù)業(yè)務(wù)接口接收來自業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)服務(wù)請求,并由數(shù)據(jù)封裝與解釋模塊按照通信報文結(jié)構(gòu)對來自業(yè)務(wù)應(yīng)用系統(tǒng)的服務(wù)請求進(jìn)行封裝,再由服務(wù)調(diào)用接口模塊將通信報文傳送給數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)適配器處理;(c)數(shù)據(jù)服務(wù)子系統(tǒng)的數(shù)據(jù)服務(wù)適配器校驗(yàn)通信報文的系統(tǒng)報頭是否正確;若校驗(yàn)正確,則解析出通信報文的模塊報頭,然后按照通信報文的模塊報頭,將通信報文交由數(shù)據(jù)服務(wù)實(shí)現(xiàn)模塊中對應(yīng)的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊進(jìn)行數(shù)據(jù)合法性檢查和數(shù)據(jù)整理;最后由業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊傳送給數(shù)據(jù)存儲子系統(tǒng)進(jìn)行處理;其中數(shù)據(jù)服務(wù)日志模塊記錄操作和運(yùn)行信息;(d)數(shù)據(jù)存儲子系統(tǒng)的數(shù)據(jù)接口對通信報文的模塊數(shù)據(jù)格式進(jìn)行校驗(yàn);若校驗(yàn)正確,則將通信報文傳遞給數(shù)據(jù)存儲模塊,數(shù)據(jù)存儲模塊根據(jù)通信報文的模塊標(biāo)識,選擇對應(yīng)的數(shù)據(jù)容器,再計算出索引號;若業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)服務(wù)請求為寫入數(shù)據(jù)請求,則數(shù)據(jù)存儲模塊首先在對應(yīng)數(shù)據(jù)容器的空閑鏈表上取出一個大小合適的數(shù)據(jù)存儲單元,嘗試鎖定該數(shù)據(jù)存儲單元,加鎖成功后,將索引號和通信報文中的模塊數(shù)據(jù)存放到該數(shù)據(jù)存儲單元中,并將該數(shù)據(jù)存儲單元從空閑鏈表更改到工作鏈表中;然后數(shù)據(jù)存儲子系統(tǒng)將寫入結(jié)果返回給數(shù)據(jù)服務(wù)子系統(tǒng);其中寫入結(jié)果為數(shù)據(jù)寫入成功或數(shù)據(jù)寫入失敗。若業(yè)務(wù)應(yīng)用系統(tǒng)的數(shù)據(jù)服務(wù)請求為讀取數(shù)據(jù)請求,則根據(jù)索引號,在對應(yīng)數(shù)據(jù)容器的工作鏈表中找到對應(yīng)的數(shù)據(jù)存儲單元;然后將該數(shù)據(jù)存儲單元的鍵值復(fù)制到通信報文的模塊數(shù)據(jù)中,將通信報文與讀取結(jié)果一起返回給數(shù)據(jù)服務(wù)子系統(tǒng);其中讀取結(jié)果為數(shù)據(jù)讀取成功或數(shù)據(jù)讀取失敗。(e)數(shù)據(jù)服務(wù)子系統(tǒng)的業(yè)務(wù)應(yīng)用數(shù)據(jù)服務(wù)實(shí)現(xiàn)子模塊將結(jié)果返回給數(shù)據(jù)服務(wù)適配器;(f)數(shù)據(jù)服務(wù)適配器將返回執(zhí)行結(jié)果傳送給數(shù)據(jù)業(yè)務(wù)接口;數(shù)據(jù)業(yè)務(wù)接口的服務(wù)調(diào)用接口模塊接收返回結(jié)果,并由數(shù)據(jù)封裝與解釋模塊對返回結(jié)果進(jìn)行解釋,將解釋后的數(shù)據(jù)返回給業(yè)務(wù)應(yīng)用系統(tǒng)。本實(shí)施例步驟(d)中在讀取數(shù)據(jù)時,每個數(shù)據(jù)容器允許一個或多個進(jìn)程進(jìn)行讀取。本實(shí)施例步驟(d)中在寫入數(shù)據(jù)時,每個數(shù)據(jù)容器只允許有一個進(jìn)程進(jìn)行寫入,當(dāng)數(shù)據(jù)容器有寫入操作時,對該數(shù)據(jù)容器的整個數(shù)據(jù)塊加上寫鎖;當(dāng)寫入數(shù)據(jù)操作沖突無法執(zhí)行操作時,數(shù)據(jù)存儲子系統(tǒng)會以數(shù)據(jù)寫入失敗狀態(tài)返回此次操作,并由數(shù)據(jù)服務(wù)子系統(tǒng)的服務(wù)日志模塊記錄下操作沖突情景,業(yè)務(wù)應(yīng)用系統(tǒng)收到返回結(jié)果后,可以從失敗狀態(tài)信息得知失敗原因,并由業(yè)務(wù)應(yīng)用系統(tǒng)決定是否再次執(zhí)行操作。上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。