【发布时间】:2013-05-23 07:36:22
【问题描述】:
我打算在双核 ARM Cortex-A9 CPU 上运行一个操作系统(一个内核运行 Linux,另一个没有操作系统)。
在无操作系统端,我们将 64 位 double 写入 DDR 内存,然后 Linux 端读取它。
因为 CPU 有一条 32 位总线到 DDR,所以值在两个总线周期内传输,这意味着如果在总线上混合写入和读取,则值可能会被破坏。
我该怎么做才能让它以安全的方式工作?
【问题讨论】:
-
“一个是Linux,另一个没有操作系统”——那么“两个不同的操作系统”在哪里?
-
@H2CO3 我的错误,已编辑
-
你必须实现一个跨核互斥体。您可能可以查看 Linux 互斥锁的实现并复制它。
-
@Mats Petersson 是的,linux 可以使用 spin_lock,但是其他内核没有操作系统,它无法识别 spin_lock。
-
这是 ldrex/strex 对的用途,它们不是用于锁定资源(在单个内核中,因为它们在 linux 和其他地方被错误地使用),而是用于保护内核之间的内存多核处理器。