核間通訊的主要目標是:充分利用硬體提供的機制,實現高效的core
間通訊;給需要core
間通訊的應用程式提供簡潔高效的程式設計介面。
根據所使用的硬體特性,核間通訊可能的實現機制有: 1)
mailbox
中斷;
2)基於共享記憶體的訊息佇列; 3)
pow + group;
4)fau
;支援原子的讀,寫,fetch and add
操作。
每個core
有乙個相應的32bit
的mailbox
暫存器,每一位可被單獨地設定或清零。這對於core
間的中斷非常有用,任意core
可直接通過其它core
的mailbox
對其它core
發出中斷。當mailbox
被置位時,相應core
的中斷暫存器也同時被置位,軟體可實現其中斷處理。
bootloader
支援octeon_phy_mem_named_block_alloc( )
,分配以名字命名的物理記憶體空間,不管是service executive
應用程式還是linux kernel
都可以通過octeon_phy_mem_named_block_find( )
找到這部分記憶體,實現core
之間的共享資料。
linux kernel
也提供了共享記憶體的機制。主要有mmap()
,系統v
,posix
共享記憶體模型等。系統呼叫mmap()
通過對映乙個普通檔案實現共享記憶體。普通檔案被對映到程序位址空間後,程序可以向訪問普通記憶體一樣對檔案進行訪問。系統
v共享記憶體指的是把所有共享資料放在共享記憶體區域(
ipc shared memory region
),任何想要訪問該資料的程序都必須在本程序的位址空間新增一塊記憶體區域,用來對映存放共享資料的物理記憶體頁面。
posix
共享記憶體區首先指定乙個名字引數呼叫shm_open,
以建立乙個新的共享記憶體區物件或開啟乙個以存在的共享記憶體區物件。然後呼叫mmap
把這個共享記憶體區對映到呼叫程序的位址空間。傳遞給shm_open
的名字引數隨後由希望共享該記憶體區的任何其他程序使用。
程序間通訊機制(IPC)
1.訊號機制 主要用於向乙個或多個程序發非同步事件訊號,訊號可以通過鍵盤中斷觸發,也可以有程序訪問虛擬記憶體中不存在的位址這樣的錯誤來產生。訊號機制還可以用於shell向它們的子程序傳送作業控制命令。linux使用存貯在每個程序task struct結構中的資訊實現訊號機制,它支援的訊號數受限於處理...
handler程序間通訊機制
handler在哪個activity或者service執行緒建立,那麼looper就和哪乙個執行緒進行了繫結。如果是自己建立的執行緒那麼就要使用looper中的prepare函式來繫結了。在handler建立後就例項化了乙個looper並關聯了乙個訊息佇列mq。在其他的傳送訊息的執行緒中 接受執行緒...
程序 執行緒間通訊機制
管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序。有名管道也是半雙工的通訊方式,但是它允許無親緣關係的程序間通訊。訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問...