Architecture 多个CPU能否同时写入同一RAM位置?

Architecture 多个CPU能否同时写入同一RAM位置?,architecture,memory,synchronization,cpu,Architecture,Memory,Synchronization,Cpu,机器字大小(或更小)的写入是否序列化?将寄存器内容复制到RAM只需要一个本机操作码 两个CPU可以同时发出命令,但是RAM控制器不需要单独处理它接收到的每个命令吗?因此,对于CPU来说,这可能是同时进行的,但RAM控制器将确定首先处理谁的命令。没有什么可以阻止您在低级别上执行此操作。但是,RAM写入是原子的,因此,内存控制器将按顺序从内核执行两次看似模拟的写入操作。它们不应该这样做,因为如果写入不同的值,则生成的RAM内容将不确定。本机操作码写入CPU缓存的可能性不是比直接写入RAM的可能性更大

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

两个CPU可以同时发出命令,但是RAM控制器不需要单独处理它接收到的每个命令吗?因此,对于CPU来说,这可能是同时进行的,但RAM控制器将确定首先处理谁的命令。

没有什么可以阻止您在低级别上执行此操作。但是,RAM写入是原子的,因此,内存控制器将按顺序从内核执行两次看似模拟的写入操作。

它们不应该这样做,因为如果写入不同的值,则生成的RAM内容将不确定。

本机操作码写入CPU缓存的可能性不是比直接写入RAM的可能性更大吗?

它们可以尝试,但硬件将是最终的决定因素。

将数据写入RAM是原子的。如果两个CPU试图同时写入同一位置,内存控制器将决定写入的顺序。当一个CPU向内存写入时,另一个CPU将暂停尽可能多的周期,直到第一次写入完成;然后它将覆盖其值。这就是我们所知道的一个问题

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

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


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

事实上,它将是提交到内存中写入管道的最新数据寄存器的值controller@xelurg:我同意。但在这种情况下,实际写入不是同时进行的(因为它们必须是流水线的)。换句话说,为同一个内存使用两个独立的写入管道是没有意义的。实际上,这只适用于同一CPU上的内核,而不适用于单独的CPU,对吗?至少,这取决于实现。内存控制器最终决定如何将数据写入RAM。CPU只是向它发出命令,并通过数据总线提供数据,通过地址总线提供地址。CPU缓存不是直写的吗?在原子性的背景下,这有关系吗?我想你指的是微代码,它是应用于CPU内元素的一组信号电平。。。操作码是一个更高的级别-它可以在各种元素集上运行,包括内存和I/O端口。忘了包括微码的链接:yabcok:我的意思是ChrisW在说操作码更可能写入缓存而不是RAM时指的是微码“CPU缓存不是直写的吗?”谷歌建议写操作可以是“回写”而不是“直写”,并且一些(英特尔)CPU使用混合的“回写”和“直写”“直写”。操作码不再像过去那样与硬件级别发生的事情一一对应。这仍然取决于硬件,我所说的硬件是指CPU如何与内存接口。那么读取操作呢?内存控制器会再次决定谁将首先读取,还是两者都可以同时读取?