周霆 郭芳超
摘 要:綜合化航空電子系統(tǒng)進一步提升綜合化水平以后,大量應用通過分區(qū)操作系統(tǒng)提供的分區(qū)執(zhí)行環(huán)境共存于同一硬件處理平臺,可能出現有限的TCP/IP網絡硬件難以滿足多個分區(qū)并行網絡通信的問題,因此本文提出一種基于C/S服務的SOCKET通信虛擬化機制。該方法通過建立SERVER端分區(qū)來提供網絡服務,并在充當CLIENT端的普通應用分區(qū)向用戶提供透明的SOCKET樁接口,同時利用操作系統(tǒng)的IPC通信機制實現SERVER端和CLIENT端的服務通信,從而實現在SOCKET層的網絡虛擬化,解決多個分區(qū)在物理網絡設備有限的情況下并行使用SOCKET進行網絡通信的問題,實現了一定程度的虛擬化網絡共享服務。
關鍵詞:分區(qū)操作系統(tǒng);SOCKET通信;C/S服務;網絡虛擬化
中圖分類號:TP311 文獻標識碼:A
隨著航空電子技術的發(fā)展,在一個物理處理平臺上將集成越來越多,甚至來自于多個機載子系統(tǒng)的軟件任務[ 1 ],綜合化模塊化航空電子系統(tǒng)(Integrated Modular Avionics,簡稱IMA)進一步提升綜合的水平成為必然發(fā)展趨勢。未來綜合范圍將從航電向機電、飛控進一步擴展,實現跨系統(tǒng)大綜合,越來越多的應用系統(tǒng)將集成在同一個操作系統(tǒng)平臺之上。
為了解決綜合化帶來的故障隔離和確定性問題,現有的高安全機載操作系統(tǒng)都采用了分區(qū)機制,提供分區(qū)間隔離與分區(qū)間通信能力,但對于高度綜合化以后引發(fā)的I/O資源不足和沖突的問題卻沒有充分考慮[ 2 ]。
本文提出一種虛擬化SOCKET通信方法,解決分區(qū)操作系統(tǒng)多個分區(qū)共享網絡設備的情況下使用SOCKET機制和接口進行網絡通信的問題。隨著航空電子技術的發(fā)展,在一個物理處理平臺上將集成越來越多,甚至來自于多個機載子系統(tǒng)的軟件任務,綜合化模塊化航空電子系統(tǒng)(Integrated Modular Avionics,簡稱IMA)進一步提升綜合的水平成為必然發(fā)展趨勢。
目前,越來越多的IMA應用都駐留于分區(qū)操作系統(tǒng)提供的分區(qū)應用運行環(huán)境中,由于應用系統(tǒng)的復雜性,多個分區(qū)的任務很可能需要進行通信或者數據交互。常見的如IPC、共享內存等數據通信方式存在一些不足,IPC通信效率不高,需要多次數據拷貝且通信數據量受限,普通的共享內存則會出現數據安全問題?;谏鲜鲈颍枰M一步研究分區(qū)操作系統(tǒng)的分區(qū)間通信機制的實現,在保證通信效率的同時,提升通信數據的safety和security安全防護能力。
1 概述
典型的分區(qū)操作系統(tǒng)架構包括多個應用分區(qū)和服務分區(qū)。應用分區(qū)向用戶提供時間、空間隔離的獨立應用運行環(huán)境。應用分區(qū)作為客戶端(CLIENT)可以向作為服務端(SERVER)的公共服務分區(qū)以C/S服務的形式申請組件/中間件/設備服務[ 3 ]。
在這種架構下,一方面,由于在同一平臺上的應用任務數量的增多,導致更多的分區(qū)產了通信需求。以TCP/IP網絡為例,目前主流的機載綜合處理硬件平臺如PowerPC 75x和86xx系列,都僅提供最多2路物理網卡,面對大量同平臺應用可能出現的網絡通信需求,顯然是不夠用的,如果不支持設備共享,將無法解決網絡和I/O設備不夠用的問題。
另一方面,如果多應用混合場景下多個應用分區(qū)直接操縱同一網絡或I/O設備,對任務的執(zhí)行時間確定性和數據正確性都會產生不確定的影響。在硬件設備資源有限的情況下,虛擬化多分區(qū)的系統(tǒng)架構勢必引起資源訪問和狀態(tài)控制的沖突。分區(qū)操作系統(tǒng)需要在軟件層面來解決多任務間的硬件資源沖突,實現任務級的資源隔離。
使用SOCKET(套接字)的機制和接口進行任務間網絡通信已經成為目前主流的網絡編程開發(fā)方式。由于分區(qū)空間的隔離性,目前分區(qū)操作系統(tǒng)的SOCKET應用都建立在本地駐留TCP/IP協(xié)議棧和物理網卡的基礎之上?;谏鲜隹赡艹霈F的網絡資源不足和訪問沖突問題,本文給出一種基于C/S服務的SOCKET虛擬化機制,以解決在分區(qū)操作系統(tǒng)中多個分區(qū)共享網絡設備時使用SOCKET并行進行網絡通信的引發(fā)的網絡網卡不足和訪問沖突問題。
2 統(tǒng)一設備管理框架
首先,本文提出一種統(tǒng)一設備管理框架來用作軟件層面的設備虛擬化解決方案,以解決在多分區(qū)系統(tǒng)中包括網絡設備在內的多種I/O設備所存在的共享沖突問題和設備的統(tǒng)一化管理問題。
本文擬搭建的設備管理框架如圖1所示。所有分區(qū)通過I/O管理模塊統(tǒng)一管理包括獨占設備和共享設備在內的兩類分區(qū)設備。對于獨占設備,其地址空間映射在所有者的分區(qū)地址空間內,分區(qū)應用程序直接使用本分區(qū)的原始設備驅動對設備進行訪問;對于共享設備,其地址空間位于設備服務分區(qū)內,共享設備采用客戶(CLIENT)/服務器(SERVER)模式完成共享設備訪問。其中,設備服務分區(qū)作為SERVER端,包含真實設備驅動程序和協(xié)議棧接口。
客戶端分區(qū)的樁驅動通過IPC通信向服務端分區(qū)發(fā)送設備訪問請求,服務端分區(qū)包含專門的設備服務器,調用真實的設備驅動或協(xié)議棧完成設備訪問動作。SERVER端服務器將使用帶截止期的事務鏈等機制來將混合任務可能發(fā)起的并行化I/O操作轉化為時間確定的串行化事務。
在這種管理框架下,所有的設備驅動程序都位于內核之外的用戶態(tài)空間,具有以下優(yōu)點:
1)大量的操作系統(tǒng)BUG都處于設備驅動程序中,將這些設備驅動程序從內核中去除,將顯著提升內核可靠性;
2)把設備驅動程序置于內核之外可以大幅降低內核的代碼規(guī)模,獲取更小的內核尺寸,從而能夠滿足目前的形式化驗證方法對內核代碼規(guī)模的約束。
3 C/S模式的虛擬化SOCKET服務框架
根據C/S服務的一般原理,完整的虛擬化SOCKET的C/S模式框架包括客戶端配置、服務器端配置,以及客戶端和服務器端的通信配置。一個配置物理網卡和完整TCP/IP協(xié)議棧的網絡服務分區(qū)充當Sever端,提供SOCKET通信服務;其他需要以共享方式使用SOCKET的分區(qū)(CLIENT端)在本地使用虛擬化的SOCKET接口,向SERVER端發(fā)送服務請求;SERVER端和CLIENT端使用IPC通信進行命令轉發(fā),使用共享內存進行數據轉發(fā)[ 4 ]。
3.1 SERVER端分區(qū)功能
a)一個負責處理外部網絡與CLIENT端SOCKET命令雙向動作的設備監(jiān)聽與響應任務A,此任務循環(huán)等待并依次處理物理網卡的數據收發(fā)和任務B轉發(fā)而來的CLIENT端請求,并向CLIENT端進行必要的回復;
b)一個專門接收CLIENT端SOCKET命令(以IPC消息的形式存在)的處理任務B,此任務在接收到CLIENT端命令后,激活任務A進行相應處理。
3.2 CLIENT端分區(qū)功能
一組用IPC通信重新實現的虛擬化SOCKET接口庫,在下文描述中使用v_XX來指代虛擬化的SOCKET接口,v_XX接口調用都通過IPC操作將相應的服務命令發(fā)送給SERVER端的任務B。
3.3 IPC通信功能配置
a)CLIENT端分區(qū)的應用程序任務Y需要使用IPC_SEND向SERVER端的任務B發(fā)送SOCKET服務請求,使用IPC_RECV向SERVER端的任務A請求服務回復。
b)SERVER端分區(qū)的任務A使用IPC_SEND向CLIENT端應用程序任務Y發(fā)送服務回復。
4 虛擬化SOCKET的工作原理
如圖2所示,是一套完整的虛擬化SOCKET工作流程,CLIENT端分區(qū)_1通過虛擬化SOCKET接口,借助IPC通信機制與SERVER端分區(qū)交互,SERVER端分區(qū)利用協(xié)議棧和網卡驅動,通過物理網卡與系統(tǒng)外部進行網絡交互。
a)分區(qū)操作系統(tǒng)啟動以后,SERVER分區(qū)的任務A進入處理循環(huán),等待依次處理網卡事件和任務B轉發(fā)而來的CLIENT端命令,任務B等待接收CLIENT端發(fā)來的IPC消息(包含套接字命令和相關信息);
b)CLIENT端任務Y開始建立套接字準備進行網絡通信,首先調用v_socket、v_bind等接口建立SOCKET設備和連接(如果是TCP通信,則調用v_listen或v_connect來監(jiān)聽或建立連接,如果應用程序是服務端,則在監(jiān)聽到請求之后調用v_accept接收請求。UDP通信可以不用建立連接),通過IPC_SEND向SERVER端的任務發(fā)送套接字命令請求(此時可使用v_read/v_write、v_recv/v_send等套接字讀寫接口進行網絡通信),并調用IPC_RECV等待從任務A返回執(zhí)行結果。
c)SERVER分區(qū)的任務B接受到CLIENT端的v_socket、v_bind等服務請求后激活任務A進行SOCKET設備的創(chuàng)建和連接建立操作,并進行額外的共享內存建立工作,以便于后續(xù)與CLIENT分區(qū)進行網絡數據的讀/寫轉發(fā),隨后將套接字句柄和網絡地址等信息通過IPC_SEND回復給任務Y,此時SOCKET通信準備就緒。
d)CLIENT端任務Y通過套接字進行網絡收據收/發(fā),所有收發(fā)命令都與步驟b)和c)一樣轉發(fā)給任務A執(zhí)行,并在接收到任務A的回復后完成一次SOCKET通信動作。
5 數據包和服務命令的通信配置
虛擬化SOCKET通信機制包含大量的服務端和客戶端之間的通信,大量的通信交互行為成為制約虛擬化SOCKET性能的瓶頸所在。梳理上述的SOCKET通信流程,可以看出大部分的交互消息屬于服務命令,而不是大數據量的網絡數據包,因此需要著重提升服務命令的通信性能。因此,為了提升服務性能,本方法對分區(qū)之間的數據交互采取了特異化處理。對服務命令采用短IPC通信的方式,對大數據量的數據包采用共享內存的方式。
短IPC利用系統(tǒng)調用上下文保存和恢復的過程完成消息在用戶態(tài)和操作系統(tǒng)內核之間的傳遞,在內核只需要1次拷貝就可以完成數據傳遞。同時,IPC機制是一種任務間的同步通信方式,適用于C/S模式要求的任務間的同步阻塞工作機制。
6 結語
本文深入研究了機載嵌入式分區(qū)操作系統(tǒng)在綜合化程度提升以后出現的設備共享和互斥保護問題,給出了解決多分區(qū)網絡共享,基于C/S服務的虛擬化SOCKET通信方法,解決了SOCKET層的網絡共享問題。通過在某分區(qū)實時操作系統(tǒng)中的實現,證實文中涉及的設計和實現方法是高效可行的。在今后的工作中,我們將進一步進行策略和機制的抽象,研究能夠覆蓋多種設備的,統(tǒng)一的分區(qū)操作系統(tǒng)設備共享方案。
參考文獻:
[1] Gernot Heiser,Chief Technology.Virtualization for Embedded Systems,OK 40036:2007.
[2] Asif Iqbal,Nayeema Sadeque,Rafika Ida Mutia.An Overview of Microkernel,Hypervisor and Microvisor Virtualization Approaches for Embedded Systems,Sweden.
[3] 郝繼鋒,任曉瑞,胡寧.一種基于微核架構的虛擬化設備高效訪問模型.電子技術,2013 42(7):4-6.
[4] VxWorks中任務恢復機制的設計與實現[J].空軍工程大學學報(自然科學版),2013,14(5):3-4.
作者簡介:
周霆(1984-),男,陜西洋縣人,主要從事嵌入式實時操作系統(tǒng)方向的研究。