1

我正在研究一个只有一个共享内存区域和一些 GPIO/IRQ 连接的 2 个 CPU 的架构。它们是完全独立的,因此它们不共享任何缓存。然而,计划是让两者都在共享内存中的同一个 Linux OS 映像中执行。我想知道共享内存、信号等 IPC 机制如何工作?由于两个 CPU 在同一个 RAM 中执行,只要这些机制保存在 RAM 中,那么我假设当一个 CPU 去检查共享内存区域的状态时,只要没有一致性问题,它就可以工作。在这种设置中信号(软件中断)如何工作?这一切都在RAM中处理吗?会有连贯性问题吗?

4

1 回答 1

0

假设您谈论的是 SMP 配置,即具有多个 CPU 的大多数台式机/低端服务器机器,那么您应该永远不会看到任何一致性问题,尽管您可能会面临大面积共享内存的性能问题。例如,如果每个处理器(集合 {0, 1})在其缓存中都有一些内存行,并且处理器 0 写入该行,它将更新它的缓存。如果内存位置设置为标记,它应该直写到该内存位置,并且另一个处理器的内存控制器将重新加载或使其对该行的缓存无效。

这在当代 CPU 中有些复杂,因为每个 CPU 模块都有自己的内存控制器,因此也有自己的专用内存。因此,由芯片内部的内存控制器来协商共享哪些缓存线,如果它们被某些处理器内核修改,则使共享缓存线无效。如果您想了解默认情况,您可以阅读MESIF 协议,英特尔至强 CPU 使用该协议来保持多个处理器模块系统中的缓存一致性。但底线是,在 SMP 系统中,您永远不应该看到不连贯的共享内存状态 - 只有当多个内核敲击同一内存区域时才会出现性能下降。

于 2012-10-04T19:15:24.317 回答