一研为定,万山无阻
文章目录
Cache 工作原理
Cache 满及占用处理方式 ->
替换算法
-
1.随机算法(RAND):随机地确定替换的 Cache块。它的实现比较简单,但没有依据程序访问的局部性原理,故可能命中率较低。
-
2.先进先出算法(FIFO):选择最早调入的行进行替换。它比较容易实现,但也没有依据程序访问的局部性原理,可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入 Cache的块替换掉。
-
3.近期最少使用算法(LRU):依据程序访问的局部性原理选择近期内长久未访问过的存储行作为替换的行,平均命中率要比FIFO要高,是堆栈类算法。LRU算法对每行设置一个计数器, Cache每命中一次,命中行计数器清0,而其他各行计数器均加1,需要替换时比较各特定行的计数值,将计数值最大的行换出。
-
4.最不经常使用算法(LFU):将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的行计数器加1,需要替换时比较各特定行的计数值,将计数值最小的行换出。
实列
- 根据替换算法,求Cache 命中次数
- 命中的含义简要为重复的直接从缓存中取就行。即为需要访问的内容已经在 Cache 中 。
总结注意:命中次数与地址映射方式与替换算法都相关
全相联映射情况
- 命中3次如下图
- 如何识别标记命中与否 相联存储器:并行比较标记,若有标记与当前将要访问的地址的标记相同,且有效位为1,则命中
直接映射情况
- 命中1次
相联存储器:根据映射到的 Cache块号比较标记,若标记相同且有效位为1,则命中。若标记不同,直接替换
组相联映射情况
- 2 - 路 组相联
- 相联存储器:根据映射到的 Cache组号并行比较组内标记,若标记相同且有效位为1,则命中。若标记不同,而有效位为1,根替换策略替换
推荐方法 : 列表法
修改Cache 如何保持主存一致 ->
写策略
命中时策略
写回法
注意引入新概念 : 脏位
全写法
- 与上述对应的是(即为修改缓存内容也同时立即修改主存的内容)全写法
非命中时策略
写分配法
非写分配法
总结
多级 Cache 缓存