计算机组成原理的最后一篇来翻存储系统这座山。它每年在上午题里占 2~3 分考法集中在两块Cache 命中率和平均访问时间纯计算套公式、主存与 Cache 的地址映射直接映射/全相联/组相联概念地址拆分。前者是流水线那种会公式就得分的题后者是这个系列到目前为止最需要理解的部分——但懂了之后你会发现不过如此。一、为什么需要 Cache一个速度矛盾CPU 的速度比主存内存快一两个数量级。CPU 每个时钟周期都张嘴要指令要数据内存却慢吞吞——结果就是 CPU 大部分时间在等。于是工程师在 CPU 和主存之间加了一层小而快的存储Cache高速缓存。问题是 Cache 很贵容量做不大只能放主存的一小部分内容。凭什么放一小部分就管用靠的是程序的局部性原理概念题常客时间局部性刚被访问过的内容很可能马上再被访问。典型场景循环——循环体那几十条指令被反复执行空间局部性刚被访问的位置它附近的内容很可能接着被访问。典型场景顺序执行的指令、顺序遍历的数组。所以 Cache 和主存之间以块为单位交换数据要一个字节把它所在的整个块比如 128 字节都搬进来——赌的就是空间局部性。二、命中率与平均访问时间计算题真题级命中率 hCPU 要的数据恰好在 Cache 里的概率。访问 1000 次950 次在 Cache 里找到命中率 95%。设 Cache 存取周期 t₁、主存存取周期 t₂软考的标准模型是平均访问时间 t h × t₁ (1 - h) × t₂例题真题原型Cache 存取周期 10ns主存 100ns命中率 95%求平均访问时间。t 0.95 × 10 0.05 × 100 9.5 5 14.5ns看这个数字的妙处主存比 Cache 慢 10 倍但因为 95% 的访问都落在 Cache 里平均时间被拉到 14.5ns——非常接近 Cache 本身的速度。这就是 Cache 的全部意义。一个容易栽的直觉命中率从 90% 提到 95%平均时间能降多少不是5% 的事——未命中率从 10% 砍到 5%减半了而每次未命中要付 100ns 的代价。算一下0.9×100.1×100 19ns降了 4.5ns。越接近 100%每一个百分点越值钱。三、先备好两个编址基本功地址映射题之前先确认两个弹药1. 地址线计算按字节编址、容量 2ⁿ 字节 → 需要 n 条地址线。64MB 2²⁶ → 26 条1MB 2²⁰ → 20 条。2. 主存和 Cache 都按块划分块大小相同。主存地址的逻辑结构是| 主存块号 | 块内地址 |块内地址的位数由块大小决定块 128B 2⁷ → 块内地址 7 位。剩下的高位全是块号。四、三种地址映射电影院类比核心问题主存块搬进 Cache放哪下次 CPU 来找怎么找三种答案对应三种映射方式。用电影院座位类比一秒懂1. 直接映射 对号入座每个主存块在 Cache 里只有一个法定位置Cache 块号 主存块号 mod Cache 块数。比如 Cache 有 64 块主存第 130 块只能放第 130 mod 64 2 号块。地址划分三段区号标记 Cache 块号块内地址。CPU 拿地址来按块号找到 Cache 块比对区号同一 Cache 位置可能被多个主存块轮坐区号用来确认现在坐的是不是你——是则命中。优点硬件最简。缺点冲突率高——两个常用块若映射到同一位置只能互相挤出去哪怕 Cache 别处空着。2. 全相联 不对号随便坐主存块可以放 Cache任意块。地址划分两段主存块号标记块内地址——注意没有Cache 块号字段了因为位置不固定整个块号都得当标记存起来。CPU 找数据时要把标记和 Cache所有块的标记同时比较并行比较器。优点冲突率最低、Cache 利用率最高。缺点硬件最贵。3. 组相联 分区随便坐折中方案Cache 分成若干组组间直接映射、组内全相联主存块对号入座到某一组组内随便坐。地址划分三段区号标记组号块内地址。冲突率和硬件开销都居中实际 CPU 的 Cache 基本都是这种如 2 路、4 路组相联。地址拆分四步法计算题通杀拿例题走一遍主存 1MB 按字节编址Cache 8KB块 128B直接映射求地址划分。第1步块内地址。块 128B 2⁷ → 7 位 第2步Cache 块号。8KB ÷ 128B 64 块 2⁶ → 6 位 第3步主存地址总长。1MB 2²⁰ → 20 位 第4步区号 20 - 6 - 7 7 位 → 区号7位 | 块号6位 | 块内地址7位全相联则没有第 2 步标记 20 - 7 13 位。组相联把第 2 步换成组数。五、两个小考点一句话版替换算法Cache 满了踢谁随机、FIFO先进先出、LRU最近最少使用最常用写策略CPU 写数据时改 Cache 还是改主存写直达两边同时写简单但慢、写回只写 Cache块被替换时才回写主存快但要处理一致性。六、10 道练习题基础题1~51.在 CPU 与主存之间设置 Cache 的主要目的是 。A. 扩大主存容量 B. 降低整机成本 C. 解决 CPU 与主存速度不匹配的问题 D. 提高外存储器的速度2.程序中循环结构的代码被反复执行 Cache 能据此提高效率这体现了 。A. 时间局部性 B. 空间局部性 C. 顺序局部性 D. 随机局部性3.某系统 Cache 存取周期为 10ns主存存取周期为 100nsCache 命中率为 95%则平均访问时间为 。A. 10ns B. 15ns C. 14.5ns D. 95ns4.直接映射方式下主存块映射到 Cache 的规则是 。A. 可放入任意 Cache 块 B. 按组映射组内任选 C. 随机选择 Cache 块 D. 固定位置主存块号 mod Cache 块数5.某计算机内存按字节编址主存容量为 64MB则地址总线至少需要 条。A. 20 B. 26 C. 64 D. 16进阶题6~10带坑6.某系统 Cache 存取周期 10ns、主存 100ns命中率 90% 时平均访问时间为 19ns。若命中率提高到 95%平均访问时间将降低 。A. 5ns B. 0.5ns C. 9ns D. 4.5ns7.主存 1MB 按字节编址Cache 容量 8KB块大小 128B采用直接映射则主存地址中区号标记字段占 。A. 6 位 B. 7 位 C. 13 位 D. 8 位8.全相联映射方式下主存地址应划分为 。A. 主存块号标记 块内地址 B. 区号 Cache 块号 块内地址 C. 组号 块内地址 D. 区号 块内地址9.某 Cache 分为 8 组每组 2 块2 路组相联则主存地址中组号字段占 。A. 2 位 B. 3 位 C. 8 位 D. 9 位10.关于三种地址映射方式下列说法错误的是 。A. 直接映射硬件简单但块冲突率高 B. 全相联冲突率低但标记比较硬件复杂 C. 组相联是直接映射与全相联的折中 D. 直接映射方式下主存块可放入 Cache 的任意位置七、答案与详解1. CCache 的使命只有一个填平 CPU 和主存之间的速度鸿沟。扩容量是虚拟存储器的台词A 错——这是软考最经典的张冠李戴。2. A刚用过的马上又要用 时间局部性循环是教科书级例子。空间局部性是用过的位置附近马上要用数组、顺序执行别混。3. C真题原型。t 0.95×10 0.05×100 9.5 5 14.5ns。选 A 的只算了命中部分注意不是 100.05×100——软考模型里命中那 95% 只花 Cache 的时间。4. D直接映射 对号入座位置由公式唯一确定Cache 块号 主存块号 mod Cache 块数。A 是全相联的规则串门了。5. B64MB 2⁶ × 2²⁰ 2²⁶ →26 条。这类题就一步把容量凑成 2 的幂。6. D本题大坑专杀直觉。新平均时间 0.95×10 0.05×100 14.5ns降低 19 - 14.5 4.5ns不是 5ns粗看未命中率从 10% 到 5%省 0.05×100 5ns但别忘了命中部分从 0.9×109ns 涨到了 0.95×109.5ns——命中次数变多Cache 时间多花 0.5ns净省 4.5ns。老老实实代公式别口算差值。7. B四步法块内地址 7 位1282⁷Cache 块数 8KB/128B 64 → 块号 6 位主存地址 20 位1MB2²⁰区号 20-7-6 7 位。选 C13 位的是把主存总块号当成了标记——直接映射里块号已经拿去定位 Cache 行了标记只存剩下的区号。8. A全相联随便坐没有 Cache 块号字段地址只有两段整个主存块号当标记 块内地址。选 B 的是把直接映射的三段式背串了——这是两种映射最本质的区别。9. B组号位数只看组数8 组 2³ →3 位。每组 2 块是干扰信息——组内全相联块在组内随便坐不占地址位。10. D选错误的A、B、C 都是正文原话。D 错——能放任意位置的是全相联直接映射是死位置对号入座。三种方式的自由度对比是软考翻来覆去的考点直接映射零自由度、全相联完全自由、组相联组内自由。八、五句话带走Cache 靠局部性吃饭循环是时间局部性数组/顺序是空间局部性平均访问时间t h·t₁ (1-h)·t₂代公式别口算差值直接映射对号入座区号块号块内地址简单但爱冲突全相联随便坐标记块内地址两段灵活但硬件贵组相联组间对号、组内随便折中方案组号位数只看组数。至此计算机组成原理的高频考点全部通关数据表示四篇 流水线 存储系统上午题这块的 10 来分应该稳了。下一篇预告进军操作系统——PV 操作与信号量。上午题里真正的思维题前趋图怎么画、P 操作 V 操作到底谁在等谁、信号量初值怎么设零公式纯逻辑是很多人上午题丢分的大户。咱们把它拆成套路。
【软考备考】存储系统详解:Cache 命中率、三种地址映射,计组最后一座大山(附 10 道练习)
计算机组成原理的最后一篇来翻存储系统这座山。它每年在上午题里占 2~3 分考法集中在两块Cache 命中率和平均访问时间纯计算套公式、主存与 Cache 的地址映射直接映射/全相联/组相联概念地址拆分。前者是流水线那种会公式就得分的题后者是这个系列到目前为止最需要理解的部分——但懂了之后你会发现不过如此。一、为什么需要 Cache一个速度矛盾CPU 的速度比主存内存快一两个数量级。CPU 每个时钟周期都张嘴要指令要数据内存却慢吞吞——结果就是 CPU 大部分时间在等。于是工程师在 CPU 和主存之间加了一层小而快的存储Cache高速缓存。问题是 Cache 很贵容量做不大只能放主存的一小部分内容。凭什么放一小部分就管用靠的是程序的局部性原理概念题常客时间局部性刚被访问过的内容很可能马上再被访问。典型场景循环——循环体那几十条指令被反复执行空间局部性刚被访问的位置它附近的内容很可能接着被访问。典型场景顺序执行的指令、顺序遍历的数组。所以 Cache 和主存之间以块为单位交换数据要一个字节把它所在的整个块比如 128 字节都搬进来——赌的就是空间局部性。二、命中率与平均访问时间计算题真题级命中率 hCPU 要的数据恰好在 Cache 里的概率。访问 1000 次950 次在 Cache 里找到命中率 95%。设 Cache 存取周期 t₁、主存存取周期 t₂软考的标准模型是平均访问时间 t h × t₁ (1 - h) × t₂例题真题原型Cache 存取周期 10ns主存 100ns命中率 95%求平均访问时间。t 0.95 × 10 0.05 × 100 9.5 5 14.5ns看这个数字的妙处主存比 Cache 慢 10 倍但因为 95% 的访问都落在 Cache 里平均时间被拉到 14.5ns——非常接近 Cache 本身的速度。这就是 Cache 的全部意义。一个容易栽的直觉命中率从 90% 提到 95%平均时间能降多少不是5% 的事——未命中率从 10% 砍到 5%减半了而每次未命中要付 100ns 的代价。算一下0.9×100.1×100 19ns降了 4.5ns。越接近 100%每一个百分点越值钱。三、先备好两个编址基本功地址映射题之前先确认两个弹药1. 地址线计算按字节编址、容量 2ⁿ 字节 → 需要 n 条地址线。64MB 2²⁶ → 26 条1MB 2²⁰ → 20 条。2. 主存和 Cache 都按块划分块大小相同。主存地址的逻辑结构是| 主存块号 | 块内地址 |块内地址的位数由块大小决定块 128B 2⁷ → 块内地址 7 位。剩下的高位全是块号。四、三种地址映射电影院类比核心问题主存块搬进 Cache放哪下次 CPU 来找怎么找三种答案对应三种映射方式。用电影院座位类比一秒懂1. 直接映射 对号入座每个主存块在 Cache 里只有一个法定位置Cache 块号 主存块号 mod Cache 块数。比如 Cache 有 64 块主存第 130 块只能放第 130 mod 64 2 号块。地址划分三段区号标记 Cache 块号块内地址。CPU 拿地址来按块号找到 Cache 块比对区号同一 Cache 位置可能被多个主存块轮坐区号用来确认现在坐的是不是你——是则命中。优点硬件最简。缺点冲突率高——两个常用块若映射到同一位置只能互相挤出去哪怕 Cache 别处空着。2. 全相联 不对号随便坐主存块可以放 Cache任意块。地址划分两段主存块号标记块内地址——注意没有Cache 块号字段了因为位置不固定整个块号都得当标记存起来。CPU 找数据时要把标记和 Cache所有块的标记同时比较并行比较器。优点冲突率最低、Cache 利用率最高。缺点硬件最贵。3. 组相联 分区随便坐折中方案Cache 分成若干组组间直接映射、组内全相联主存块对号入座到某一组组内随便坐。地址划分三段区号标记组号块内地址。冲突率和硬件开销都居中实际 CPU 的 Cache 基本都是这种如 2 路、4 路组相联。地址拆分四步法计算题通杀拿例题走一遍主存 1MB 按字节编址Cache 8KB块 128B直接映射求地址划分。第1步块内地址。块 128B 2⁷ → 7 位 第2步Cache 块号。8KB ÷ 128B 64 块 2⁶ → 6 位 第3步主存地址总长。1MB 2²⁰ → 20 位 第4步区号 20 - 6 - 7 7 位 → 区号7位 | 块号6位 | 块内地址7位全相联则没有第 2 步标记 20 - 7 13 位。组相联把第 2 步换成组数。五、两个小考点一句话版替换算法Cache 满了踢谁随机、FIFO先进先出、LRU最近最少使用最常用写策略CPU 写数据时改 Cache 还是改主存写直达两边同时写简单但慢、写回只写 Cache块被替换时才回写主存快但要处理一致性。六、10 道练习题基础题1~51.在 CPU 与主存之间设置 Cache 的主要目的是 。A. 扩大主存容量 B. 降低整机成本 C. 解决 CPU 与主存速度不匹配的问题 D. 提高外存储器的速度2.程序中循环结构的代码被反复执行 Cache 能据此提高效率这体现了 。A. 时间局部性 B. 空间局部性 C. 顺序局部性 D. 随机局部性3.某系统 Cache 存取周期为 10ns主存存取周期为 100nsCache 命中率为 95%则平均访问时间为 。A. 10ns B. 15ns C. 14.5ns D. 95ns4.直接映射方式下主存块映射到 Cache 的规则是 。A. 可放入任意 Cache 块 B. 按组映射组内任选 C. 随机选择 Cache 块 D. 固定位置主存块号 mod Cache 块数5.某计算机内存按字节编址主存容量为 64MB则地址总线至少需要 条。A. 20 B. 26 C. 64 D. 16进阶题6~10带坑6.某系统 Cache 存取周期 10ns、主存 100ns命中率 90% 时平均访问时间为 19ns。若命中率提高到 95%平均访问时间将降低 。A. 5ns B. 0.5ns C. 9ns D. 4.5ns7.主存 1MB 按字节编址Cache 容量 8KB块大小 128B采用直接映射则主存地址中区号标记字段占 。A. 6 位 B. 7 位 C. 13 位 D. 8 位8.全相联映射方式下主存地址应划分为 。A. 主存块号标记 块内地址 B. 区号 Cache 块号 块内地址 C. 组号 块内地址 D. 区号 块内地址9.某 Cache 分为 8 组每组 2 块2 路组相联则主存地址中组号字段占 。A. 2 位 B. 3 位 C. 8 位 D. 9 位10.关于三种地址映射方式下列说法错误的是 。A. 直接映射硬件简单但块冲突率高 B. 全相联冲突率低但标记比较硬件复杂 C. 组相联是直接映射与全相联的折中 D. 直接映射方式下主存块可放入 Cache 的任意位置七、答案与详解1. CCache 的使命只有一个填平 CPU 和主存之间的速度鸿沟。扩容量是虚拟存储器的台词A 错——这是软考最经典的张冠李戴。2. A刚用过的马上又要用 时间局部性循环是教科书级例子。空间局部性是用过的位置附近马上要用数组、顺序执行别混。3. C真题原型。t 0.95×10 0.05×100 9.5 5 14.5ns。选 A 的只算了命中部分注意不是 100.05×100——软考模型里命中那 95% 只花 Cache 的时间。4. D直接映射 对号入座位置由公式唯一确定Cache 块号 主存块号 mod Cache 块数。A 是全相联的规则串门了。5. B64MB 2⁶ × 2²⁰ 2²⁶ →26 条。这类题就一步把容量凑成 2 的幂。6. D本题大坑专杀直觉。新平均时间 0.95×10 0.05×100 14.5ns降低 19 - 14.5 4.5ns不是 5ns粗看未命中率从 10% 到 5%省 0.05×100 5ns但别忘了命中部分从 0.9×109ns 涨到了 0.95×109.5ns——命中次数变多Cache 时间多花 0.5ns净省 4.5ns。老老实实代公式别口算差值。7. B四步法块内地址 7 位1282⁷Cache 块数 8KB/128B 64 → 块号 6 位主存地址 20 位1MB2²⁰区号 20-7-6 7 位。选 C13 位的是把主存总块号当成了标记——直接映射里块号已经拿去定位 Cache 行了标记只存剩下的区号。8. A全相联随便坐没有 Cache 块号字段地址只有两段整个主存块号当标记 块内地址。选 B 的是把直接映射的三段式背串了——这是两种映射最本质的区别。9. B组号位数只看组数8 组 2³ →3 位。每组 2 块是干扰信息——组内全相联块在组内随便坐不占地址位。10. D选错误的A、B、C 都是正文原话。D 错——能放任意位置的是全相联直接映射是死位置对号入座。三种方式的自由度对比是软考翻来覆去的考点直接映射零自由度、全相联完全自由、组相联组内自由。八、五句话带走Cache 靠局部性吃饭循环是时间局部性数组/顺序是空间局部性平均访问时间t h·t₁ (1-h)·t₂代公式别口算差值直接映射对号入座区号块号块内地址简单但爱冲突全相联随便坐标记块内地址两段灵活但硬件贵组相联组间对号、组内随便折中方案组号位数只看组数。至此计算机组成原理的高频考点全部通关数据表示四篇 流水线 存储系统上午题这块的 10 来分应该稳了。下一篇预告进军操作系统——PV 操作与信号量。上午题里真正的思维题前趋图怎么画、P 操作 V 操作到底谁在等谁、信号量初值怎么设零公式纯逻辑是很多人上午题丢分的大户。咱们把它拆成套路。