天天看點

深入了解DM8168中的線程通信

多核異構的硬體基礎:共享存儲區和寄存器和中斷的設計。

寄存器和中斷用來實作各個核中程序間的事件的通信,共享存儲區用來實作各個核之間的資料的傳遞與共享。

1+《基于T264的編碼器在多核異構處理器上的設計與實作_王嬌》這篇文章講的非常詳細

包括本地通信流程,異地通信流程。

在存儲器 DDR3 中開辟多核之間可以共享的緩沖區,每個通道所映射緩沖區位址獨立, 以供多核之間進行資料傳遞

link 在視訊資料流中是最基本的單元子產品 , 每個

link 中包含了一個基于 BIOS6/Linux 的任務 、 線程、

消息盒( 使用作業系統的信号量實作 ) 。 由于每個 link

運作一個獨立的線程 , 是以各個 link 之間可以并行

運作 。 消息盒是關聯使用者指定的 link , 讓 link 之間有

個互相對話的機制 , 用來傳遞信令 。 而對于視訊流數

據 、 原始圖像資料的傳遞 link 實作了專門的接口來

實作 ,隻傳遞指針,而不是資料 。 基于 link 結構 , 視訊

處理的流程中 , 所有工作量就可以均衡到每個處理

器核心上去執行

Mailbox 為處理器提供了通過寫寄存器向其他處理器發送中斷的機制 

DM8168 通過自旋鎖( Spinlock )實作了系統共享資源的互斥

根據這 linkId 判斷這個消息是發給本地的 link 還是遠端處理器的 link ;

如果是本地的直接調用 BIOS/LINUX API 函數,否則就通過 Syslink 子產品的 MessageQ 發送這

個消息到指定的處理器,讓其調用對應的函數處理

link 之間使用緩沖隊列進行幀交換 ,沒有了解FULL隊列和EMPTY隊列

getFullFrames :該 link 從裝置驅動擷取視訊資料;

putEmptyFrames :歸還該 link 的幀 buffer 

當一個 link 采集完或處理完一幀資料後會發送一

個消息“ SYSTEM_CMD_NEW_DATA” 給後向的 link ,通知它有資料可取; 後向 link 收到該

消 息 後 可 調 用 System_getLinksFullFrames() 函 數 來 獲 取 幀 數 據 , 處 理 完 後 再 調 用

System_putLinksEmptyFrames() 函數來歸還給前向 link 繼續使用   為什麼要歸還

讀取上一個Link的資料資訊 如果需要處理幀,則配置設定空buffer 将處理之後的buffer指針傳遞給輸出隊列,并且通知下一個Link

繼續閱讀