更多期末复习笔记欢迎访问我的博客:Miuuu · 语雀
Cache的写操作说的就是:你想把从图书馆(主存)借回来放在宿舍书架上(Cache)的书(副本)进行改动后,图书馆的书(原本)也要进行改动且与你在宿舍对副本改完之后的版本一致。(你自己就是CPU,你说了算,你要怎么改,无论副本原本都要按你的改)
由于Cache的内容只是主存部分内容的副本,他应当与主存内容保持一致。而CPU对Cache的写入更改了Cache的内容。如何与主存内容保持一致,可选用如下三种写操作策略:
(1):写回法:
CPU写Cache命中时,只修改Cache的内容,而不立刻写入主存(只在宿舍改副本,不去图书馆改原本),只有当该行被替换出时才写回主存(要还这本书回图书馆时才去图书馆改原本)。
此方法使得Cache真正在CPU——主存之间在读/写两方面都起到高速缓存的作用。对一个Cache行的多次写命中都在Cache中(宿舍)快速完成,只是需要替换时才写回速度较慢的主存,减少了访问主存(图书馆)的次数。
用写回法,还要给每个cache行(每本书)配置一个修改位,以反映此行是否被CPU修改过(这本书是否被你改过),当这本书从书架被换出时,根据修改位是0/1,判断要不要写回主存(去图书馆修改原本) (这本副本书没改过那肯定不用去图书馆改原本)
若CPU写Cache未命中(要改的书不在书架上),将主存要改的那块整个复制到Cache后对其(副本)进行修改(去图书馆借书回来在宿舍改,改的还是副本,图书馆的原本不会一起变)。该书发生替换操作时才在图书馆把原本也改了。
这种方法(写回法),写Cache与写主存异步进行,可以显著减少写主存的次数(减少跑图书馆的次数),但存在不一致性的隐患
(2):全写法:
当写Cache命中(要改的书在宿舍书架上),Cache与主存同时发生修改(在宿舍改完副本立刻跑去图书馆改原本),故此方法较好地维护了Cache与主存内容(副本与原本)的一致性。
当写Cache未命中(要改的书没有从图书馆借回宿舍),则直接向主存进行写入(直接去图书馆改原本),此时是否将改过的主存块取到Cache(是否把改过的书借回宿舍),可借可不借。
(3):写一次法: (前两种的结合)
写命中和写未命中的处理方法与写回法(第一种)基本相同,只是第一次写命中时要同时写入主存(第一次发现要改的书在宿舍书架时,在宿舍改完副本立刻去图书馆改原本)。第一次发生后,CPU在总线上启动一个存储写周期。后面的时间与写回法完全一样。