由于cache的内容只是主存部分内容的副本,它应当与主存内容保持一致。而CPU对cache的写入更改了cache的内容。如何与主存内容保持一致,可选用如下三种写操作策略。
1)写回法(write back, copy back), 写返回
写回法要求:“当CPU写cache命中时,只修改cache的内容,而不立即写入主存;只有当此行被换出时才写回主存。这种方法使cache真正在CPU-主存之间读/写两方面都起到高速缓存作用。对一个cache行的多次写命中都在 cache 中快速完成,只是需要替换时才写回速度较慢的主存,减少了访问主存的次数。实现这种方法时,每个cache行必须配置一个修改位,以反映此行是否被CPU修改过。当某行被换出时,根据此行修改位是1还是0,来决定将该行内容写回主存还是简单弃去。
如果CPU写cache未命中,为了包含欲写字的主存块在cache分配一行,将此块整个复制到cache后对其进行修改。主存的写修改操作统一留到换出时再进行。显然,这种写cache与写主存异步进行的方式可显著减少写主存次数,但是存在不一致性的隐患。
2)全写法(write through)
全写法要求:当写 cache 命中时, cache 与主存同时发生写修改,因而较好地维护了 cache_与主存的内容的一致性。当写cache未命中时,只能直接向主存进行写入。但此时是否将修改过的主存块取到cache,有两种选择方法:一种称为WTWA 法,取主存块到cache并为它分配一个行位置;另一种称为WTNWA法,不取主存块到cache.
全写法是写cache与写主存同步进行,优点是cache中每行无须设置一个修改位,以及相应的判断逻辑。缺点是, cache对CPU向主存的写操作无高速缓冲功能,降低了cache的性能。
3)写一次法(write once)
写一次法是基于写回法并结合全写法的写策略:写命中与写未命中的处理方法和写回法基本相同,只是第一次写命中时要同时写入主存。这是因为第一次写cache命中时,CPU要在总线上启动一个存储写周期,其他cache监听到此主存块地址及写信号后,即可复制该块或及时作废,以便维护系统全部cache的一致性。奔腾CPU的片内数据cache就采用了写一次法。