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

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

概述情况是我有2块板通过PCIE总线连接在一起.一个板是根端口,一个板是端点.端点端将内存区域导出到根端口端. 两块板之间的通信是通过软件消息队列实现的.队列元数据和缓冲区都位于导出的内存区域内. 双方可以同时访问内存区域(rootport通过其PCIE总线,端点通过其本地总线).当双方都尝试更新队列元数据时,这可能会导致问题. 起初,我试图在同一个导出的内存区域分配一个spinlock_t,但由于每 情况是我有2块板通过PCIE总线连接在一起.一个板是根端口,一个板是端点.端点端将内存区域导出到根端口端.

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

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

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

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

解决方法 感谢您的兴趣到目前为止.

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

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

总结

以上是内存溢出为你收集整理的linux-kernel – 保护多处理器中的共享内存区域全部内容,希望文章能够帮你解决linux-kernel – 保护多处理器中的共享内存区域所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1019626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存