当前位置: 首页 > news >正文

【软考备考】存储系统详解:Cache 命中率、三种地址映射,计组最后一座大山(附 10 道练习)

计算机组成原理的最后一篇,来翻存储系统这座山。

它每年在上午题里占 2~3 分,考法集中在两块:Cache 命中率和平均访问时间(纯计算,套公式)、主存与 Cache 的地址映射(直接映射/全相联/组相联,概念+地址拆分)。前者是流水线那种"会公式就得分"的题,后者是这个系列到目前为止最需要"理解"的部分——但懂了之后你会发现,不过如此。

一、为什么需要 Cache?一个速度矛盾

CPU 的速度比主存(内存)快一两个数量级。CPU 每个时钟周期都张嘴要指令要数据,内存却慢吞吞——结果就是 CPU 大部分时间在。于是工程师在 CPU 和主存之间加了一层小而快的存储:Cache(高速缓存)。

问题是 Cache 很贵,容量做不大,只能放主存的一小部分内容。凭什么放一小部分就管用?靠的是程序的局部性原理(概念题常客):

  • 时间局部性:刚被访问过的内容,很可能马上再被访问。典型场景:循环——循环体那几十条指令被反复执行;

  • 空间局部性:刚被访问的位置,它附近的内容很可能接着被访问。典型场景:顺序执行的指令、顺序遍历的数组。

所以 Cache 和主存之间以"块"为单位交换数据:要一个字节,把它所在的整个块(比如 128 字节)都搬进来——赌的就是空间局部性。

二、命中率与平均访问时间(计算题,真题级)

命中率 h:CPU 要的数据恰好在 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×10+0.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~5)

1.在 CPU 与主存之间设置 Cache 的主要目的是( )。

A. 扩大主存容量 B. 降低整机成本 C. 解决 CPU 与主存速度不匹配的问题 D. 提高外存储器的速度

2.程序中循环结构的代码被反复执行, Cache 能据此提高效率,这体现了( )。

A. 时间局部性 B. 空间局部性 C. 顺序局部性 D. 随机局部性

3.某系统 Cache 存取周期为 10ns,主存存取周期为 100ns,Cache 命中率为 95%,则平均访问时间为( )。

A. 10ns B. 15ns C. 14.5ns D. 95ns

4.直接映射方式下,主存块映射到 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.5ns

7.主存 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 的只算了命中部分;注意不是 10+0.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×10=9ns 涨到了 0.95×10=9.5ns——命中次数变多,Cache 时间多花 0.5ns,净省 4.5ns。老老实实代公式,别口算"差值"。

7. B四步法:块内地址 7 位(128=2⁷);Cache 块数 8KB/128B = 64 → 块号 6 位;主存地址 20 位(1MB=2²⁰);区号 = 20-7-6 =7 位。选 C(13 位)的是把"主存总块号"当成了标记——直接映射里块号已经拿去定位 Cache 行了,标记只存剩下的区号。

8. A全相联随便坐,没有 Cache 块号字段,地址只有两段:整个主存块号当标记 + 块内地址。选 B 的是把直接映射的三段式背串了——这是两种映射最本质的区别。

9. B组号位数只看组数:8 组 = 2³ →3 位。"每组 2 块"是干扰信息——组内全相联,块在组内随便坐,不占地址位。

10. D选"错误的":A、B、C 都是正文原话。D 错——能放任意位置的是全相联;直接映射是死位置(对号入座)。三种方式的"自由度"对比是软考翻来覆去的考点:直接映射零自由度、全相联完全自由、组相联组内自由。


八、五句话带走

  1. Cache 靠局部性吃饭:循环是时间局部性,数组/顺序是空间局部性;

  2. 平均访问时间t = h·t₁ + (1-h)·t₂,代公式别口算差值;

  3. 直接映射:对号入座,区号|块号|块内地址,简单但爱冲突;

  4. 全相联:随便坐,标记|块内地址两段,灵活但硬件贵;

  5. 组相联:组间对号、组内随便,折中方案,组号位数只看组数

至此,计算机组成原理的高频考点全部通关:数据表示四篇 + 流水线 + 存储系统,上午题这块的 10 来分应该稳了。

下一篇预告:进军操作系统——PV 操作与信号量。上午题里真正的"思维题",前趋图怎么画、P 操作 V 操作到底谁在等谁、信号量初值怎么设,零公式,纯逻辑,是很多人上午题丢分的大户。咱们把它拆成套路。

http://www.jsqmd.com/news/1205847/

相关文章:

  • VSCode+STM32CubeMX搭建FreeRTOS嵌入式开发环境实战
  • 石家庄本地记账公司:选对伙伴,企业财务轻松又省心 - 热点速览
  • CANN asc-devkit GetCurBufSize函数文档
  • EnderIO-1.5-1.12开发指南:如何为这款经典模组贡献代码与功能
  • Pyfakefs完全指南:如何用Python内存文件系统加速单元测试
  • OpenDesign Token深度解析:为什么它是开源项目设计系统的最佳选择
  • 爱彼中国官方售后服务中心|官方地址及联系电话权威信息公示(2026年7月最新) - 爱彼中国官方服务中心
  • Flow-Guided Feature Aggregation论文解读:ICCV 2017经典论文深度剖析
  • 2026优质一对一论文辅导机构汇总,定制化毕业避坑攻略! - 小艾学姐
  • 具身智能组织内耗的根源与破局:从物理约束出发
  • 植被渲染与视差遮挡映射:EveryRay引擎的自然环境渲染技术
  • 2026年7月泰州代账机构推荐 代理记账 / 注册公司 / 泰州代账 / 代账 / 企业注册,泰州代账机构口碑推荐 - 资讯快报
  • 2026 年更新:铁锋优秀的船舶模型定做厂家哪家可靠,打破设计思维:模型如何颠覆航海培训? - 企业官方推荐【认证】
  • 开关电源PCB设计:EMI优化与热管理实战
  • GPT-Live全双工语音交互架构解析:从实时ASR到AI Agent决策
  • Relude的Extra模块:探索高级功能与实验性特性
  • openEuler阿语门户测试策略:单元测试与端到端测试的完整方案
  • Ethereum Security Toolbox社区生态:如何参与贡献和获取技术支持
  • 劳力士官方售后中心资质报告|权威公布最新官网认证信息(2026年7月最新) - 劳力士中国服务中心
  • Libretto:自动修复失败的 Playwright 脚本,免费且开源!
  • AMD KV260视觉套件视频采集与硬件编码开发指南
  • 投票小程序有哪些?2026实测好用微信投票小程序推荐避雷指南 - 微信投票小程序
  • 大模型服务缓存优化:原理、实现与工程实践
  • AI技能封装与落地的关键技术解析
  • Windows 11 GIF功能失效原因与解决方案
  • 投票制作平台有哪些?2026靠谱微信投票平台推荐 - 微信投票小程序
  • Dante Cloud组合模式:树形结构的统一处理接口
  • 上海劳力士中国官方售后服务体系全攻略|全新维修地址及客服电话权威公示(2026年7月最新) - 劳力士中国维修中心
  • 欧米茄中国大陆官方售后指南|权威通告维修网点及客服热线(2026年7月最新) - 欧米茄中国服务中心
  • 2026 郑州老金首饰回收 收的顶正规门店秒转账不折旧 - 奢侈品回收评测