摘 要: AFDX網絡端系統(tǒng)實現(xiàn)符合ARINC664P7協(xié)議的網絡數據的傳輸功能,在AFDX網絡端系統(tǒng)數據接收方面,,總結了AFDX網絡數據的特點,,分析了查詢接收方式和中斷接收方式各自的不足,設計并實現(xiàn)了一種基于查詢和中斷的混合式數據接收方法,。該方法在保證查詢接收方式高效的前提下,有效降低了對主機系統(tǒng)處理器資源的占用,,并解決了中斷接收方式引起的丟包問題,。
關鍵詞: AFDX端系統(tǒng);數據接收方法,;查詢,;中斷
AFDX網絡端系統(tǒng)實現(xiàn)符合ARINC664P7協(xié)議標準的數據傳輸接口功能,,支持主機系統(tǒng)接入AFDX網絡。一般情況下,,AFDX網絡端系統(tǒng)以接口卡的形式與主機系統(tǒng)連接,,并支持主機系統(tǒng)發(fā)送和接收AFDX網絡數據。數據的接收一般在主機系統(tǒng)端通過軟件完成,,主機端軟件通過查詢或者中斷的方式接收網絡數據,。采用查詢的方式增加了主機系統(tǒng)的負載;中斷的方式降低了系統(tǒng)的負載,,但是頻繁的數據接收中斷會存在中斷嵌套及覆蓋的情況,,導致中斷的丟失現(xiàn)象,引起數據丟包的問題,。針對這些問題,,本文提出了一種中斷和查詢結合的數據接收方法,減輕主機系統(tǒng)負載的同時,,避免了由于中斷丟失而引起的數據丟包問題,。
1 AFDX網絡端系統(tǒng)通信分析
AFDX網絡在以太網的基礎上發(fā)展而來,在以太網的基礎上增加了確定性及雙通道的約束,,提高了數據傳輸的可靠性,,保證了數據傳輸的確定性。在以AFDX網絡為核心的機載網絡中,,網絡端系統(tǒng)作為網絡接口卡,,將各個主機系統(tǒng)連接至核心網絡,其主要作用[1]如下,。
?。?)實現(xiàn)基于IEEE 802.3協(xié)議標準的物理層;
?。?)實現(xiàn)基于虛擬鏈路VL的通信調度功能,;
(3)實現(xiàn)ICMP協(xié)議,、UDP/IP通信協(xié)議棧,;
(4)面向主機系統(tǒng)提供采樣,、周期及SAP通信端口服務,。
1.1 網絡端系統(tǒng)架構
標準的AFDX網絡系統(tǒng)采用雙冗余的設計,采用星形的結構,,其基本架構[2]如圖1所示,。
圖1描述了3個主機系統(tǒng)構成的雙余度AFDX網絡交換網絡結構,通過兩臺互為備份的交換機實現(xiàn)了雙路冗余數據的傳輸,,即使端系統(tǒng)模塊單個端口或者某個交換機出現(xiàn)故障,,仍可以由另外一個端口通過交換機進行數據的傳輸,,保證網絡數據的可靠性。在圖1中,,網絡端系統(tǒng)安裝在主機模塊,,構成主機系統(tǒng),支持主機系統(tǒng)的AFDX網絡通信,,端系統(tǒng)模塊與主機模塊一般采用PCI總線,,利用PMC接口實現(xiàn)主機模塊與端系統(tǒng)模塊的交互,端系統(tǒng)和主機模塊架構如圖2所示,。
圖2中,,端系統(tǒng)通過PCI接口與主機模塊連接,和主機模塊一起構成一個主機系統(tǒng),,通過雙通道CHA和CHB與外部AFDX網絡交互,。采用圖2的方式,端系統(tǒng)模塊負責進行AFDX網絡數據的處理,,包括數據的接收,、有效性檢查、UDP/IP協(xié)議棧處理,、數據解包等工作,,直接將有效的數據內容傳送至主機模塊。主機模塊只需從相應的存儲器進行數據讀操作即可完成數據接收,,而不用進行大運算量的AFDX網絡協(xié)議處理工作,,減少了主機模塊的運行負載。
1.2 AFDX網絡數據分類及其接收方式分析
AFDX網絡數據分為采樣數據,、隊列數據及SAP數據3種,。其中,采樣數據為周期性數據,,數據以一定的周期進行傳輸,,數據接收緩沖區(qū)采用覆蓋的方式,新數據到來將會覆蓋舊數據,,采樣數據適用于周期性的狀態(tài)消息,,且應用僅關心最近一次采樣數據。隊列數據為事件性數據,,數據的到來沒有特定的規(guī)律,,以隨機的形式進行傳輸,因此,,隊列數據需要一定深度的數據緩沖區(qū),,用于對接收到的數據進行緩存,而當緩沖區(qū)滿后,,新來的數據被丟棄,,隊列數據適用于事件性的消息傳輸。AFDX網絡SAP數據主要用于高層協(xié)議,,支持目的IP及端口號的設定等功能,,一般不用于普通的AFDX網絡數據通信。
數據的接收一般分為查詢方式和中斷方式兩種,。查詢方式具備實現(xiàn)簡單,、數據吞吐量較快的優(yōu)勢,但查詢方式在無數據傳輸時仍在進行查詢操作,,因此,,查詢方式增加了處理器的負擔,對于任務較重的主機系統(tǒng),,不適合用查詢方式進行數據接收,。采用中斷的方式,數據接收可大大減輕處理器的負擔,,僅當有數據時,,處理器才參與數據接收,但當數據量較大時,,會引起頻繁的中斷,。由于中斷嵌套及覆蓋等原因,會存在中斷丟失或響應不及時的情況,,導致數據的丟失或順序錯亂,。
對于AFDX網絡基本通信,包括采樣數據通信和隊列數據通信兩種,。采樣數據本身具有周期性的特點,,因此,在主機模塊接收可以采用查詢的方式,,主機模塊以定時器的方式按照采樣數據的周期每隔一定的時間進行數據接收即可,,不會造成主機模塊的無效查詢和處理器資源的浪費。而對于隊列數據,,其具有不可預知的特點,,因此,對于數據量較大的數據傳輸,,采用查詢方式進行接收能夠提高數據接收的效率,,而對于數據量較小的數據傳輸,采用中斷的方式可以節(jié)省處理器資源,,降低主機系統(tǒng)的負載,。而在實際應用中,由于其數據傳輸的不可預知性,,對于隊列數據,,單獨采用查詢方式或者中斷方式無法滿足既降低主機負載又提高接收效率的數據接收要求,。
2 端系統(tǒng)接收方法設計
針對AFDX網絡端系統(tǒng)隊列數據的特點,為了滿足既降低主機負載又提高接收效率的要求,,本文提出一種將中斷和查詢結合起來的方式,,在無數據傳輸時,不消耗主機處理器資源,,在數據傳輸量較大時,,以查詢的方式進行接收從而提高數據接收效率。
本文端系統(tǒng)接收方法核心思想是:通過中斷通知主機接收數據,,而在數據接收時通過查詢方式進行,。端系統(tǒng)接收方法設計如圖3所示。
圖3(a)為端系統(tǒng)模塊的數據接收流程,,圖3(b)為主機模塊數據接收流程,。在端系統(tǒng)模塊,當從網絡上接收到數據時,,首先進行數據的正確性校驗,,當數據校驗無誤時,將數據中的UDP/IP協(xié)議頭及校驗等信息去除,,進行解包處理,,獲取到有效數據,并通過DMA的方式將有效數據傳送至主機模塊內存中,,檢測數據的類型,,當為隊列數據時,觸發(fā)主機PCI中斷信號,,通知主機進行數據接收,。在主機模塊,當有中斷信號發(fā)生時,,獲取數據端口號,,進行數據接收,當完成一次數據接收后,,繼續(xù)查看數據接收隊列是否為空,,如果不為空,繼續(xù)接收數據,,直至數據接收隊列為空,。
圖3中在主機模塊進行數據接收時,需要查詢接收隊列,,接收隊列存放了端系統(tǒng)模塊接收到的消息的端口號信息,,接收隊列存放在端系統(tǒng)模塊上,通過PCI地址映射,在主機模塊上可以訪問,。
消息接收隊列緩沖區(qū)如圖4所示,。在端系統(tǒng)模塊上,消息接收隊列緩沖區(qū)以循環(huán)雙口RAM形式進行維護,,提供讀指針PR給主機模塊,,提供寫指針PW給端系統(tǒng)模塊。當端系統(tǒng)接收到數據時,,通過PW指針將接收到數據的端口號信息寫至消息接收隊列,然后PW指針加1,;當PW指針超過緩沖區(qū)長度時,,PW指針重新指向緩沖區(qū)對頭第一個緩沖區(qū)。當主機模塊接收到中斷信號后,,通過PR指針依次從消息隊列中取出端口號信息,,并進行數據接收,直至消息隊列中無數據,。即PR和PW相等時,,PR指針每取出一個端口號進行加1操作,當超過緩沖區(qū)長度時,,PR指針重新指向緩沖區(qū)對頭的第一個緩沖區(qū),。
采用圖3的數據接收流程和圖4所示端系統(tǒng)消息接收隊列,將中斷方式和查詢方式結合起來,。一方面,,一次中斷就可以將接收隊列中的數據全部接收,即中斷后采用查詢方式將接收隊列中的數據全部接收,,提高接收效率,;另一方面,當無數據時,,主機模塊不進行接收的任何操作,,不用增加主機負載。同時,,當出現(xiàn)丟中斷的情況時,,不會出現(xiàn)數據丟失的問題,數據會在上一次中斷或下一次中斷時通過查詢的方式被接收,。
3 端系統(tǒng)接收方法實現(xiàn)
端系統(tǒng)模塊實現(xiàn)了AFDX網絡功能,,向主機模塊提供了數據接收的API接口。在端系統(tǒng)接收方法的實現(xiàn)上,,一方面需要在主機模塊上維護消息接收的中斷處理函數,;另一方面,需要設計阻塞式接收的API接口,提供給主機應用使用,。
軟件設計上利用信號量機制[3]來實現(xiàn)端系統(tǒng)的數據接收功能,。在主機模塊初始化時,建立信號量,,當有數據接收中斷發(fā)生時,,在中斷函數中,首先通過semGive函數釋放信號量,,然后進行清中斷操作,。主機模塊數據接收API函數設計如圖5所示。
如圖5所示,,數據接收API函數在運行時,,首先判斷接收標識是否為0,如果接收標志為0,,表明無中斷通知主機有數據,,通過semTake函數進入阻塞狀態(tài);如果接收標志不為0,,表明已經有中斷通知主機有數據,,且接收隊列不為空,則直接從接收隊列中獲取接收端口號,,進行數據接收,。當在中斷處理函數中通過semGive釋放信號量后,主機模塊接收API獲取到信號量,,首先將接收標志置1,,然后遍歷接收隊列,將接收隊列中端口號信息的數據接收完成之后,,將接收標志置0,,完成一次中斷接收過程。
主模塊數據接收API函數采用阻塞接收的方式,,當沒有信號量且接收標志為0時,,API函數處于阻塞狀態(tài),不占用主機模塊的處理器資源,,而僅當有接收中斷發(fā)生時,,才占用處理器資源進行數據接收。
本文總結了AFDX網絡端系統(tǒng)數據接收方式及利用中斷和查詢方式進行數據接收的不足,,設計了一種將中斷和查詢兩種方式混合在一起的數據接收方式,,并對其進行了軟件實現(xiàn)。通過這種方式,,很好地解決了AFDX網絡數據查詢接收方式主機負載重的問題,,也解決了AFDX網絡中斷接收方式丟包的問題,,在保證數據高效接收的同時,降低了處理處理器資源的占用,,在AFDX網絡端系統(tǒng)工程實踐中得到了很好的應用,。
參考文獻
[1] 664P7-1, Aircraft data network part7: avionics full duplex switched ethernet network[S].
[2] 趙永庫,,李貞,,唐來勝.AFDX網絡協(xié)議研究[J].計算機測量與控制,2011,,19(12):3137-3142.
[3] 張楊,,于銀濤.VxWorks內核、設備驅動與BSP開發(fā)詳解[M].北京:人民郵電出版社,,2009.