加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux-kernel – 保护多处理器中的共享内存区域

发布时间:2020-12-13 23:23:51 所属栏目:Linux 来源:网络整理
导读:情况是我有2块板通过PCIE总线连接在一起.一个板是根端口,一个板是端点.端点端将内存区域导出到根端口端. 两块板之间的通信是通过软件消息队列实现的.队列元数据和缓冲区都位于导出的内存区域内. 双方可以同时访问内存区域(rootport通过其PCIE总线,端点通过其
情况是我有2块板通过PCIE总线连接在一起.一个板是根端口,一个板是端点.端点端将内存区域导出到根端口端.

两块板之间的通信是通过软件消息队列实现的.队列元数据和缓冲区都位于导出的内存区域内.

双方可以同时访问内存区域(rootport通过其PCIE总线,端点通过其本地总线).当双方都尝试更新队列元数据时,这可能会导致问题.

起初,我试图在同一个导出的内存区域分配一个spinlock_t,但由于每个板都是单处理器,所以无论如何都不会分配spinlock_t.

任何人都可以建议一种机制来保护共享区域或建议其他方法在两个板之间进行通信.任何建议表示赞赏.非常感谢!

解决方法

感谢您的兴趣到目前为止.

我们最终用循环队列实现了共享内存通信.可以从link引用该实现.我们将问题减少到单个生产者单个消费者,因此循环队列不需要锁定来保护.这种方法的局限性是我们必须为每个对等连接创建一个队列.

在PCIE规范中,还有部分描述了Atomic Operation,遗憾的是我们的PCIE主机控制器不支持此功能,因此我们无法利用此功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读