Cache 基本概念

cache用来存放最近CPU访问的一些memory的数值
L1 Cache:离CPU比较近的cache,有i-Cache,D-Cache
L2 Cache:离CPU比较远的cache,如果没有内部的,可以在外面加

CPU尽可能从cache里取数据,就减少了向外面访问的频率
同时也减小了功耗,外部功耗会比较大,内部memory功耗较小
尽可能让cpu对onchip的部件进行操作

Cache结构:
采用组相联映射
RAM分为Data RAM和Tag RAM 分别存数据和地址

在这里插入图片描述
一个line一般是4到8word
way由很多line组成,可以理解为片,data RAM里由很多位组成,
memory地址空间里面的数据可以放在不同的way里面
set是不同way中的同一个line
Tag用于标记memory地址,来自于访问地址,往往是最上面的
存放在Tag RAM里面
CPU访问cache的时候,首先会访问Tag RAM,有没有对应的地址,如果匹配,那么就从cache里拿数据或者把数据写到cache里面
Index来自地址,查找到底数据在那个cache line里面

地址由 组号 组内块号 块内地址组成,其中块内地址又被进一步分开成offset 和bytes的选择

举例:
在这里插入图片描述
valid代表cache line是不是有效的
dirty bit 代表cacheline里面的数据是不是最新的,和外面的是不是一致的
如果是dirty就是不一致的

在这里插入图片描述
cache line是怎么分配的
在这里插入图片描述
根据index找到是哪个cache line,然后把tag的物理区域,和index找到的tag RAM里存放的tag值进行比较,如果匹配,就cache hit 否则就cache miss
在两个ways里都会去找
在这里插入图片描述
这里也是两个ways,4个sets,但是CPU起始的位置变了,从0x70开始
CPU发出访问地址的时候,会分配到set3,30也是,已经被分配好了
B0本来也应该分配到set3,但是set3已经被占去了,这时候有三种策略

一、 随机策略(Random):B0中的数据随机分配到way0或者way1的某个set中
二、 轮询方式(Round Robin),先是way0再是way1
三、 LRU(Least Recently Used) 看哪个最近最少使用

Read Allocation:
在这里插入图片描述
发生cachemiss的时候,这时候要分配cache line了,会读一整行的数据到cache line里面来,这个过程叫cache linefill

Write Allocation
写的地址首先会到cache中,发现有cache miss的情况发生,同样的,也需要cache linefill。之后把写的东西写到cache line里面去或者memory里面去。
write的时候有个策略:
把数值从memory写到cache line里面,然后CPU写Cache line,就认为结束了,等待cache一块写道memory中,称为Write Back。另一种是不光要写Cache中的内容,还要写Memory中的内容,这样两个存储体里的数据保持一致。

Cache 分类
根据Cache的index和tag来源,可以把cache分为很多种类:
VIVT: Virtual Index Virtual Tag,顾名思义,索引Cache时的Index来自Virtual Address(虚拟地址),Tag同样也来自虚拟地址
VIPT: Virtual Index Physical Tag,顾名思义,索引Cache时的Index来自Virtual Address(虚拟地址),Tag来自Physical Address(物理地址),通常用于Instruction cache
PIPT: Physical Index Physical Tag,顾名思义,索引Cache时的Index和Tag 都来自Physical Address(物理地址),通常用于Data cache

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章