景月娟,彭寒,劉洲洲,張曉麗
(西安航空學(xué)院計(jì)算機(jī)學(xué)院,陜西西安 710077)
嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)廣泛應(yīng)用于當(dāng)代航空電子系統(tǒng),是支撐航電系統(tǒng)向綜合化、集成化方向發(fā)展的基礎(chǔ)平臺(tái)軟件,如國(guó)產(chǎn)的天脈2(ACoreOS)[1]以及美國(guó)WindRiver 公司推出的VxWorks AE653 操作系統(tǒng)[2]。嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)提供了高安全性、高可靠性的多分區(qū)調(diào)度和管理機(jī)制,確保應(yīng)用系統(tǒng)的安全運(yùn)行。
非易失性隨機(jī)訪問(wèn)存儲(chǔ)器(Non-Volatile Random Access Memory,NVRAM)是一種特殊的存儲(chǔ)介質(zhì),其兼有內(nèi)存的高速讀寫(xiě)特性和在掉電情況下仍然保持?jǐn)?shù)據(jù)完整不丟失的特點(diǎn)[3]。
該文研究了一種NVRAM 的管理機(jī)制,規(guī)避了存儲(chǔ)器訪問(wèn)越界和沖突的風(fēng)險(xiǎn),有效提高了系統(tǒng)的安全性與可靠性。
在嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)中,NVRAM 能滿足實(shí)時(shí)系統(tǒng)的實(shí)時(shí)性訪問(wèn)以及從持久化存儲(chǔ)的數(shù)據(jù)快速恢復(fù)的要求,但是NVRAM 提供的原生訪問(wèn)接口通過(guò)絕對(duì)物理存儲(chǔ)地址進(jìn)行數(shù)據(jù)讀寫(xiě),將地址完全暴露給接口調(diào)用者。上層應(yīng)用程序直接以絕對(duì)地址訪問(wèn)NVRAM,存在存儲(chǔ)器訪問(wèn)越界的風(fēng)險(xiǎn),進(jìn)而會(huì)造成軟件運(yùn)行錯(cuò)誤甚至系統(tǒng)失效。
在嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)平臺(tái)下,各分區(qū)在訪問(wèn)NVRAM 時(shí),每個(gè)分區(qū)必須確認(rèn)其與他分區(qū)之間是否存在地址沖突。
常規(guī)的NVRAM 訪問(wèn)機(jī)制是通過(guò)一個(gè)公共資源配置表(如圖1 所示),實(shí)現(xiàn)了各分區(qū)可訪問(wèn)的NVRAM 地址段的全局定義,應(yīng)用層可按照配置分配的地址段進(jìn)行NVRAM 的讀寫(xiě),即直接訪問(wèn)對(duì)應(yīng)的NVRAM 絕對(duì)物理地址。
圖1 常規(guī)多分區(qū)訪問(wèn)NVRAM機(jī)制示意圖
常規(guī)多分區(qū)NVRAM 訪問(wèn)機(jī)制依賴公共資源配置的正確性和NVRAM 訪問(wèn)的合規(guī)性,實(shí)際應(yīng)用中存在以下隱患:
1)當(dāng)分區(qū)內(nèi)存在多個(gè)應(yīng)用訪問(wèn)NVRAM 時(shí),公共資源配置表和操作系統(tǒng)未提供分區(qū)訪問(wèn)NVRAM保護(hù)機(jī)制,如果訪問(wèn)地址之間存在地址重疊,將引發(fā)資源訪問(wèn)沖突,導(dǎo)致不可預(yù)料的錯(cuò)誤;
2)如果在應(yīng)用層增加相關(guān)設(shè)計(jì)避免訪問(wèn)沖突,會(huì)增加應(yīng)用層軟件的復(fù)雜度。
為了解決上述問(wèn)題,提出一種NVRAM 管理機(jī)制,實(shí)現(xiàn)了各分區(qū)應(yīng)用對(duì)NVRAM 的互斥訪問(wèn)和越界保護(hù)。
為了解決以絕對(duì)地址訪問(wèn)NVRAM 時(shí)產(chǎn)生的問(wèn)題,在常規(guī)NVRAM 訪問(wèn)機(jī)制基礎(chǔ)上,增加了NVRAM代理管理層[4-5],如圖2 所示,NVRAM 代理管理層的主要職責(zé)是對(duì)訪問(wèn)的地址進(jìn)行校驗(yàn),同時(shí)對(duì)可訪問(wèn)的地址空間進(jìn)行有效性判斷。
圖2 增加NVRAM管理機(jī)制后的示意圖
圖3 為嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)NVRAM 管理系統(tǒng)結(jié)構(gòu),即在模塊支持層之上增加NVRAM 代理管理模塊,以隔離應(yīng)用層對(duì)NVRAM 物理地址的直接訪問(wèn),由NVRAM 管理模塊統(tǒng)一管理NVRAM 存儲(chǔ)空間的分配,透明化NVRAM 的管理機(jī)制,應(yīng)用層不再關(guān)心存儲(chǔ)器的空間管理[6]。
圖3 嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng)NVRAM管理系統(tǒng)結(jié)構(gòu)
NVRAM 管理層負(fù)責(zé)存儲(chǔ)器的管理[7]。NVRAM是一個(gè)獨(dú)立的存儲(chǔ)設(shè)備,具有連續(xù)的存儲(chǔ)空間,NVRAM 管理層可將其分成多塊存儲(chǔ)區(qū),每塊存儲(chǔ)區(qū)域以字符串表示其存儲(chǔ)區(qū)標(biāo)識(shí),如圖4 所示,存儲(chǔ)區(qū)標(biāo)識(shí)默認(rèn)使用初次注冊(cè)時(shí)定義的字符串名稱,字符串名稱需定義最大長(zhǎng)度SIZE,存儲(chǔ)區(qū)標(biāo)識(shí)存儲(chǔ)于注冊(cè)的NVRAM 存儲(chǔ)空間地址起始位置。
圖4 NVRAM空間存儲(chǔ)說(shuō)明
NVRAM 管理層通過(guò)配置信息實(shí)現(xiàn)存儲(chǔ)器的管理。配置信息通過(guò)應(yīng)用層的注冊(cè)申請(qǐng)生成[8]。配置參數(shù)如表1 所示。
表1 配置參數(shù)
如表1 所示,id 是存儲(chǔ)區(qū)訪問(wèn)的唯一標(biāo)識(shí),id 在進(jìn)行注冊(cè)訪問(wèn)時(shí)自動(dòng)生成;nameSIZE 是存儲(chǔ)區(qū)的字符串標(biāo)識(shí);length 是存儲(chǔ)區(qū)的可用最大長(zhǎng)度;addr 是存儲(chǔ)區(qū)的絕對(duì)訪問(wèn)地址,該地址應(yīng)用層不可見(jiàn)。
除此之外,根據(jù)硬件平臺(tái)中NVRAM 的實(shí)際大小,需要預(yù)先配置其他參數(shù):NVRAM 的最大空間MAX_NVRAM_ADDR、系統(tǒng)最大支持訪問(wèn)存儲(chǔ)區(qū)個(gè)數(shù)MAX_NVRAM_SUM 及每個(gè)訪問(wèn)存儲(chǔ)區(qū)對(duì)應(yīng)的最大空間MAX_NVRAM_LENGTH
NVRAM 管理模塊定義了注冊(cè)接口、讀取接口和寫(xiě)入接口,分別用于支持NVRAM 的注冊(cè)、讀取和寫(xiě)入服務(wù)[9]。各分區(qū)應(yīng)用通過(guò)調(diào)用這些接口實(shí)現(xiàn)對(duì)NVRAM 的互斥訪問(wèn)[10]。具體的接口定義如下:
1)注冊(cè)接口
int CreatNvRam(int*id,int length,char*name);
功能:創(chuàng)建并申請(qǐng)NVRAM 空間;
返回值定義:
0:注冊(cè)成功;
1:名稱過(guò)長(zhǎng);
表3、4、5分別為Z、Y、X方向的前3階模態(tài)頻率和阻尼統(tǒng)計(jì)表,圖6、7、8分別為Z、Y、X方向的1階模態(tài)振型。因?yàn)槟B(tài)振型具有較強(qiáng)的方向性,單方向的模態(tài)頻率、振型與仿真整體模態(tài)頻率、振型的階數(shù)并不一定相等。
2:超過(guò)最大長(zhǎng)度限制;
3:存儲(chǔ)區(qū)個(gè)數(shù)超界;
4:NVRAM 空間不足;
5:注冊(cè)失敗。
2)讀取接口
int ReadNvRam(char*pbuf,int id,int length);
功能:在id 處讀取長(zhǎng)度為length 的內(nèi)容到pbuf;
0:讀取成功;
1:無(wú)效的id;
2:訪問(wèn)越界;
3:指針為空。
3)寫(xiě)入接口
int WriteNvRam(char*pbuf,int id,int length);
功能:從pbuf中取length 長(zhǎng)度的內(nèi)容寫(xiě)在id 處;
返回值定義:
0:寫(xiě)入成功;
1:無(wú)效的id;
2:訪問(wèn)越界;
3:指針為空。
開(kāi)機(jī)初次使用NVRAM 存儲(chǔ)區(qū)時(shí),需要?jiǎng)?chuàng)建NVRAM 配置參數(shù)表[11]。配置表的內(nèi)容為注冊(cè)存儲(chǔ)區(qū)時(shí)生成的配置參數(shù),配置參數(shù)內(nèi)容如表1 所示。注冊(cè)接口、讀取接口和寫(xiě)入接口的具體算法實(shí)現(xiàn)流程分別如圖5-7 所示。
圖5 注冊(cè)接口算法流程
由圖5 可知,在注冊(cè)接口的實(shí)現(xiàn)算法中,除了要檢查輸入?yún)?shù)(即注冊(cè)標(biāo)識(shí)和注冊(cè)長(zhǎng)度)的有效性,還需要判斷待注冊(cè)存儲(chǔ)區(qū)是否已經(jīng)注冊(cè)。唯一的注冊(cè)標(biāo)識(shí)和禁止重復(fù)注冊(cè)同一塊存儲(chǔ)區(qū)的機(jī)制確保了后續(xù)訪問(wèn)注冊(cè)存儲(chǔ)區(qū)的安全性[12]。
由圖6 和圖7 可知,在訪問(wèn)存儲(chǔ)區(qū)時(shí),通過(guò)有效的存儲(chǔ)區(qū)id 和存儲(chǔ)區(qū)長(zhǎng)度,準(zhǔn)確地檢索、定位到對(duì)應(yīng)的存儲(chǔ)區(qū),將存儲(chǔ)區(qū)的數(shù)據(jù)讀取到緩沖區(qū)或者把緩沖區(qū)的數(shù)據(jù)寫(xiě)入到存儲(chǔ)區(qū)中[13]。
圖6 讀取接口算法流程
圖7 寫(xiě)入接口算法流程
在整個(gè)NVRAM 管理機(jī)制算法中,不同應(yīng)用使用NVRAM 時(shí)必須先注冊(cè)再訪問(wèn),注冊(cè)的存儲(chǔ)區(qū)不可重疊[14],不同的存儲(chǔ)區(qū)通過(guò)不同標(biāo)識(shí)區(qū)分,訪問(wèn)存儲(chǔ)區(qū)時(shí)利用id 在配置表中進(jìn)行檢索存儲(chǔ)區(qū)地址[15],準(zhǔn)確定位后再訪問(wèn)。因此,該機(jī)制為不同分區(qū)應(yīng)用的訪問(wèn)提供了有效的保護(hù),避免了訪問(wèn)沖突[16],也消除了訪問(wèn)越界的風(fēng)險(xiǎn)。
該管理機(jī)制在某個(gè)機(jī)載計(jì)算機(jī)系統(tǒng)進(jìn)行了測(cè)試,其軟件運(yùn)行平臺(tái)為天脈2 操作系統(tǒng),系統(tǒng)配置了三個(gè)應(yīng)用分區(qū),每個(gè)分區(qū)均配置了多個(gè)實(shí)時(shí)任務(wù),均涉及NVRAM 的訪問(wèn)。
在該機(jī)載系統(tǒng)的配置過(guò)程中,采用了該文提出的NVRAM 的管理機(jī)制,具體的系統(tǒng)配置定義如表2所示。同時(shí),與不采用該機(jī)制時(shí)的使用效果進(jìn)行了對(duì)比,表3 為采用NVRAM 管理機(jī)制前后配置時(shí)間和維護(hù)時(shí)間的對(duì)比情況說(shuō)明。
表2 NVRAM系統(tǒng)配置
表3 NVRAM管理機(jī)制應(yīng)用前后情況對(duì)比
由表3 可以看出,不采用NVRAM 管理機(jī)制時(shí),雖配置簡(jiǎn)單,但需要大量的維護(hù)時(shí)間,且在系統(tǒng)集成后存在一定概率的出錯(cuò)風(fēng)險(xiǎn);相比之下,采用NVRAM 管理機(jī)制后,配置時(shí)間增加了一倍,但應(yīng)用系統(tǒng)需要維護(hù)的時(shí)間明顯減少[17]。
因此,對(duì)軟件開(kāi)發(fā)設(shè)計(jì)人員來(lái)說(shuō),無(wú)需耗費(fèi)過(guò)多的精力考慮非易失存儲(chǔ)器的管理問(wèn)題,一次配置完成后,后期不再需要進(jìn)行系統(tǒng)維護(hù),解決了非易失存儲(chǔ)器訪問(wèn)出現(xiàn)問(wèn)題時(shí)難以定位和維護(hù)的頑疾。
對(duì)于嵌入式實(shí)時(shí)多分區(qū)操作系統(tǒng),引入具有高速讀寫(xiě)和非易失性的NVRAM,可以快速存儲(chǔ)應(yīng)用程序數(shù)據(jù),應(yīng)用軟件采用原生訪問(wèn)接口NVRAM,存在嚴(yán)重安全性隱患。該文提出的一種新NVRAM 管理機(jī)制,實(shí)現(xiàn)了應(yīng)用層設(shè)計(jì)與底層NVRAM 管理間的隔離,解決了多分區(qū)對(duì)NVRAM 的訪問(wèn)沖突,消除了訪問(wèn)過(guò)程中數(shù)據(jù)越界的風(fēng)險(xiǎn),提高了多分區(qū)應(yīng)用的集成效率和軟件的健壯性。