📜  多处理器系统中的缓存一致性协议

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

先决条件–缓存
在多个进程需要相同内存块副本的多处理器系统中,维护这些副本之间的一致性会引发一个称为“缓存一致性问题”的问题。
发生这种情况主要是由于以下原因:-

  • 共享可写数据。
  • 流程迁移。
  • 由于I / O导致的不一致。

缓存一致性协议:
这些解释如下:

1. MSI协议:
这是在多处理器系统中使用的基本缓存一致性协议。协议名称字母标识高速缓存可能处于的状态。因此,对于MSI,每个块可以具有以下可能状态之一:

  • 修改的 –
    该块已在高速缓存中被修改,即高速缓存中的数据与后备存储(内存)不一致。因此,具有“ M”状态的块的高速缓存负责在该块被逐出时将其写入后备存储。
  • 共享–
    该块未修改,并且存在于至少一个高速缓存中。高速缓存可以逐出数据而无需将其写入后备存储。
  • 无效的 –
    该块无效,如果要存储在此高速缓存中,则必须从内存或另一个高速缓存中获取。

2. MOSI协议:
该协议是MSI协议的扩展。它在MSI协议中添加以下状态:

  • 拥有–
    它指示当前处理器拥有此块,并将服务于其他处理器对该块的请求。

3. MESI协议–
它是使用最广泛的缓存一致性协议。每条缓存行都标记有以下一种状态:

  • 修改的 –
    这表明高速缓存行仅存在于当前高速缓存中并且是脏的,即其值与主存储器不同。在允许任何其他读取无效的主存储器状态之前,需要高速缓存将来将数据写回到主存储器。
  • 独家的 –
    这表明高速缓存行仅存在于当前高速缓存中并且是干净的,即其值与主内存值匹配。
  • 共享–
    它指示此高速缓存行可以存储在计算机的其他高速缓存中。
  • 无效的 –
    它指示此缓存行无效。

4. MOESI协议:
这是一个完整的缓存一致性协议,其中包含其他协议中通常使用的所有可能状态。每个高速缓存行处于以下状态之一:

  • 修改的 –
    这种状态下的高速缓存行会保存最新,正确的数据副本,而主内存中的副本是不正确的,并且没有其他处理器可以保存副本。
  • 拥有–
    处于此状态的高速缓存行保存最新,正确的数据副本。这类似于共享状态,因为其他处理器可以保存最新的正确数据的副本,但是与共享状态不同,主内存中的副本可能不正确。只有一个处理器可以将数据保存为拥有状态,而所有其他处理器必须将数据保存为共享状态。
  • 独家的 –
    处于此状态的高速缓存行保存最新,正确的数据副本。主存储器副本也是最新的,正确的数据副本,而没有其他副本保存数据副本。
  • 共享–
    处于此状态的高速缓存行保存最新,正确的数据副本。系统中的其他处理器也可以将数据副本保持为共享状态。如果没有其他处理器将主存储器副本保持为拥有状态,则主存储器副本也是该数据的最新,正确副本。
  • 无效的 –
    此状态下的高速缓存行不保存有效的数据副本。有效的数据副本可以位于主内存中,也可以位于另一个处理器缓存中。