景月娟,彭寒,劉洲洲,張曉麗
(西安航空學院計算機學院,陜西西安 710077)
嵌入式實時多分區操作系統廣泛應用于當代航空電子系統,是支撐航電系統向綜合化、集成化方向發展的基礎平臺軟件,如國產的天脈2(ACoreOS)[1]以及美國WindRiver 公司推出的VxWorks AE653 操作系統[2]。嵌入式實時多分區操作系統提供了高安全性、高可靠性的多分區調度和管理機制,確保應用系統的安全運行。
非易失性隨機訪問存儲器(Non-Volatile Random Access Memory,NVRAM)是一種特殊的存儲介質,其兼有內存的高速讀寫特性和在掉電情況下仍然保持數據完整不丟失的特點[3]。
該文研究了一種NVRAM 的管理機制,規避了存儲器訪問越界和沖突的風險,有效提高了系統的安全性與可靠性。
在嵌入式實時多分區操作系統中,NVRAM 能滿足實時系統的實時性訪問以及從持久化存儲的數據快速恢復的要求,但是NVRAM 提供的原生訪問接口通過絕對物理存儲地址進行數據讀寫,將地址完全暴露給接口調用者。上層應用程序直接以絕對地址訪問NVRAM,存在存儲器訪問越界的風險,進而會造成軟件運行錯誤甚至系統失效。
在嵌入式實時多分區操作系統平臺下,各分區在訪問NVRAM 時,每個分區必須確認其與他分區之間是否存在地址沖突。
常規的NVRAM 訪問機制是通過一個公共資源配置表(如圖1 所示),實現了各分區可訪問的NVRAM 地址段的全局定義,應用層可按照配置分配的地址段進行NVRAM 的讀寫,即直接訪問對應的NVRAM 絕對物理地址。

圖1 常規多分區訪問NVRAM機制示意圖
常規多分區NVRAM 訪問機制依賴公共資源配置的正確性和NVRAM 訪問的合規性,實際應用中存在以下隱患:
1)當分區內存在多個應用訪問NVRAM 時,公共資源配置表和操作系統未提供分區訪問NVRAM保護機制,如果訪問地址之間存在地址重疊,將引發資源訪問沖突,導致不可預料的錯誤;
2)如果在應用層增加相關設計避免訪問沖突,會增加應用層軟件的復雜度。
為了解決上述問題,提出一種NVRAM 管理機制,實現了各分區應用對NVRAM 的互斥訪問和越界保護。
為了解決以絕對地址訪問NVRAM 時產生的問題,在常規NVRAM 訪問機制基礎上,增加了NVRAM代理管理層[4-5],如圖2 所示,NVRAM 代理管理層的主要職責是對訪問的地址進行校驗,同時對可訪問的地址空間進行有效性判斷。

圖2 增加NVRAM管理機制后的示意圖
圖3 為嵌入式實時多分區操作系統NVRAM 管理系統結構,即在模塊支持層之上增加NVRAM 代理管理模塊,以隔離應用層對NVRAM 物理地址的直接訪問,由NVRAM 管理模塊統一管理NVRAM 存儲空間的分配,透明化NVRAM 的管理機制,應用層不再關心存儲器的空間管理[6]。

圖3 嵌入式實時多分區操作系統NVRAM管理系統結構
NVRAM 管理層負責存儲器的管理[7]。NVRAM是一個獨立的存儲設備,具有連續的存儲空間,NVRAM 管理層可將其分成多塊存儲區,每塊存儲區域以字符串表示其存儲區標識,如圖4 所示,存儲區標識默認使用初次注冊時定義的字符串名稱,字符串名稱需定義最大長度SIZE,存儲區標識存儲于注冊的NVRAM 存儲空間地址起始位置。

圖4 NVRAM空間存儲說明
NVRAM 管理層通過配置信息實現存儲器的管理。配置信息通過應用層的注冊申請生成[8]。配置參數如表1 所示。

