C小加

厚德 博学 求真 至善 The bright moon and breeze
posts - 145, comments - 195, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
由于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全部失效
3、DMA访问。DMA修改了内存中的值,cache中仍然为原值,错误

Feedback

# re: 高速缓存(cache)和主存内容不一致的情况及其处理办法  回复  更多评论   

2011-12-05 15:44 by bluesky_killer
这个知识点给我解决了一个疑惑和问题,非常感谢!

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理