賀冰琰
(集美大學計算機工程學院,廈門361021)
隨著IP技術的迅速發(fā)展,“Everything over IP”的觀念已深入人心。眾多移動通信設備制造商都致力于基于全IP交換平臺之上的3G、4G 產品開發(fā),基于全IP構建開放通信體系架構,真正作到核心網和無線網絡各個產品的模塊化、積木化。將核心網、無線接入網統(tǒng)一考慮,做到技術上的重用、接口上的統(tǒng)一,避免獨立開發(fā)各模塊特別是底層開發(fā)可能存在的重復勞動,實現(xiàn)全業(yè)務融合,打造一體化的可增值、可擴展的多業(yè)務集成通信平臺,已成為業(yè)界共識[1]。在整個系統(tǒng)設計的過程中,主要的目標在于軟件支撐的統(tǒng)一性,這要求相關的硬件系統(tǒng)也需要統(tǒng)一考慮成一個硬件平臺的概念。這樣將來就可以在統(tǒng)一的軟件支撐上開發(fā)各種不同的應用業(yè)務。
全IP交換平臺基于Crossbar的三層交換,可根據系統(tǒng)容量需求和實際應用要求配置。當容量較大時,采用CrossBar+線卡方式實現(xiàn)三層交換方式,具體線卡配置的數(shù)目根據實際數(shù)據流量以及資源在各個應用實體的利用情況確定。當容量較小時,采用線卡互連提供三層交換。位于全IP交換平臺之上的移動通信設備單板需要實現(xiàn)的移動通信功能靠Host(主)CPU 完成。本文中的全IP開發(fā)平臺選用AMCC 的NP7250、NPX5700和NPX5800交換套片作為硬件基礎,主CPU 是MPC8260,主CPU 上的操作系統(tǒng)是VxWorks。其中,NP7250主要實現(xiàn)級連線卡的作用,完成基本信元/包的轉發(fā)功能;NPX5700 是流量控制芯片,實現(xiàn)對數(shù)據流的輸入接納和輸出調度功能,是IP開發(fā)平臺QoS保證的核心,兩套NPX5700構成雙向10 Gbps的處理能力;NPX5800 是一種交換網芯片,用于連接NPX5700,實現(xiàn)交換功能,。[2]
全IP交換平臺系統(tǒng)架構如圖1所示,在嵌入式操作系統(tǒng)VxWorks之上還有一個操作系統(tǒng)子系統(tǒng),該層是VxWorks封裝層。嵌入式操作系統(tǒng)封裝層的目的之一是對上層應用屏蔽底層硬件、OS、網絡的差別,給上層應用軟件提供統(tǒng)一規(guī)范的調用接口,大大降低了應用軟件開發(fā)人員的開發(fā)難度,也使開發(fā)出的應用軟件有較好的跨平臺性、可移植性、可維護性和代碼繼承性。封裝層一般會對進程管理、內存管理、進程通信等核心功能進行重新定義和優(yōu)化,以適應特定應用領域的開發(fā)需求。
下面以通信類嵌入式設備應用領域為背景來討論操作系統(tǒng)子系統(tǒng)中的進程通信管理模塊設計和實現(xiàn)方案。
圖1 全IP交換平臺架構
通信模塊為進程之間的通信提供統(tǒng)一的接口。各個處理器都處于一個以太網上,前臺單板之間互相可以直達,沒有中間路由,前后臺之間通過OMP 轉發(fā)。根據通信區(qū)域的不同可分為:①相同處理器內同一任務下的進程間通信;②相同處理器內不同任務下的進程間通信;③相同處理器內的任務之間的通信;④相同處理器內的進程到任務的通信;⑤相同處理器內的任務到進程的通信;⑥不同處理器間的進程間通信。
底層協(xié)議類型包括可靠通信協(xié)議(TCP)和不可靠通信協(xié)議(UDP)。對話方式主要采用以下5種:①處理器內廣播(內部消息機制);②分布式系統(tǒng)內組播(UDP);③分布式系統(tǒng)內廣播(UDP);④多對多通信(UDP),也就是無連接的點對點通信;⑤點對點通信(TCP 和內部消息機制)。
同一處理器內任務之間通信流程:每個調度任務建立一個郵箱,其他任務也建立自己的郵箱,進程發(fā)送到另一個任務的進程的消息首先發(fā)送到目的進程所在任務的郵箱中進行緩存,然后由調度任務派發(fā)到目的進程的消息隊列中;進程到其他類型任務的消息發(fā)送到相應任務的郵箱,其他類型的任務之間消息發(fā)送到對方郵箱。根據為應用提供的消息類型將任務間消息發(fā)送分類。發(fā)送異步緊迫消息,將消息發(fā)送到任務消息隊列的頭部;發(fā)送異步普通消息,將消息發(fā)送到任務消息隊列的尾部。
同一任務內的進程通信流程如圖2所示,每一個進程擁有一個消息隊列,進程向同一任務內進程發(fā)送,通過內部接口直接將消息掛到另一個進程的消息隊列中。進程向同一任務內進程發(fā)送同步應答消息,不通過任務郵箱,目的進程的狀態(tài)直接改變即可。任務內的進程間通信不能通過任務的郵箱進行轉發(fā),這是為了避免在郵箱滿的時候任務向自己的郵箱發(fā)送消息,導致任務死鎖。
圖2 同一任務內的進程間通信
不同處理器間的進程通信流程如圖3所示,下面根據不同的對話方式分別描述通信處理流程。
圖3 進程間通信流程
①點對點通信。每個需要通信的處理器之間維護一條TCP連接,所有連接組成連接表。進程通過接口發(fā)送的消息首先掛在相應的連接的發(fā)送隊列中。通信任務在連接表中的所有連接上監(jiān)測鏈路狀態(tài),在連接寫就緒時依序發(fā)送連接發(fā)送隊列中的消息,在連接讀就緒時接收連接上的消息并向上層轉發(fā),在連接異常時告警并恢復鏈路狀態(tài),在檢查報到達的時候將鏈路丟失的檢查報清零。
②多對多通信。使用一個公用的UDP套接口,發(fā)送時指定協(xié)議類型為不可靠傳輸協(xié)議的時候,根據邏輯地址查找到對應的IP地址,直接從UDP套接口上發(fā)送出去。組播任務同樣守護在UDP套接口上,當套接口讀就緒的時候接收消息并向上層轉發(fā)。
③組播。采用靜態(tài)分組的方法,每一個組播組對應一個到組播地址,所有這種對應關系組成分組表。每一處理器可以加入特定組播組,也可以隨時脫離組播組。組播任務守護在組播組表的組播套接口上,在套接口讀就緒時接收消息并向上層轉發(fā)。進程直接在組播套接字上發(fā)送消息。
④廣播。分組表中有一個特殊項用作廣播,該組成員為系統(tǒng)內所有處理器,組播任務在該項上守護,進行和上面相同的處理。
⑤處理器內廣播。向同一個進程類型的實例分別發(fā)送一條消息的拷貝。
消息的派發(fā)過程如圖4所示。調度任務從自己的郵箱接收消息,并負責向各個進程的消息隊列中派發(fā),在派發(fā)的過程中區(qū)別消息的類型。根據消息類型描述處理流程,派發(fā)同步應答消息時,將目標進程轉入就緒狀態(tài),設置解除阻塞原因為應答到;派發(fā)同步超時消息時,將目標進程轉入就緒狀態(tài),設置解除阻塞原因為同步超時;派發(fā)延時結束消息時,將目標進程轉入就緒狀態(tài),設置解除阻塞原因為延時結束;派發(fā)其他類型的消息時,將消息掛到目標進程消息隊列尾部,如果目標進程因為沒有消息而阻塞,將目標進程轉入就緒狀態(tài)。
圖4 消息的派發(fā)
TCP連接的狀態(tài)記錄在TCP連接控制塊的狀態(tài)域里面,本端上層應用發(fā)起TCP連接建立請求時,TCP連接的狀態(tài)遷移如圖5所示。①沒有激活狀態(tài):接收到來自上層應用的連接發(fā)起請求后,向對端發(fā)起連接,進入等待寫就緒狀態(tài)。②等待寫就緒狀態(tài):如果接收到本端套接字的寫就緒事件,向對端發(fā)送檢查報,進入等待對端檢查報狀態(tài);如果接收到對端連接請求(連接請求1)并且對端IP地址比自己的IP地址小,拒絕請求,繼續(xù)等待;如果接收到對端連接請求(連接請求2)并且對端IP地址比自己的IP地址大,接收請求,終止本端發(fā)起的連接過程,啟動連接接收的狀態(tài)機。③等待檢查報狀態(tài):收到檢查報后,連接成功,進入工作狀態(tài);如果接收到對端連接請求(連接請求1)并且對端IP地址比自己的IP地址小,拒絕請求,繼續(xù)等待;如果接收到對端連接請求(連接請求2)并且對端IP地址比自己的IP 地址大,接收請求,終止本端發(fā)起的連接過程,啟動連接接收的狀態(tài)機。④工作狀態(tài):如果收到數(shù)據收發(fā)請求,則進行數(shù)據收發(fā),并保持狀態(tài);如果收到連接的關閉請求,則關閉本連接,轉到連接沒有激活狀態(tài);如果收到對端的連接建立請求,則啟動連接的接收狀態(tài)機,并保持現(xiàn)在的連接在工作狀態(tài)。
圖5 發(fā)起TCP連接建立時的狀態(tài)遷移
在上述各種狀態(tài)下收到連接異常的信息都異常關閉連接,轉到連接沒有激活狀態(tài)。
本端收到對端發(fā)起TCP連接建立請求時,TCP連接的狀態(tài)遷移如圖6所示。①沒有激活狀態(tài):接收到對端的連接請求后,進入等待檢查報狀態(tài);②等待檢查報狀態(tài):如果接收到對端的檢查報,進入等待寫就緒狀態(tài);如果接收到對端連接請求,接收請求,終止上次的連接過程,進入等待檢查報狀態(tài);③等待寫就緒狀態(tài):如果收到寫就緒事件,向對端發(fā)送檢查報,連接成功,如果以前存在工作的鏈路,關閉該鏈路,本鏈路投入工作狀態(tài);如果接收到對端連接請求,接收請求,終止本次連接過程,切換到等待檢查報狀態(tài);④工作狀態(tài):如果收到數(shù)據收發(fā)請求,則進行數(shù)據收發(fā),并保持狀態(tài);如果收到連接的關閉請求,則關閉本連接,轉到連接沒有激活狀態(tài);如果收到對端的連接建立請求,則啟動備份連接的建立狀態(tài)機,并保持狀態(tài)。
圖6 接收TCP連接建立時的狀態(tài)遷移
在上述各種狀態(tài)下收到連接異常的信息都異常關閉連接。
(1)消息緩沖隊列
用來管理緩沖的消息的數(shù)據結構。
(2)消息
用來傳遞用戶信息的數(shù)據結構。
(3)連接控制塊
對Tcp連接進行管理的數(shù)據結構,記錄連接狀態(tài)。
(4)TCP套接字維護
對TCP建鏈和連接接收進行管理的數(shù)據結構,控制連接建立過程。
(5)分組表
用來維護處理器分組關系的管理、各個處理器之間組播消息收發(fā)的數(shù)據結構。
通過全IP的開放融合通信體系架構,可以在單一融合的IP網絡上運行語音、消息、會議、數(shù)據等多種通信應用,基本的多業(yè)務接入、多設備集成,逐步發(fā)展到支持各種標準化接口,打造一個全新的一體化集成通信平臺,滿足應用交互通信的需求。[3]
[1]郭曉軍.構建全IP的開放融合通信平臺[EB/OL].(2009 06 08)[2011 03 23].http://www.h3c.com.cn/Technology_Doc/200906/663303_30003_0.html.
[2]AMCC.nPX5700 Network Processor Program Manual and Application Note,2004.
[3]龍夫軍.平臺與應用的融合[J].中國計算機技術用戶,2009,20(11):34 36.