由于cache的内容只是主存部分内容的拷贝,它应当与主存内容保持一致。但是,在一些情况下会出现cache和主存内容不一致的情况。如下:
1、 写操作后,没有刷洗cache到内存里面,那么cache为脏,跟内存不同步
解决方案:
(1)写回法:当CPU写cache命中时,只修改cache的内容,而不立即写入主存;只有当此行被换出时才写回主存。这种方法使cache真正在CPU-主存之间读写两方面都起到高速缓存的作用。对一个cache行的多次写命中都在cache中快速完成,只是需要替换时才写回速度较慢的主存,减少了访问主存的次数。实现这种方法时,每个cache行必须配置一个修改位,以反映此行是否被CPU修改过。当某行被换出时,根据此行的修改位是1还是0,来决定将该行内容写回主存还是简单丢弃。
(2)全写法(写直达法):当写cache命中时,cache与主存同时发生写修改,因而较好地维护了cache与主存的内容的一致性。当写cache未命中时,只能直接向主存进行写入。全写法是写cache与写主存同步进行,优点是cache中每行无需设置一个修改位,以及相应的判断逻辑。缺点是,cache对CPU向主存的写操作无高速缓冲功能,降低了cache的功效。
2、多CPU模式。 一个CPU修改了本地cache,那么其它CPU的cache全部失效
解决方案:
(1)写回法:当CPU写cache命中时,只修改cache的内容,而不立即写入主存;只有当此行被换出时才写回主存。这种方法使cache真正在CPU-主存之间读写两方面都起到高速缓存的作用。对一个cache行的多次写命中都在cache中快速完成,只是需要替换时才写回速度较慢的主存,减少了访问主存的次数。实现这种方法时,每个cache行必须配置一个修改位,以反映此行是否被CPU修改过。当某行被换出时,根据此行的修改位是1还是0,来决定将该行内容写回主存还是简单丢弃。
(2)全写法(写直达法):当写cache命中时,cache与主存同时发生写修改,因而较好地维护了cache与主存的内容的一致性。当写cache未命中时,只能直接向主存进行写入。全写法是写cache与写主存同步进行,优点是cache中每行无需设置一个修改位,以及相应的判断逻辑。缺点是,cache对CPU向主存的写操作无高速缓冲功能,降低了cache的功效。
2、多CPU模式。 一个CPU修改了本地cache,那么其它CPU的cache全部失效
3、DMA访问。DMA修改了内存中的值,cache中仍然为原值,错误
转载于:https://blog.51cto.com/lwxcy/945125