1. Cache的基本原理
1.1 工作原理
将某些主存复制到Cache中,缓和CPU和主存之间的速度矛盾
1.2 局部性原理
时间局部性: 现在访问的地址,不久之后也可能被再次访问
空间局部性: 现在访问的地址,其附近的地址也可能即将被访问
1.3 性能分析
理解Cache命中率,缺失率
俩种方式:
1> 先访问Cache,发现未命中再访问主存
2> 同时访问Cache和主存,若Cache命中则停止访问主存
例题:
1.4 其他概念
1> 主存与Cache之间以"块"为单位进行数据交换
2> 主存的"块"又叫"页/页框/页面";Cache"块"又叫"行"
3> 主存地址可拆分为(主存块号,块内地址)的形式
总:
2. Cache和主存的映射方式
2.1 Cache中存储的信息
1> 有效位(0/1)+标记+整块数据
2> 其中"标记"用于指明对应的内存块,不同映射方式,"标记"的位数不同
2.2 全相联映射
1> 主存块可以放到Cache的任意位置
2> 主存地址结构: 标记(整个主存块号)+块内地址
3> 优点: Cache存储空间利用充分,命中率高;缺点: 查找"标记"最慢,有可能需要对比所有行标记
2.3 直接映射
1> 主存块只能放在某个特定的Cache行,行号 = 主存块号%总行数
2> 主存地址结构: 标记(主存储块号前几位)+行号(主存块号末几位)块内地址
3> 优点: 对于任意一个地址,只需对比一个"标记"速度最快;缺点:Cache存储空间利用不充分,命中率低
2.4 组相联映射
1> 主存块可以放到特定分组中的任意位置,所属组号=主存块号%总组数
2> 主存地址结构: 标记(主存块号前几位)+组号(主存块号末几位)块内地址
3> 优点: 结合上述俩种优点
4> 术语: n路组相联映射--每n个Cache行为一组
总:
3. Cache替换算法
3.1 随机算法
1> 随便选一个主存块替换
2> 过于*,效果比较差
3.2 先进先出算法
1> 优先替换最先被调入Cache的主存块
2> 不遵循局部性原理,效果差
3.3 近期最少使用
1> 将最久没有被访问过的主存块替换.每个Cache行设置一个"计数器",用于记录多久没被访问.
2> 基于"局部性原理",近期被访问过的主存块,在不久的将来页很有可能被再次访问,因此淘汰醉酒没被访问过的块是合理的.LRU算法的实际运行效果很好,Cache命中率高
3.4 最近不经常使用
1> 将被访问次数最少的主存块替换.每个Cache行设置一个"计数器",用于记录被访问过多少次
2> 曾经被经常访问的主存块在未来不一定会用到,LFU实际运行效果不好
总:
4. Cache写策略
4.1 写命中
全写法:当CPU对Cache写命中的时候,必须把数据同时写入Cache和主存中
写回法:当CPU对Cache写命中的时候,只修改Cache的内容,不立即写入主存,只有当此块被换出的时候才写回主存
4.2 写不命中
写分配法:当CPU对Cache写不命中的时候,把主存的块调入Cache中,在Cache中修改.
非写分配法: 当CPU对Cache写不命中的时候只写入主存,不调入Cache.
4.3 多级Cache
现代计算机常采用多级Cache结构
总: