因为Cache的内容是部分主存内容的副本,应该与主存内容保持一致。而CPU对Cache的写入更改了Cache内容,如何与主存内容保持一致有多种写操作工作方式可供选择,这些写操作方式统称为更新策略。事实上,多级存储系统的访问源可能不止一家。例如某些外围设备以及多CPU计算机系统中的其他CPU都可能成为该存储系统的访问源,这就使更新策略增添了复杂性。
(1)写直达法(write through)。CPU执行写操作时,必须把数据同时写入主存和缓存。写直达法保证了主存与缓存数据的一致性,但增加了访问主存的次数,降低了存取速度。80486处理器片内Cache采用的就是写直达法。
(2)写回法(write back)。CPU执行写操作时,当时只把数据写入Cache而不写入主存,写入主存的时机一直拖到此块被换出时才写回主存。写回法的目的是为了减少访问主存的次数,但同时还得保持主存与缓存数据的一致性,为此需要增添一些硬件设施和合理的更新策略。在Cache每一块上都有一个块标记,为了实现拖后写,需要在块标记中再增加一个“已修改”标志位。在执行写操作时,需要将该块的“已修改”标志位置1,表示此块的内容已经和主存不一致。如果某块的“已修改”标志位为0,表示该块末被修改过,其内容与主存一致。
当有另外的CPU或外设执行读操作时,需要根据访问主存的地址检查该块是否在Cache中。如果在Cache中,还要检查该块的“已修改”标志位是否为1,若为1则需要暂停此读操作,将此块写回主存后再启动被暂停的读操作。
当Cache中某块被选做替换块时,先检查其“已修改”标志是否为1,若为1则需要先将此旧块整块写回主存,然后再换入新块。(www.xing528.com)
(3)写一次法(write once)。写一次法是一种基于写回法又结合了写直达法的写策略,即写命中和写未命中的处理与写回法基本相同,只是第一次写命中时要同时写入主存。
这种策略主要用于某些处理器的片内Cache,例如Pentium处理器的片内数据Cache就采用的是写一次法。因为片内Cache写命中时,写操作就在CPU内部高速完成,若没有内存地址及其他指示信号送出,就不便于系统中的其他Cache监听。
在第一次片内Cache写命中时,CPU要在总线上启动一个存储器写周期。其他Cache监听到此主存块地址及写信号后,即可把它们各自保存可能有的该块拷贝及时作废(无效处理)。此后若有对片内Cache此块的再次或多次写命中,则按回写法处理,无须再送出信号了。这样虽然第一次写命中时花费了一个存储周期,但对维护系统全部Cache的一致性有利。而大多的Cache写操作不涉及片外,对指令流水执行有利。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。