2013-01-16 69 views
4

情況是我有兩塊板通過PCIE總線連接在一起。一個板是根端口,一個板是端點。端點端將一個內存區域導出到根端口。保護多處理器中的共享內存區域

兩塊板卡之間的通信是通過軟件消息隊列實現的。隊列元數據和緩衝區都位於導出的內存區域內。

雙方可以同時訪問內存區域(根端口通過它的PCIE總線,端點通過它的本地總線)。當雙方嘗試更新隊列元數據時,這可能會導致問題。首先,我試圖在相同的輸出內存區域分配一個spinlock_t,但由於每個板卡都是單處理器,所以the spinlock_t仍然未被分配。

有人可以請建議一種機制來保護共享區域或推薦其他方法在兩塊電路板之間進行通信。任何建議表示讚賞。非常感謝!

+0

我想你應該嘗試用信號量來代替螺旋鎖......因爲在單處理器系統中螺旋鎖沒有用處! – akp

回答

1

感謝您對此感興趣。

我們終於實現了與循環隊列的共享內存通信。實現可以參考這個link。我們將問題簡化爲單個生產者單個消費者,因此循環隊列不需要鎖定來保護。這種方法的侷限性是我們必須爲每個對等連接創建一個隊列。

在PCIE規範中,也有部分描述了原子操作,不幸的是我們的PCIE主機控制器不支持這個功能,所以我們不能使用這個功能。