1.7.3 Cache(高速缓存)
📝 学习目标
- 理解 Cache 的作用:解决 CPU 与主存速度/容量不匹配
- 掌握“命中/未命中”与命中率的概念
- 会算平均存取时间(加权平均)
- 掌握三种映射方式:直接映射、全相联、组相联
- 记住排序:冲突率与电路复杂度
🎯 知识点
1) Cache 的基本概念
- Cache(高速缓存)位于 CPU 与主存之间
- Cache 中的数据来自主存的复制
- CPU 访问数据时:
- 若在 Cache 中找到 → 命中(hit)
- 否则 → 未命中(miss),需要访问主存并可能替换 Cache 内容
课堂提到:Cache 命中率通常很高(如 90%+),性能提升显著。
2) 平均存取时间(加权平均,软设常考计算)
设:
- Cache 访问时间
Tc - 主存访问时间
Tm - 命中率
h,未命中率1-h
平均存取时间:
Tavg = h * Tc + (1 - h) * Tm课堂原话提炼:这就是“概率 × 时间”的加权平均。
3) 地址映射(地址映像)
主存块如何放入 Cache 的哪个位置?这就是映射问题。
重要结论(课堂强调、软设反复考):
- 主存与 Cache 的地址映射由硬件自动完成
- 与程序员无关,也不是操作系统的软件完成
4) 三种映射方式(只需掌握特点对比)
| 映射方式 | 规则直观描述 | 冲突率 | 电路复杂度 |
|---|---|---|---|
| 直接映射(Direct-mapped) | 主存块只能映射到 Cache 的固定行(“0对0,1对1”) | 高 | 低(简单) |
| 全相联(Fully associative) | 主存块可装入 Cache 任意行 | 低 | 高(复杂) |
| 组相联(Set associative) | 先按组固定映射,再在组内任意放 | 折中 | 折中 |
排序(必背):
- 冲突率:直接映射 > 组相联 > 全相联
- 电路复杂度:全相联 > 组相联 > 直接映射
🧠 难点与易错点
- 易错1:把“Cache 扩大了主存容量”当成对(Cache 不等于主存扩容)
- 易错2:映射由操作系统完成(错,硬件完成)
- 易错3:把“全相联=电路简单”说反
🔑 关键词解释
- 冲突(conflict):多个主存块争用同一 Cache 位置。
- 替换算法(replacement policy):未命中时决定淘汰哪一块(命中率会受影响)。
🔍 联想扩展(软设常见考法)
- “任意一块装入 Cache 任意位置” → 全相联
- “零号块只能到零号行” → 直接映射
- “硬件自动完成映射” → 记死
🧪 例题(按难度)
简单(3题)
在 Cache 题中,h 通常表示:
在三种映射方式中,“冲突率通常最高、实现最简单”的是:
在三种映射方式中,“硬件比较逻辑最复杂”的通常是:
中级(3题)
例题1(平均存取时间:课堂例)
某系统 Cache 访问时间为 1ms,主存访问时间为 100ms,命中率为 90%。平均存取时间约为:
选择平均存取时间:
例题2(映射由谁完成)
程序执行过程中,主存与 Cache 之间的地址映射通常由谁完成?
选择正确选项:
例题3(任意装入任意位置)
主存与 Cache 的地址映射方式中,能实现“任意主存块装入 Cache 任意位置”的是:
选择正确映射方式:
困难(1题)
某系统 Cache 访问时间为 1ms,主存访问时间为 101ms,命中率为 80%。平均存取时间约为:
📚 本课小结
- Cache:复制主存一部分以提速
- Tavg = h*Tc + (1-h)*Tm
- 映射由硬件完成
- 直接/全相联/组相联:冲突率与复杂度一高一低,组相联折中