在每个处理器都有自己缓存副本的多处理器系统中,处理器如何知道从哪里获取数据的副本。因为它将存在于它自己的高速缓存中,也存在于其它相应处理器或主存储器的高速缓存中,即它将如何知道哪个副本是最新的副本
发布于 2013-09-08 08:01:36
在典型的现代高速缓存一致性系统中,如果存储器地址的内容存在于多个高速缓存中,则它们的内容将是相同的。使用典型的基于无效的一致性机制,为了让处理器更改内容,它必须获得该内存块的独占所有权。这是通过使任何副本无效来完成的。来自先前缓存了该块的处理器的任何后续请求都将导致未命中(该块被无效),并且一致性操作将在写入处理器的缓存中找到更新的内容。
(在使用直写式高速缓存的高速缓存一致性的早期实现中,可以窥探到存储器的公共总线以获取任何内容更改。类似地,改变内容的处理器可以向任何共享者广播或多播改变。这些方法将保持缓存的内容不变。)
这个过程的一个更微妙的方面是内存一致性--不同的处理器如何查看对不同地址的内存访问的顺序。对于顺序一致性,所有处理器都会看到系统中每个读写操作的单一顺序。这是最容易理解的一致性模型,但是为了支持更大的并行操作硬件复杂度增加(例如,不是等待确认不存在排序冲突,如果发生排序冲突,处理器可以推测性地继续执行并回滚到先前已知的正确状态)。
宽松的一致性模型允许不同处理器之间的读取和写入具有不一致的顺序。为了提供更强的排序保证,提供了内存屏障操作。这些操作保证执行屏障操作的处理器的程序顺序后面的某些类型的存储器访问将被所有其它处理器观察到发生在屏障之后,并且屏障之前的所有处理器将观察到某些类型的存储器访问(对于该处理器来说是更早的)。
使用松弛一致性模型的系统可以通过在每次存储器访问之后使用存储器屏障来提供与顺序一致性模型系统相同的行为。然而,使用宽松模型的系统通常不会很好地处理这种过度使用障碍的问题,因为它们旨在利用对内存排序的宽松要求。
https://stackoverflow.com/questions/18670948
复制相似问题