一、三种映射模式
1、直接映射
直接映射的地址结构:
标记 | chache行号 | 块内地址 |
---|
直接映射模式:
2、组相联映射
组相连映射的地址结构:
标记 | chache组号 | 块内地址 |
---|
3、全相联映射
全相联映射的地址结构:
标记 | 块内地址 |
---|
全相联就比较牛逼了,核心思想是,主存块随便往cache里面装,每一块怎么映射呢?答案是不需要映射。全相联采用昂贵的按内容寻址的相联存储器(按照标记内容去寻址),不需要费脑子去映射。但也导致它被考到的频率最低。。如果cache已经装了n块,主存再传一个块过来,无论其地址多少,只要cache还有位置就放在n+1块。
二、cache每行(块)里面的东西
有效位 | 脏位 | 替换控制位 | 标记位 | 数据 |
---|
有效位:恒存在,永远占一位
脏位:只有写回法会有,
详情见下面的cache写策略
替换控制位:对于n路组相联,LRU需要
l
o
g
2
n
log_2{n}
l
o
g
2
n
位(每组的组内地址长度),具体参考《操作系统》中替换算法。
标记位:和主存中的标记位时一回事,标记位的存在将主存块和cache块联系在一起。
数据:虽然看上去俺是最短的,其实俺占的空间是最最最最最最多的。。。前面的都是为俺服务滴!
三、cache写策略
1、全写法(cache命中)
用户往cache写东西同时往主存写东西,二者同时访问。
2、写回法(cache命中)
用户先往cache写东西写完cache里面的东西再往主存传,脏位就是为了看当前cache是不是处于已经被用户写但还没有被传主存状态的一个标志位。
3、写分配法(cache不命中)
先从主存调一块到cache,然后再写。。。
4、非写分配法(cache不命中)
直接写到主存。
其中,
非写分配法+全写法
写分配法+写回法
记忆:非全(非全日制)