摘 要: 分區操作系統是新一代綜合化航電系統的基礎,提供時間分區和空間分區機制,保證綜合后的應用不會相互影響。由于分區之間是隔離的,為了實現分區之間信息的交換,需要采用分區間通信方式進行數據交換。在此分析了分區操作系統軟件結構以及ARINC653標準對分區間通信的要求,著重討論隊列端口和采樣端口的實現方法。此外,在此還提出了一種基于虛端口和虛分區的通信方法,解決了分區內應用使用端口與模塊內的設備以及和其他模塊的分區進行通信的問題,提高了應用程序的可移植性。
關鍵詞: 分區間通信; 隊列端口; 采樣端口; 虛端口
中圖分類號: TN911?34 文獻標識碼: A 文章編號: 1004?373X(2013)14?0058?03
Design of inter?partition communication under partition operating system
XU Xiao?guang, YUN Hai?shun, XING Liang
(Aeronautical Computing Technology Research Institute, Xi’an 710119, China)
Abstract:The partition operating system is a basis of new generation integrated avionics system. It supports time partitioning and space partitioning mechanisms and ensures the integrated applications, which will not affect each other. Becasue of isolation between partitions, the inter?partition communication is required to exchange information between the partitions. The software structure of the partition operating system and the requirements that ARINC653 standard defines for inter?partition communication are analyzed in this paper. The design methods of the queuing port and sampling port are discussed emphatically. In addition, a communication method based on pseudo ports and pesudo partitions is also proposed in this paper. This method solve the problem of partition applications which adopt ports to communicate with equipments in the same module or partitions of other modules. This method improved the portability of application programs.
Keywords: inter?partition communication; queuing port; sampling port; pseudo port
0 引 言
隨著模塊化、綜合化航空電子IMA系統的發展,原先的聯合式、分散的各種航空電子子系統被集成到一起,以減輕飛機系統的重量,提高硬件資源利用率,并提高未來飛機的作戰能力。為了適應模塊化、綜合化航空電子IMA系統的需求,美國航電委員會針對數據綜合化的要求提出了應用程序接口標準ARINC653[1]。ARINC653是目前滿足綜合化航電實時操作系統需求的主要操作系統規范,其中最重要的是提出了分區的概念。分區操作系統的空間和時間是相互隔離的,分區間通信是分區之間實現信息交換的主要途徑。
ARINC653標準PART1的標準定義了采樣端口和隊列端口兩類服務,本文在介紹了分區間通信的概念的基礎上,著重闡述隊列端口的原理、設計和實現需要解決的主要問題,及采用的關鍵技術。第1節描述了分區操作系統的軟件結構;第2節對分區間通信相關概念及原理進行說明,包括端口、通道和消息等概念及之間的關系;第3節描述隊列端口、采樣端口和模塊間通信的設計與現實;第4節進行總結。
1 分區操作系統軟件結構
符合ARINC653標準的分區操作系統[2]通常采用的軟件結構[3]如圖1所示,分為3層,應用層、操作系統層、硬件模塊支持層。應用層為綜合后的航電應用,應用位于分區之內,時間和空間受限于分區[4],應用運行于用戶態;操作系統包括分區操作系統作(PartitionOS)和核心操作系統(CoreOS),PartitionOS是分區內資源的管理者駐留于分區內,實現分區內的進程管理、調度以及資源的調配[5]。CoreOS主要實現分區的管理、調度,分區間的通信、系統的故障監控以及系統內的資源管理和設備管理。
2 分區間通信的原理
分區間通信[6]主要由端口、通道和消息組成。分區間通信是通過端口發送和接收消息完成的,消息由一個源端口發送給一個或多個目的端口。分區通過端口的直接互聯實現了間接互聯。通道提供了端口之間的互聯機制,每一條通道指明了發送消息的端口名稱和所屬分區,及接收消息的端口和所屬分區。分區間通信端口、通道和消息之間的關系如圖1所示。
圖1 分區操作系統軟件結構
在系統構建階段,通過系統配置文件對端口和通道等分區間通信所需的資源進行配置。核心操作系統根據配置信息完成端口、通道、消息緩沖區的創建及消息傳輸機制的初始化,如圖2所示。
圖2 端口、消息與通道
在分區內使用端口時需要首先調用創建端口服務,完成分區內端口對象創建,實現與核心中通信資源的掛接。
通道定義了一個源端口和一個或多個目的端口之間的邏輯連接關系,同時也定義了消息從源端口傳輸到目的端口的傳輸模式及特點。在分區應用的配置文件中定義端口的各個特征,在系統的配置文件還需要單獨以(端口名稱、分區名稱)對的方式定義連接關系。將端口和通道的信息組合放入一個數據結構中,主要信息如表1所示。
表1 通道和端口信息表
端口模式包括兩種隊列和采樣兩種,主要區別如下:采樣模式適用于傳輸一般是相似且不斷進行更新的數據消息。系統不對消息提供排隊機制,在系統中僅有一個有效的消息緩沖區,消息保留在緩沖區中直到被新發送的消息所覆蓋。分區可以隨時發送消息給采樣源端口,或隨時訪問目的端口消息。
與采樣端口相對比,隊列模式下適用于傳輸包含不同的數據的消息,且不允許消息發生覆蓋,消息一般情況下不允許丟失。消息保留在源端口中直到發送成功,或保留在目的端口中,直到被應用端口成功接收。
協議用于隊列模式下,如果通道上的目的端口多于一個,且有目的端口發生阻塞的情況下指導消息傳輸。協議包括發送者阻塞(SENDER_BLOCK)、接收者丟棄(RECEIVER_DISCARD)和不適用(NOT_APPLICABLE)。SENDER_BLOCK協議:消息發送給通道上所有的目的端口。如果任意一個目的端口滿,消息在發送端口的隊列按照FIFO次序排隊,不再傳輸消息給目的端口中的任何一個端口,直到目的端口都可以接收消息。SENDER_BLOCK協議的優點在于其不會丟失消息,缺點是一個發送阻塞的目的端口會影響到其他目的端口。
RECEIVER_DISCARD協議:當通道上的一個目的端口滿,源端口將為此目的端口丟棄此消息,并通知此的目的端口消息溢出。RECEIVER_DISCARD協議的意義在于避免了一個端口發生錯誤影響其他端口的情況,缺點是可能因為沒有及時接收消息發生消息丟失。協議是整個通道上范疇內的屬性,因為一條通道有且僅有一個源端口,故在實現時將協議信息保存源端口的數據結構中。目的端口配置的協議為NOT_APPLICABLE。
3 分區間通信的設計
3.1 隊列端口設計
通過隊列源端口發送消息時,應用請求發送的新消息被暫時存儲在端口的消息隊列中。若從隊列端口接收消息,接收端口隊列中最早到達的消息將被從消息隊列中移除,返回給應用軟件。
當進程向消息隊列已滿的隊列端口發送消息,或進程從一個消息隊列空的隊列端口中接收消息時,進程需要進行等待,此時會發生進程的重新調度。通過設置超時時間,可以限制等待時間或不等待。對于隊列模式下的端口,進程可以按照先進先出(FIFO)或者基于優先級(Priority)進行排隊等待。排隊規則在創建端口時指定。
通過隊列端口發送和接收消息的過程如圖3所示。用戶通過隊列端口發送消息時,如果發送端口沒有空閑的緩沖區,進程將被阻塞到發送進程等待隊列上。如果端口有空閑緩沖區,將通過系統調用交給通道控制程序,待發送的消息首先從系統的消息緩沖區獲取一個緩沖,將消息拷貝到系統緩沖區中。然后,將緩沖區的指針插入到源端口的消息隊列中。通道控制程序將根據端口的之間的互聯關系,將緩沖區的指針插入到目的端口的消息隊列中。通過操作緩沖區指針的方式可以減少數據拷貝的次數,提高數據操作的效率。如果目的端口為空,將通知目的分區有消息到達。
圖3 隊列端口消息傳輸過程
用戶進程通過隊列消息接收服務從接收端口接收消息時,如果目的端口沒有消息,那么進程將被阻塞到從此端口接收消息的等待隊列上。如果目的端口有消息,產生一個系統調用,從目的端口的消息隊列中移除第一條消息對應的緩沖區指針,從核心OS內的緩沖區中拷貝消息后返回。如果所有的目的端口接收了消息,通知系統緩沖區釋放系統的相應的消息緩沖及源端口消息隊列的空間。
3.2 采樣端口設計
采樣端口與隊列端口類似,不同之處在于發送接收操作不會掛起用戶進程,而且端口最多只緩沖一個消息,允許消息的覆蓋。對于發送端口,當用戶向端口發送數據時,如果端口沒有數據,那么拷貝數據到端口緩沖區中,如果端口有消息那么覆蓋原先的消息;對于接收端口,當數據到達接收端口時,記錄消息到達端口的接收時間,此時如果端口沒有消息,拷貝消息到端口緩沖區中,如果有消息覆蓋舊消息。當用戶從接收端口接收消息時,如果沒有消息,返回用戶此時端口空的狀態,如果有消息,那么根據當前時間和消息到達端口的時間計算消息年齡,如果消息年齡大于端口配置的刷新時間,那么標記該消息為有效消息,否則為無效消息,拷貝消息并將消息有效性返回用戶。
3.3 模塊間通信的設計
分區間通信可以用于模塊內通信和模塊間通信[6]。模塊內通信是同一個模塊內多個分區之間的通信,通道連接的發送分區和接收分區在同一個OS上。模塊間是不同模塊上的分區之間以及分區和設備之間的通信,通道連接的發送分區和接收分區不在一個OS上。
模塊間通信使用虛分區和虛端口來實現,對于通信的一方來說,如果另一方不在本模塊內,可以使用虛分區和虛端口來代替另一方。虛分區和虛端口通常和具體的通信設備相關,通過設備驅動來收發數據。模塊內通信和模塊間通信的連接關系如圖4所示。
圖4 模塊內/模塊間分區間通信連接關系
模塊間通信數據傳輸過程如圖5所示,如果是發送方向,那么通道源是位于本模塊內上的分區內的發送端口,通道的目的位于模塊之外,此時需要給通道目的配置虛端口,虛端口對應外部設備。用戶向發送端口發送消息后,核心OS將消息指針給虛端口,虛端口控制程序調用對應驅動發送消息;如果是接收方向,那么通道的目位于本模塊上的分區內的接收端口,通道的源位于模塊外,需要給通道源配置虛端口。虛端口控制程序調用
(下轉第64頁)
設備驅動接收消息,將收到的消息傳遞給應用端口。
圖5 模塊間通信數據傳輸過程
4 結 語
本文對分區間通信的相關概念及原理進行了介紹,重點對隊列端口和采樣端口消息傳輸原理進行闡述,并提出虛分區和虛端口方法用于模塊間的分區間通信。
參考文獻
[1] Aeronautical Radio,Inc. Avionics application software standard interface [S]. [S.l.]: Aeronautical Radio,Inc., 2005.
[2] WindRiver Systems, Inc. VxWorks_653_programmers_guide_2.2 [M]. [S.l.]: WindRiver Systems, Inc., 2007.
[3] NASA. Partitioning in avionics architectures requirements mechanisms and assurance [R]. US: NASA, 2000.
[4] 喬乃強.嵌入式實時操作系統分區機制的設計與實現[D].南京:南京航空航天大學,2011.
[5] 李運喜.時間分區的設計與實現[J].航空計算技術,2010(3):65?67.
[6] 代杰.分區間通信在機載計算機系統中的應用研究[J].工業控制計算機,2011(10):20?23.