用于对称多处理器系统中(每个处理器地位相同,且都有内置的Cache),保证高速缓存与主存的数据一致性。
Cache行有四种状态
1.Invalid:数据无效
2.Valid:该行与主存对应块的数据相一致,且不唯一(其它CPU的Cache中可能也有对应内存块数据)
3.Reserved:该行与主存对应块的数据相一致,且唯一(其它CPU的Cache中没有对应内存块数据)
4.Dirty:该行与主存对应块的数据不一致
Cache行状态的演变
1.读命中:从Cache中取数据,行状态不变。
2.读缺失:从主存中读数据块到Cache。其它Cache嗅探到这个读操作,若其中任何一个Cache有缓存这块数据,且处于Dirty状态,则读操作被中断,那个Dirty数据被写回主存,然后继续读操作。任何与该内存块对应的、状态为Dirty或Reserved的Cache行,其状态改为Valid.
3.写命中:若命中的Cache行状态为Dirty或Reserved,则只更新该Cache行,且该行的状态设为Dirty.若命中行状态为Valid,则同时写Cache和主存,并将命中行的状态改写Reserved.其它Cache嗅探到写操作,将相应内存块的Cache行状态置为Invalid.
4.写缺失:先按读缺失处理,再按写命中处理。最终的结果是包含对应块的其它Cache的对应行状态被置成Invalid,当前Cache的对应行状态为Reserved.
总结:
1、读操作:如果其他cache有dirty数据,就先把dirty数据先写入主存,然后再读取到当前cache;最后将所有持有该内存块对应的cache行,状态都要被置为valid;
2、写操作:写完之后,只有当前cache状态为dirty(原始状态为dirty或者reserved),或者reserved(原始状态为valid);其他cache状态都为invalid;