多个CPU可以同时写入相同的RAM位置吗?

时间:2009-02-05 17:30:51

标签: architecture memory synchronization cpu

机器字大小(或更小)是否序列化?只需要一个本机操作码即可将寄存器内容复制到RAM。

6 个答案:

答案 0 :(得分:4)

将数据写入RAM是原子的。如果两个CPU尝试同时写入同一位置,则内存控制器将决定写入的某些顺序。当一个CPU写入存储器时,另一个CPU将根据需要停止多个周期,直到第一次写入完成为止;然后它会覆盖它的价值。这就是所谓的race condition

小于本机字大小的写入不是原子的 - 在这种情况下,CPU必须将旧存储器值读入寄存器,将新字节写入寄存器,然后将该新值写回存储器

你永远不应该有依赖于此的代码 - 如果你有多个CPU试图同时写入同一个内存位置,那你就做错了。

另一个重要的考虑因素是cache coherency问题。每个CPU都有自己的缓存。如果CPU将数据写入其缓存,则需要让其他CPU知道对该数据值的更改,如果他们想要读取它。

答案 1 :(得分:2)

没有什么可以阻止你在低级别上这样做。然而,RAM写入是原子的,因此内存控制器将按顺序执行2个看似模拟的内核写入。

答案 2 :(得分:0)

两个CPU可能同时发出命令,但RAM控制器是否必须单独处理它接收的每个命令?因此,也许CPU可以同步,但RAM控制器将确定首先处理哪个命令。

答案 3 :(得分:0)

它们不应该是因为如果写入不同的值,则不会指定生成的RAM内容。

答案 4 :(得分:0)

本地操作码是否更有可能写入CPU缓存而不是直接写入RAM?

答案 5 :(得分:0)

他们可以尝试,但硬件将是所发生事情的最终决定因素。