☰
软考Cache命中率与平均访问时间真题解析(附百度网盘真题包)
2026/10/25 2:00:15 网站建设 项目流程

软考Cache命中率与平均访问时间真题(附百度网盘真题包)

适用对象:备考软考中级「软件设计师」「网络工程师」的同学
考查位置:上午综合知识·存储系统,1~2 分,与流水线并列“必拿分”
本文解决三件事:命中率怎么用、平均访问时间怎么代、反向求命中率怎么解

目录

  • 软考Cache命中率与平均访问时间真题(附百度网盘真题包)
    • 一、Cache 为什么能让访问变快
      • 1.1 两个概率,一个公式
      • 1.2 注意题干里的“缺失代价”
    • 二、先把三种映射方式理清(选择题常考)
    • 三、一条直线:命中率越高,Ta 越接近 Tc
    • 四、真题四步法
      • 4.1 反问题:给 Ta 求 H
      • 4.2 真题变体:缺失代价含 Cache 查找时间
    • 五、局部性原理:命中率不是天上掉下来的
    • 六、用代码验证正算与反算
    • 六、易错点清单
    • 七、写在最后

Cache 题几乎只考一个公式,但很多人在两个地方丢分:缺失代价要不要加 Cache 时间、题目给的是命中率还是缺失率。下面把公式、曲线、真题、代码一次讲清。

一、Cache 为什么能让访问变快

CPU 取数据先查 Cache:命中就直接返回,缺失才去主存。因为程序有局部性,绝大多数访问都能命中,所以平均下来接近 Cache 的速度。

1.1 两个概率,一个公式

  • 命中率 H:访问在 Cache 中命中的比例;缺失率 = 1 − H;
  • 平均访问时间Ta = H × Tc + (1 − H) × Tm(Tc 为 Cache 存取时间,Tm 为主存存取时间);
  • 效率 e = Tc / Ta,加速比 = Tm / Ta。

这条公式的本质就是“按概率加权平均”,不需要背推导。

1.2 注意题干里的“缺失代价”

软考有两种给法,得分点完全不同:

题干说法缺失时代价公式
直接给 Cache 与主存存取时间TmTa = H·Tc + (1−H)·Tm
明确“缺失时先查 Cache 再访主存”Tc + TmTa = H·Tc + (1−H)·(Tc+Tm)

看到“同时访问”“先查后访”这类字眼,务必回去确认一遍。

二、先把三种映射方式理清(选择题常考)

Cache 的考题分两条线:一条算时间(本文主线),另一条考映射方式。两者常在同一份卷子里出现,混淆点在于“块怎么放”。

映射方式放置规则优点缺点冲突概率
直接映射主存块号 mod Cache 行数,位置唯一硬件最简单、查找最快冲突最严重,抖动明显高
全相联映射任意块可放任意行冲突最少、命中率最高比较器多、成本高低
组相联映射组间直接映射、组内全相联折中方案,实际最常用逻辑稍复杂中

一句话记忆:直接映射最便宜也最容易撞车,全相联最贵也最灵活,组相联是工业界的选择(n 路组相联就是“每组 n 行,组内随便放”)。

三、一条直线:命中率越高,Ta 越接近 Tc

Ta 对 H 是线性关系,所以只要算两个端点就能估任何一点:H = 100% 时 Ta = Tc,H = 0% 时 Ta = Tm。以 Tc = 2 ns、Tm = 20 ns 为例,H 每提升 1%,Ta 下降 0.18 ns。

四、真题四步法

【题干】某计算机 Cache 存取时间为 2 ns,主存存取时间为 20 ns,命中率为 95%。求平均访问时间、Cache 效率与加速比。

步骤动作本题数值
① 拆概率H = 0.95,(1−H) = 0.05—
② 代公式Ta = 0.95×2 + 0.05×202.9 ns
③ 求效率e = 2 / 2.9≈ 69.0%
④ 求加速比20 / 2.9≈ 6.9 倍

4.1 反问题:给 Ta 求 H

题干改成“平均访问时间为 3.8 ns,求命中率”,只需解一元一次方程:

H = (Tm − Ta) / (Tm − Tc) = (20 − 3.8) / (20 − 2) = 0.90

即命中率 90%。这类题几乎每年都有变体,把公式变形记住即可。

4.2 真题变体:缺失代价含 Cache 查找时间

【题干】某系统采用“先查 Cache、未命中再访主存”的方式,Cache 存取周期 2 ns,主存存取周期 20 ns,命中率 90%,求平均访问时间。

【解析】缺失时先花 2 ns 查 Cache 再花 20 ns 访主存,代价为 22 ns:
Ta = 0.9 × 2 + 0.1 × 22 = 1.8 + 2.2 =4.0 ns。比按 Tm 直接代入的 3.8 ns 更大,差的就是那一次无效查找。

五、局部性原理:命中率不是天上掉下来的

局部性类型含义提升手段
时间局部性刚访问过的数据很可能再次被访问循环变量复用、提高 Cache 替换策略质量(LRU)
空间局部性相邻地址的数据很可能被一起访问按行访问数组、循环分块、预取

这也是为什么“把二维数组的遍历顺序从按列改成按行”能让程序快好几倍——不是算法变了,是命中率变了。

六、用代码验证正算与反算

defamat(H,Tc,Tm):"""平均访问时间"""returnH*Tc+(1-H)*Tmdefsolve_h(Ta,Tc,Tm):"""已知平均访问时间,反解命中率"""return(Tm-Ta)/(Tm-Tc)Tc,Tm=2,20forHin(0.90,0.95,0.99):ta=amat(H,Tc,Tm)print(f"H={H:.2f}Ta={ta:.2f}ns 效率={Tc/ta:.1%}加速比={Tm/ta:.2f}")print("反解:",round(solve_h(3.8,Tc,Tm),2))

运行结果:

H=0.90 Ta=3.80ns 效率=52.6% 加速比=5.26 H=0.95 Ta=2.90ns 效率=69.0% 加速比=6.90 H=0.99 Ta=2.18ns 效率=91.7% 加速比=9.17 反解: 0.9

可以看到:命中率从 90% 提到 99%,效率从 53% 涨到 92%,这就是局部性优化(循环分块、提高空间局部性)的价值。

六、易错点清单

  • 命中率与缺失率弄反:把 5% 的缺失率当成命中率代入,结果会算成 19 ns。
  • 缺失代价漏加 Tc:题干写“先查 Cache 再访主存”时,缺失代价是 Tc + Tm。
  • 效率与加速比混用:效率以 Tc 为基准,加速比以 Tm 为基准,分母都是 Ta。
  • 单位不统一:ns 与 μs 混算,差 1000 倍。
  • 忽略写策略:写直达/写回会影响实际访存次数,但 Ta 的公式仍按命中率加权。

七、写在最后

Cache 题只有一条主线:概率加权求平均,再拿 Tc 和 Tm 分别做比值。把本文 95% 那道题手算一遍,再用代码对拍一次,就把它变成稳拿的 1~2 分。

下一篇写「段页式地址转换与页面置换算法」,同属存储管理板块,需要的同学可以关注专栏更新。

本文涉及的历年真题与解析已整理成合集,需要的同学可自取:
链接: https://pan.baidu.com/s/1SwVEmITKHveCupjP_VH7pA 提取码: rk02

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询