目录
cache的原理作用:
cache是速度效率很快的存储器
cache 的基本原理是:计算机发送地址给cache,若在cache内,称为命中,不在,则访问主存,把内容调入cache
所以:cache的命中率很重要,不然访问主存把内容调入cache的操作很占时间
命中率h与程序的行为,cache的容量,组织方式,块的大小都有关,这里就不再多说,现代cache的命中率都很高
cache与主存的几种地址映射方式
全相联:
通俗来讲,就是cache哪里空着空间,就用cache的哪块空间
所以十分灵活,但是实际设计起来电路很难设计,容量小了还好,大了要掉很多头发了
直接映射:
利用 i = j mod m这个公式,把主存的块和cache的行相对应,定死了这里
方便设计,但笨重不灵活
所以出现了第三种方式:
组相联:
就是直接映射了每一个块放哪个cache的组,但是存在每个cache组的某一行都是随便的(全相联思想)
以上几种映射方式的主存地址格式如下:
全相联:
块号 | 字地址 |
直接映射:
区号 | 区内块号 | 字地址 |
组相联:
区号 | 组号 | 字地址 |
这些个内存地址格式的位数是考试里面的常考题型,如果有需要我日后可以补充求法与经典例题,这里不多赘述
cache的替换策略:
就是cache满了还想存东西怎么替换掉cache里面的内容,所以直接映射不存在替换策略,他都定死了
一般有以下几种策略:
- 随机 随机替换(诶哟,你干嘛)
- FIFO first in first out 堆栈思想
- LFU 最不经常用的被替换掉
- LRU 最近使用的不被替换掉
以上策略均有合适使用场景,都有优略之分,但是一般认为LRU最优
cache的写操作策略:
东西给到cache,主存里还有这个东西呢,cache内的相当于是副本,cache的东西被修改了,就和主存的东西发生了冲突,写操作策略就是应对这种情况
有下面几种策略:
- 写回法:只有在cache此行被换出时候才写回主存
- 全写法:只要cache被改写,主存也立马被改写 下面的方法名字很直接,也是柔和了两种策略的第三种策略
- 写一次法:与写回法基本相同,不过他在第一次写命中时要同时写入内存。
奔腾cpu的cache就采用了写一次法