文档介绍:Cache 一致性协议实现的基本方法
主讲:周艳芳
副讲:缴万鑫
知识回顾(一)
解决主存速度与CPU速度差距的办法:
Cache --主存存储层次:采用高速缓冲存储器方式
知识回顾(二)
Cache存储器中保存的字块是主存中相应字块的一个副本。如果程序执行过程中要对该字块的某个单元进行读写操作,就会遇到如何保持Cache与主存的一致性问题。
1)不命中时:直接把待写的信息写入主存。
2)命中时:有两种写入方式。
①写回法:只更新Cache单元,并加以标记, 当该块从Cache移出时,再更新相应的主存单元。
②写直达法:Cache单元与主存单元同时写。
写回法速度快,但有一段时间主存内容与 Cache内容不一致;
写直达法能随时保持主存数据的正确性,但有可能增加多次不必要的写主存。
问题引出
Cache数据与主存数据一致是指:在采用Cache的系统中,同样一个数据可能既存在于Cache中,也存在于主存中,两者数据相同则具有一致性,数据不相同就叫做不一致性。如果不能保证数据的一致性,那么,后续程序的运行就要出现问题。
Cache 一致性
目前,在并行系统的产品中大多数都采用基于总线的存储器结构。总线是保证高速缓存一致性的最方便的设备,它允许系统中各个处理机能够监测对存储器进行的所有操作,如果这些操作破坏了本地高速缓存中数据的一致性状态,高速缓存控制器就可以采取相应的动作维护高速缓存的一致性。采用这种机制维护高速缓存一致性的协议的系统中,每个高速缓存都在监听其它高速缓存的操作,所以称为监听总线协议。而对于可扩展多处理机系统,常常采用互连网络实现多处理机互连,其网络带宽随着处理机数目的增加而增大,但是这些网络没有方便的监听机制,也难于进行有效的广播,所以常常采用基于目录的协议。下面分别对这两类协议进行介绍。
解决Cache一致性问题的两种协议
1)每个高速缓存复本可能出现的四种状态
(1)有效(Valid)与主存复本一致的高速缓存复本,即该复本未经修改,所以这个复本不是唯一的正确复本。别的高速缓存中也可能存在该数据块的有效复本。
(2)保留(Reserved)这一高速缓存的复本是第一次被修改,并采用写通过方法写入主存。所以这个高速缓存中的复本与主存中的复本是一致的。而且系统中也只有这两个复本是有效的。
(3)重写(Dirty)高速缓存中的复本不止一次被修改过,由于不再采用写通过的方法,所以这个高速缓存中的复本是唯一的有效复本,与主存和其他高速缓存中的复本都不一致。主存中的复本也是无效的。
(4)无效(Invalid)与主存中和其他高速缓存中的复本不一致或在高速缓存中根本没有该复本。
2)进行高速缓存操作时用到的信号
(1)P-Write:本地处理机写自己的高速缓存复本
(2)P-Read:本地处理机读自己的高速缓存复本
这两条命令都是局部/本地命令
(3)Write- inv:远程高速缓存在写命中时在总线上广播一个无效命令
(4)Read-inv:远程高速缓存在写缺失时在总线上广播一个无效命令
(5)Read-blk:从另外一个高速缓存中读出一份有效复本。
这两条属于一致性命令
3)写操作可能遇到的几种情况
(1)如果C1 为VALID,写C1 时,则写命中(Write hit)
a. 如果内存单元所在的块在高速缓存中,则可以写高速缓存命中。
b. 如果内存单元所在的块不在高速缓存中,则写缺失,将内存单元所在块读入高速缓存,再进行写操作发P-Write 修改C1 内容,修改内存,发Write-Inv 给所有高速缓存,使它们的状态变为无效。同时使本地的高速缓存中数据块的状态变Reserved。
(2)如果C1 为Reserved,对C1 进行写操作时,则写命中。发P-Write 命令修改C1内容,不修改内存中的复本,C1 状态变为Dirty
(3)如果C1 为Dirty,写C1 时则写命中。发出P-Write 命令修