网站推广的企业室内设计网站 知乎
高速缓冲存储器Cache
- 工作原理:将某些主存块复制到Cache中,缓和CPU与主存之间的速度矛盾
 - 局部性原理 
- 时间局部性:现在访问的地址,不久之后也很可能被再次访问
 - 空间局部性:现在访问的地址,其附近的地址也很可能即将被访问
 
 - 性能分析 
- 命中率H:CPU欲访问的信息已在Cache中的比率
 - 缺失(未命中)率:M = 1 - H
 - 👩💻 两种方式 
- 先访问Cache,发现未命中再访问主存
 - 同时访问Cache和主存,若Cache命中则停止访问主存
 
 
 - 其他概念 
- 主存与Cache之间以“块”为单位进行数据交换
 - 主存的“块”又叫“页/页框/页面”;Cache的“块”又叫“行”
 - 主存地址可拆分为(主存块号,块内地址)的形式
 
 
每次被访问的主存块,一定会被立即调入Cache
Cache-主存映射方式
Cache中存储的信息
- 有效位(0/1)+ 标记 + 整块数据
 - 其中“标记”用于指明对应的内存块,不同映射方式,“标记”的位数不同
 
全相联映射
- 主存块可以放到Cache的任意位置
 - 主存地址结构:标记(整个主存块号)+ 块内地址
 - 优点:Cache存储空间利用充分,命中率高;缺点:查找“标记”最慢,有可能需要对比所有行的标记
 
直接映射
- 主存块只能放到特定的某个Cache行,行号 = 主存块号 % 总行数
 - 主存地址结构:标记(主存块号前几位)+ 行号(主存块号末几位)块内地址
 - 优点:对于任意一个地址,只需对比一个“标记”,速度最快;缺点:Cache存储空间利用不充分,命中率低
 
组相联映射
- 主存块可以放到特定分组中的任意位置,所属组号 = 主存块号 % 总组数
 - 主存地质结构:标记(主存块号前几位)+ 组号(主存块号末几位)块内地址
 - 优点:另外两种方式折中,综合效果较好
 - 术语:n路组相联映射——每n各Cache行为一组
 
Cache替换算法
- 随机算法(RAND) 
- 随便选一个主存块替换
 - 过于Freestyle,效果很差
 
 - 先进先出算法(FIFO) 
- 优先替换最先被调入Cache的主存块
 - 不遵循局部性原理,效果差
 
 - 👩💻 近期最少使用(LRU) 
- 将最久没有被访问过的主存块替换。每个Cache行设置一个“计数器”(Cache块的总数=2^n,则计数器只需n位),用于记录多久没有被访问
 - 基于“局部性原理”,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,Cache命中率高。
 
 - 最不经常使用(LFU) 
- 将被访问次数最少的主存块替换。每个Cache行设置一个“计数器”,用于记录被访问过多少次
 - 曾经被经常访问的主存块在未来不一定会用到,LFU实际运行效果不好
 
 
Cache写策略
非写分配法通常与全写法合用,写分配法通常和回写法合用
- 写命中 
- 全写法(直写法,write-through):当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲(write buffer)
 - 回写法(write-back):当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存
 
 - 写不命中 
- 写分配法(write-allocate):当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。
 - 非写分配法(not-write-allocate):当CPU对Cache写不命中时只写入主存,不调入Cache
 
 - 多级Cache:现代计算机通常采用多级Cache结构,各级Cache间常采用“全写法+非写分配法”,Cache和主存间常采用“写回法+写分配法”
 
