先决条件–缓存
在多个进程需要相同内存块副本的多处理器系统中,维护这些副本之间的一致性会引发一个称为“缓存一致性问题”的问题。
发生这种情况主要是由于以下原因:-
- 共享可写数据。
- 流程迁移。
- 由于I / O导致的不一致。
缓存一致性协议:
这些解释如下:
1. MSI协议:
这是在多处理器系统中使用的基本缓存一致性协议。协议名称字母标识高速缓存可能处于的状态。因此,对于MSI,每个块可以具有以下可能状态之一:
- 修改的 –
该块已在高速缓存中被修改,即高速缓存中的数据与后备存储(内存)不一致。因此,具有“ M”状态的块的高速缓存负责在该块被逐出时将其写入后备存储。 - 共享–
该块未修改,并且存在于至少一个高速缓存中。高速缓存可以逐出数据而无需将其写入后备存储。 - 无效的 –
该块无效,如果要存储在此高速缓存中,则必须从内存或另一个高速缓存中获取。
2. MOSI协议:
该协议是MSI协议的扩展。它在MSI协议中添加以下状态:
- 拥有–
它指示当前处理器拥有此块,并将服务于其他处理器对该块的请求。
3. MESI协议–
它是使用最广泛的缓存一致性协议。每条缓存行都标记有以下一种状态:
- 修改的 –
这表明高速缓存行仅存在于当前高速缓存中并且是脏的,即其值与主存储器不同。在允许任何其他读取无效的主存储器状态之前,需要高速缓存将来将数据写回到主存储器。 - 独家的 –
这表明高速缓存行仅存在于当前高速缓存中并且是干净的,即其值与主内存值匹配。 - 共享–
它指示此高速缓存行可以存储在计算机的其他高速缓存中。 - 无效的 –
它指示此缓存行无效。
4. MOESI协议:
这是一个完整的缓存一致性协议,其中包含其他协议中通常使用的所有可能状态。每个高速缓存行处于以下状态之一:
- 修改的 –
这种状态下的高速缓存行会保存最新,正确的数据副本,而主内存中的副本是不正确的,并且没有其他处理器可以保存副本。 - 拥有–
处于此状态的高速缓存行保存最新,正确的数据副本。这类似于共享状态,因为其他处理器可以保存最新的正确数据的副本,但是与共享状态不同,主内存中的副本可能不正确。只有一个处理器可以将数据保存为拥有状态,而所有其他处理器必须将数据保存为共享状态。 - 独家的 –
处于此状态的高速缓存行保存最新,正确的数据副本。主存储器副本也是最新的,正确的数据副本,而没有其他副本保存数据副本。 - 共享–
处于此状态的高速缓存行保存最新,正确的数据副本。系统中的其他处理器也可以将数据副本保持为共享状态。如果没有其他处理器将主存储器副本保持为拥有状态,则主存储器副本也是该数据的最新,正确副本。 - 无效的 –
此状态下的高速缓存行不保存有效的数据副本。有效的数据副本可以位于主内存中,也可以位于另一个处理器缓存中。