📜  缓存一致性

📅  最后修改于: 2021-06-28 16:11:36             🧑  作者: Mango

先决条件–缓存

缓存一致性:
在多处理器系统中,数据不一致可能发生在内存层次结构的相邻级别之间或同一级别内。

在一个共享内存多处理器中,每个处理器都有一个单独的高速缓存存储器,可以有任意一个指令操作数的多个副本:主内存中一个副本,每个高速缓存中一个副本。当操作数的一个副本被更改时,该操作数的其他副本也必须被更改。

例子 :
高速缓存和主内存可能具有相同对象的不一致副本。

假设有三个处理器,每个处理器都有高速缓存。假设以下情况:

  • 处理器1读取X:从内存中获取24并将其缓存。
  • 处理器2读取X:从内存中获取24并将其缓存。
  • 处理器1再次写为X: 64,它的本地缓存副本被更新。现在,处理器3读取X,它应该得到什么值?
  • 内存和处理器2认为是24,处理器1认为是64。

由于多个处理器并行运行,并且多个缓存可能独立拥有同一内存块的不同副本,因此会产生缓存一致性问题。

缓存一致性是确保共享操作数的值的更改及时在整个系统中传播的准则。

缓存一致性分为三个不同的级别:

  1. 每个写操作似乎都是瞬时发生的。
  2. 对于每个单独的操作数,所有处理器都可以看到完全相同的值更改序列。
  3. 不同的处理器可能会看到一个操作并采用不同的值序列。这被称为非相干行为。

多处理器系统中存在各种缓存一致性协议。这些都是 :-

  1. MSI协议(已修改,共享,无效)
  2. MOSI协议(已修改,拥有,共享,无效)
  3. MESI协议(已修改,互斥,共享,无效)
  4. MOESI协议(已修改,拥有,互斥,共享,无效)

这些重要术语的讨论如下:

  • 修改的 –
    这意味着缓存中的值是脏的,即当前缓存中的值与主内存不同。
  • 独家的 –
    这意味着缓存中存在的值与主存储器中存在的值相同,即该值是干净的。
  • 共享–
    这意味着缓存值保存了最新的数据副本,这也是所有缓存和主内存之间共享的值。
  • 拥有–
    这意味着当前的高速缓存保存该块,并且现在是该块的所有者,即对该特定块具有所有权限。
  • 无效的 –
    这说明当前缓存块本身无效,需要从其他缓存或主存储器中获取。

有关上述协议的详细信息,请参阅:-缓存一致性协议

一致性机制:
一致性有三种类型:

  1. 基于目录–
    在基于目录的系统中,要共享的数据放置在一个公共目录中,该目录可维护缓存之间的一致性。该目录充当过滤器,处理器必须通过该过滤器来请求权限,以将条目从主内存加载到其缓存中。更改条目时,目录将使用该条目更新其他缓存或使其他缓存无效。
  2. 窥探–
    监听于1983年首次引入,侦听是一个过程,其中单个缓存监视地址线以访问对其缓存的存储位置。这称为写无效协议。当观察到对高速缓存具有副本的位置的写入操作,并且高速缓存控制器使它自己的监听内存位置副本无效。
  3. 咆哮–
    它是一种机制,当第二个主控制器修改主存储器中的位置时,高速缓存控制器会同时监视地址和数据,以尝试更新其自己的存储器位置副本。当观察到对高速缓存具有副本的位置的写入操作时,高速缓存控制器将使用新数据更新其自己的被封存存储位置副本。