Cache 和主存的映射方式
直接映射
地址结构:
tag 标记 | Cache 行号 | 块内地址 |
---|
全相联映射
使用相联存储器,成本较高,但是不会冲突,空间利用率高,命中率高。缺点是标记比较的速度更慢。
每个 Cache 行都设置一个比较器,比较器位数等于标记字段 tag 的位数。访存时根据标记字段的内容来访问 Cache 行中的主存块,所以是“按内容访问”。
地址结构:
tag 标记 | 块内地址 |
---|
组相联映射
r 路组相联是指每组有 r 个 Cache 行。
地址结构:
tag 标记 | 组号 | 块内地址 |
---|
标记项
直接映射的 Cache 行的存储容量示意:
有效位 | 脏位 | LRU 替换控制位 | tag 标记 | 数据 |
---|
Tip
- 脏位只有回写法才需要设置;
- LRU 控制位只有 LRU 算法才需要设置,位数为 ;
- n 路组相联映射有 n 个相联存储器
其中前面四项统称标记项。
二路组相联映射一行就是一组,有两个标记项:
标记项 | 标记项 |
---|---|
标记项 | 标记项 |
标记项 | 标记项 |
标记项 | 标记项 |
主存块的替换算法
- RAND 随机算法:RAND 实际上是不需要什么算法,所以Cache 行中不需要随机替换控制位
- FIFO先进先出算法
- LRU最近未使用算法
- LFU 最不经常使用算法:每一行带一个访问计数器,淘汰计数器值最小的那一行
一致性问题
写操作命中时:
- 全写法(直写法):写命中时把数据同时写回 Cache 和主存,这样当需要替换主存块时,就不需要再写回主存了
- 回写法:写命中时,只把数据写回 Cache,当此块被换出时再写回主存
写操作不命中时:
- 写分配法:更新主存单元,并把这一块调入 Cache
- 非写分配法:只更新主存单元内容
回写法和写分配法一起使用 全写法和非写分配法一起使用