一、分區內通信方法
分區內通信指同一分區內進程之間的通信。ARINC 653定義的分區內進程通信機制,包括:緩存隊列(Buffers-Queue)、黑板(Blackboards)、信號量(Semaphores)和事件(Events)。其中緩存隊列和黑板用於進程間通信,信號量和事件用於進程間同步與互斥。
緩存隊列
黑板在任何時刻最多只保留一個消息,消息允許覆蓋。
信號量提供對資源的受控訪問;
事件通過通知等待進程某種條件的發生來支持進程間同步控制。
1.緩存隊列
-
消息緩存(message buffer)在發送過程中,等待發送的消息按照先進先出次序存放在緩存隊列中。緩存隊列中可存放消息的數量由創建時緩存區的大小決定。
-
接收消息的進程按照先進先出或優先級次序原則排隊接收緩存消息。在按優先級次序排隊的情況下,相同優先級的接收進程按照先進先出原則排隊。接收消息的進程的排隊原則在緩存隊列創建時定義。
-
如果多個進程等待一個緩存隊列,當這個緩存隊列不空,則排隊原則(先進先出原則或者優先級原則)將決定哪個進程獲得消息。操作系統將把該進程從等待隊列中移出,並置為就緒態,並將消息從緩存隊列中移出。
-
如果一個進程試圖從空緩存隊列中接收消息,或者發送消息到滿的緩存隊列,操作系統將產生進程重調度,該進程將被放入等待隊列中,等待一段指定的時間,如果在該段時間內沒有消息被接收或者發送,操作系統將自動從隊列中移出該進程,將其置為就緒狀態。

2.黑板
-
通過黑板,可以將消息發布給分區內的所有進程
-
黑板中的消息不允許排隊,任何寫到黑板的消息將一直保持直到被清除或者被新消息覆蓋。這就允許發送進程在任何時刻都能發送消息,允許接收進程在任何時刻都可以訪問最新的消息。
-
分區內任何進程可以從黑板上讀取消息、在黑板上寫一個消息或者清空黑板。
-
如果進程試圖從空黑板中讀取消息,操作系統將產生進程重調度,該進程將被放入等待隊列中,等待一段指定的時間,如果在該段時間內沒有消息到達,操作系統將自動從隊列中移出該進程,將其置為就緒狀態。
-
當有消息到達黑板上時,操作系統將從進程等待隊列中移出所有等待進程,將他們置為就緒狀態,而消息仍然保留在黑板上。當黑板被清除時,黑板變為空狀態。

3.信號量
-
提供對資源的受控訪問,用於進程間的同步和互斥
-
兩種信號量:計數信號量和互斥信號量
-
計數信號量功能與標准一致,用於多個資源的互斥訪問
-
互斥信號量作為擴展功能,既可以實現同步,也可以實現互斥,且可以嵌套訪問
-
等待信號量的進程可以按照先進先出原則,也可以按照優先級次序原則在隊列中排隊。在優先級次序條件下,同等優先級的進程按照先進先出原則排隊。
4.事件
-
事件是一種進程通信機制:它可以把某種發生的情況告知等待該情況的進程。事件是由一個二值狀態變量(狀態為“有效態(UP)”和“無效態(DOWN)”)和一組等待進程組成。
-
同一分區內的進程可以設置和清除事件。事件創建時,被設置為“無效態”。為了通知事件條件的發生,可以設置指定的事件為“有效態”,此時,所有等待該事件的進程從等待狀態變為就緒狀態,然后進入重調度。等待事件的進程執行順序應該只依賴於分區內進程調度規則。
-
進程可以同時等待超過一個以上的事件,事件相互之間是獨立的。
-
事件不排隊、不攜帶或傳輸數據。
二、分區間的通信方法
1.概念
分區間通信是指在同一核心模塊或不同核心模塊上運行分區之間的通信。分區間通信可分為四類:
a) 同一核心模塊內分區間的通信;
b) 同一機箱內不同核心模塊上的分區間的通信;
c) 不同機箱的分區間的通信;
d) 航空電子系統與其它設備之間的通信。
所有的分區間通信都基於消息進行,消息從單個的源發出,到一個或多個目的地。消息的目的地是分區而不是分區內的進程。通過消息連接分區的基本機制是通道(channel)。通道指定從源到目的地的消息傳遞模式,以及要發送的消息的特性。
分區通過已定義的訪問點訪問通道,訪問點稱為端口(port)。通道由端口以及相關的資源組成,端口提供資源以允許分區在特定的通道中發送或接收消息。

2.方式
通道可以分布在組成系統的各個核心模塊上,每個通信節點(核心模塊,網關,I/O模塊等)可以通過配置表單獨配置。系統設計人員必須確保每個通道的不同端口有一致性的配置,而源、目的、傳遞模式和每個通道的唯一性不會在運行時改變。通道的消息傳遞模式包含兩種:采樣模式和隊列模式。
分區間消息被定義為有限長度的連續數據塊,分Fixed/Variable Length、Periodic/Aperiodic、Broadcast, Multicast and Unicast Messages。固定長度且允許覆蓋的采樣方式和可變長度且不允許覆蓋的隊列方式。
(1)隊列模式
-
隊列方式不允許在傳遞中覆蓋先前的消息,即消息在隊列方式中不會丟失。
-
通道中以隊列方式運行的端口允許緩沖多個消息,源分區發送的消息存儲在源端口的消息隊列中,直到被發送;當消息到達目的端口后,消息將緩存在目的端口的消息隊列中。消息隊列通過通信協議來管理,以先進先出順序將消息從源端口發送到目的端口。
-
隊列方式支持變長消息,它允許對消息進行分割和重組。如果不直接支持變長消息的發送,源端口必須將消息分解成一系列固定長度的分段,目的端口必須重組這些分段。分段的長度應小於或等於通道內所有端口可接受的最大未分割長度。
-
適用范圍:適用於需要連續數據的通信方式
(2)采樣模式
-
在采樣方式下,消息保持在采樣端口直到被發送或者被新的消息所覆蓋。采樣方式允許源分區在任何時間發送消息,每個新的消息覆蓋當前消息並持續到被覆蓋。目的分區在任何時間訪問最新的廣播消息。
-
采樣方式下沒有消息隊列,不允許對消息進行分割,必須為每個通道定義最大未分割消息長度。只有固定長度的消息允許以采樣方式發送。
-
此模式下端口的運行方式與共享存儲區相似
-
接收者不會以等待方式讀數據
-
數據一致性可以保證
-
適用范圍:適用於需要最新數據的通信方式

如有侵權,告知必刪。

