存储系统---Cache的替换策略和写策略
引言:
- Cache的工作原理要求它尽量保持最新数据。无论何种映射方式,Cache与主存之间都是一对多,当一个新的主存块需要拷贝到Cache中时,如何替换?
替换策略解决了如何将数据从主存写入Cache的问题。
- 当然,替换的策略与映射方式有关,如直接映射只能存到Cache的一个固定行,因此只能覆盖原来的内容。而全相联和组相联就存在策略问题。
- 硬件实现的替换方法常用的有三种:
- 最不经常使用(LFU)算法
- 近期最少使用(LRU)算法
- 随机替换
一、LFU算法
- 刚刚存入的数据容易被替换
二、LRU算法:近期最少使用算法
三、随机替换
替换算法的例题,想刷题,点这里!!!
四、数据写入Cache的问题
- 如何保证cache与主存内容一致?
- 常用的三种写操作策略:
-
写回法
:- 只修改Cache的内容,而不立即写入主存。只有当此行被换出时才写回主存。(写未命中就存储再cache其他的地方)
- 优点: 减少了访问主存的次数
- 缺点:存在Cache与主存内容不一致的隐患。
- 实现该方法时,cache每行必须配置一个修改位,以反映此行是否被cpu修改过。(在准备替换某个行时,若这个行的修改位反映了它被Cpu修改过,则先把这行数据写入主存再替换它。)
-
全写法
,又称写透式- 一旦cache发生写操作,就同时将这个数据写入主存中(写未命中就直接存储主存中)
- 优点:cache与主存的内容高度一致。而且不需要设置修改位
- 缺点:降低了cache的功效
-
写一次法
- 以写回法为基础,结合了全写法的写策略。
- 写命中与写未命中的处理方法与写回法基本相同,只是第一次写命中时要同时写入主存。
写命中和写未命中,个人理解就是你磁盘或者内存上的存储区域之前有没有写过数据,如果有,这次再写到相同的区域叫写命中,如果写到其他区域,叫写未命中,在数据恢复方面,如果写命中了,那之前的数据被覆盖,就很难再恢复回来,如果写未命中,那么之前的数据就容易被找回。