mailbox其實是多核處理器soc上,核與核之間互相發(fā)中斷的機制,由于核與核之間可能存在不同的業(yè)務,故硬件上設計分配一兩個中斷已經(jīng)無法滿足業(yè)務的需求,軟件拓展起來很困難,所以mailbox可以理解為軟件可自由定義的中斷模塊。
用于在片上處理器之間通信的一種mailbox隊列中斷機制,mailbox隊列中斷機制允許軟件通過一組寄存器和關聯(lián)的中斷設置和得到信息在二個處理之間建立通信渠道。
核間通信的主要目標是:充分利用硬件提供的機制,實現(xiàn)高效的CORE間通信;給需要CORE間通信的應用程序提供簡潔高效的編程接口。
根據(jù)所使用的硬件特性,核間通信可能的實現(xiàn)機制有:
- Mailbox中斷;
- 基于共享內(nèi)存的消息隊列;
- POW + Group;
- FAU;支持原子的讀,寫,fetch and add操作。
每個core有一個相應的32bit的mailbox寄存器,每一位可被單獨地設置或清零。這對于core間的中斷非常有用,任意core可直接通過其它core的mailbox對其它core發(fā)出中斷。當mailbox被置位時,相應core的中斷寄存器也同時被置位,軟件可實現(xiàn)其中斷處理。
Bootloader支持Octeon_phy_mem_named_block_alloc( ),分配以名字命名的物理內(nèi)存空間,不管是ServiceExecutive應用程序還是linux kernel都可以通過Octeon_phy_mem_named_block_find()找到這部分內(nèi)存,實現(xiàn)core之間的共享數(shù)據(jù)。
Linux kernel也提供了共享內(nèi)存的機制。主要有mmap(),系統(tǒng)V,Posix共享內(nèi)存模型等。系統(tǒng)調(diào)用mmap()通過映射一個普通文件實現(xiàn)共享內(nèi)存。普通文件被映射到進程地址空間后,進程可以向訪問普通內(nèi)存一樣對文件進行訪問。系統(tǒng)V共享內(nèi)存指的是把所有共享數(shù)據(jù)放在共享內(nèi)存區(qū)域(IPC shared memory region),任何想要訪問該數(shù)據(jù)的進程都必須在本進程的地址空間新增一塊內(nèi)存區(qū)域,用來映射存放共享數(shù)據(jù)的物理內(nèi)存頁面。posix共享內(nèi)存區(qū)首先指定一個名字參數(shù)調(diào)用shm_open,以創(chuàng)建一個新的共享內(nèi)存區(qū)對象或打開一個以存在的共享內(nèi)存區(qū)對象。然后調(diào)用mmap把這個共享內(nèi)存區(qū)映射到調(diào)用進程的地址空間。傳遞給shm_open的名字參數(shù)隨后由希望共享該內(nèi)存區(qū)的任何其他進程使用。
核間通信方案
如下圖所示ARM核和DSP核進行mailbox通信,ARM要發(fā)送數(shù)據(jù)給DSP:
? 1 ARM核先往某個指定的共享內(nèi)存空間buffer寫入數(shù)據(jù),然后MAILBOX觸發(fā)中斷和寫入關于共享內(nèi)存空間的地址信息給DSP。
? 2 DSP通過得到mailbox中斷的信息讀取共享內(nèi)存空間ARM核發(fā)送的buffer數(shù)據(jù)。
? 3 DSP核讀取完數(shù)據(jù)后將觸發(fā)mailbox中斷給ARM作為回應,告訴ARM核你發(fā)送的數(shù)據(jù)我已經(jīng)接受完成了。a

-
處理器
+關注
關注
68文章
20339瀏覽量
255356 -
寄存器
+關注
關注
31文章
5620瀏覽量
130457 -
通信
+關注
關注
18文章
6457瀏覽量
140285 -
soc
+關注
關注
40文章
4635瀏覽量
230301
發(fā)布評論請先 登錄
SoC的核間通信機制—mailbox介紹
關于AM5728核間通信方式(共享內(nèi)存)問題
關于C6678核間IPC通信的問題
非對稱雙核MCU基礎知識及核間通信
一種基于Mailbox核間機制的多核處理系統(tǒng)
進程間通信的機制有哪些
如何實現(xiàn)一套linux進程間通信的機制
核間通信可能的實現(xiàn)機制
評論