0

以SMP(对称多处理)机器为例,该机器中有两个单独的处理器。SMP中的缓存一致性更新

这里如果两个线程在两个不同的处理器上运行并共享一些数据。

该共享数据保存在两个运行线程的两个不同处理器的缓存中。因此,如果线程1(在furst处理器中运行)更新其缓存中的共享数据的值,那么运行在第二个处理器上的线程将无法获取更新的数据?

此问题是否正确? 这个问题如何解决?

回答

1

这是用缓存一致性硬件解决的。

现代多核处理器使用复杂的高速缓存一致性协议。虽然理解这些协议的复杂性可能没有用处,但理解其背后的基本概念是非常有价值的。了解MESI protocol是一个很好的起点。

通常,在处理器可以执行对可缓存内存块的缓存写入之前,其缓存必须专门保存该内存。也就是说,没有其他处理器可以缓存它。

因此,如果第一个处理器写入内存区域,它将使用缓存间协议专门在其缓存中获取该内存。如果第二个处理器尝试读取该区域的内存,则它不会在其缓存中找到它,并使用缓存间协议与第一个处理器共享最新版本。

如果第二个处理器想要写入该区域的内存,它将使用缓存间协议来使其他处理器的缓存副本无效。这会迫使第一个处理器在读取它之前重新获取(可能已修改的)版本。

实际的细节可能因硬件细节而异。没有现代化的多核CPU需要将数据写回主内存,以使其他内核可见。

+0

太棒了,感谢Link @David Schwartz –

+0

在ARM的情况下,我可以说“Cache Coherent Interconnect”是一个例子吗? –