表1 配置參數
如表1 所示,id 是存儲區訪問的唯一標識,id 在進行注冊訪問時自動生成;nameSIZE 是存儲區的字符串標識;length 是存儲區的可用最大長度;addr 是存儲區的絕對訪問地址,該地址應用層不可見。
除此之外,根據硬件平臺中NVRAM 的實際大小,需要預先配置其他參數:NVRAM 的最大空間MAX_NVRAM_ADDR、系統最大支持訪問存儲區個數MAX_NVRAM_SUM 及每個訪問存儲區對應的最大空間MAX_NVRAM_LENGTH
NVRAM 管理模塊定義了注冊接口、讀取接口和寫入接口,分別用于支持NVRAM 的注冊、讀取和寫入服務[9]。各分區應用通過調用這些接口實現對NVRAM 的互斥訪問[10]。具體的接口定義如下:
1)注冊接口
int CreatNvRam(int*id,int length,char*name);
功能:創建并申請NVRAM 空間;
返回值定義:
0:注冊成功;
1:名稱過長;
表3、4、5分別為Z、Y、X方向的前3階模態頻率和阻尼統計表,圖6、7、8分別為Z、Y、X方向的1階模態振型。因為模態振型具有較強的方向性,單方向的模態頻率、振型與仿真整體模態頻率、振型的階數并不一定相等。
2:超過最大長度限制;
3:存儲區個數超界;
4:NVRAM 空間不足;
5:注冊失敗。
2)讀取接口
int ReadNvRam(char*pbuf,int id,int length);
功能:在id 處讀取長度為length 的內容到pbuf;
0:讀取成功;
1:無效的id;
2:訪問越界;
3:指針為空。
3)寫入接口
int WriteNvRam(char*pbuf,int id,int length);
功能:從pbuf中取length 長度的內容寫在id 處;
返回值定義:
0:寫入成功;
1:無效的id;
2:訪問越界;
3:指針為空。
開機初次使用NVRAM 存儲區時,需要創建NVRAM 配置參數表[11]。配置表的內容為注冊存儲區時生成的配置參數,配置參數內容如表1 所示。注冊接口、讀取接口和寫入接口的具體算法實現流程分別如圖5-7 所示。

圖5 注冊接口算法流程
由圖5 可知,在注冊接口的實現算法中,除了要檢查輸入參數(即注冊標識和注冊長度)的有效性,還需要判斷待注冊存儲區是否已經注冊。唯一的注冊標識和禁止重復注冊同一塊存儲區的機制確保了后續訪問注冊存儲區的安全性[12]。
由圖6 和圖7 可知,在訪問存儲區時,通過有效的存儲區id 和存儲區長度,準確地檢索、定位到對應的存儲區,將存儲區的數據讀取到緩沖區或者把緩沖區的數據寫入到存儲區中[13]。

圖6 讀取接口算法流程

圖7 寫入接口算法流程
在整個NVRAM 管理機制算法中,不同應用使用NVRAM 時必須先注冊再訪問,注冊的存儲區不可重疊[14],不同的存儲區通過不同標識區分,訪問存儲區時利用id 在配置表中進行檢索存儲區地址[15],準確定位后再訪問。因此,該機制為不同分區應用的訪問提供了有效的保護,避免了訪問沖突[16],也消除了訪問越界的風險。
該管理機制在某個機載計算機系統進行了測試,其軟件運行平臺為天脈2 操作系統,系統配置了三個應用分區,每個分區均配置了多個實時任務,均涉及NVRAM 的訪問。
在該機載系統的配置過程中,采用了該文提出的NVRAM 的管理機制,具體的系統配置定義如表2所示。同時,與不采用該機制時的使用效果進行了對比,表3 為采用NVRAM 管理機制前后配置時間和維護時間的對比情況說明。

表2 NVRAM系統配置

表3 NVRAM管理機制應用前后情況對比
由表3 可以看出,不采用NVRAM 管理機制時,雖配置簡單,但需要大量的維護時間,且在系統集成后存在一定概率的出錯風險;相比之下,采用NVRAM 管理機制后,配置時間增加了一倍,但應用系統需要維護的時間明顯減少[17]。
因此,對軟件開發設計人員來說,無需耗費過多的精力考慮非易失存儲器的管理問題,一次配置完成后,后期不再需要進行系統維護,解決了非易失存儲器訪問出現問題時難以定位和維護的頑疾。
對于嵌入式實時多分區操作系統,引入具有高速讀寫和非易失性的NVRAM,可以快速存儲應用程序數據,應用軟件采用原生訪問接口NVRAM,存在嚴重安全性隱患。該文提出的一種新NVRAM 管理機制,實現了應用層設計與底層NVRAM 管理間的隔離,解決了多分區對NVRAM 的訪問沖突,消除了訪問過程中數據越界的風險,提高了多分區應用的集成效率和軟件的健壯性。