news 2026/6/4 18:22:37

计算机组成原理 | Cache的基本原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机组成原理 | Cache的基本原理

计算机组成原理 | CPU 为什么需要 Cache?一文搞懂“局部性原理”与命中率计算!

摘要/导语:

前几期我们分别聊了机械硬盘的“慢”和 SSD 的“快”。但即便如此,内存的速度依然跟不上 CPU 的脚步。为了解决这个巨大的速度鸿沟,高速缓冲存储器 (Cache)应运而生。

为什么 CPU 总能“猜”到你要什么数据?局部性原理到底是什么?Cache 命中率和缺失率怎么算?本期带你拆解 Cache 的核心考点,文末附带经典例题解析,建议收藏反复看!


🚀 正文内容

⚡ 第一部分:Cache 存在的意义——解决“速度矛盾”

在计算机系统中,CPU 的速度极快(纳秒级甚至更快),而主存(内存)的速度相对较慢。如果 CPU 每次都要去主存取数据,那它大部分时间都在“等待”,效率极低。这就好比法拉利跑车一直在等红绿灯,根本跑不起来。

Cache 的工作原理很简单,但非常精妙:

  • 核心思想:将当前最常用、即将用到的主存块复制到 Cache 中。Cache 就像是你书桌上的“临时文件堆”,而主存是身后的“大书柜”。
  • 目的:利用 Cache 的高速特性,缓和 CPU 与主存之间的速度矛盾。
  • 效果:对程序员透明(你不需要写代码去管理 Cache),让系统看起来既像主存一样大,又像 Cache 一样快。

💡 避坑指南 & 深度解析:
考试中常考的一个细节是:每次被访问的主存块,一定会被立即调入 Cache 吗?

  • 标准答案是不一定!这取决于具体的替换算法和映射方式。例如,如果是直接映射,且目标位置已经被占用,可能需要先替换旧数据。但在某些特定的简单模型或理想化描述中,可能会强调“一旦访问即调入”,做题时需结合题干语境判断。
  • 补充概念:主存与 Cache 之间是以“”为单位进行数据交换的。哪怕 CPU 只想要 1 个字节的数据,Cache 也会把包含这个字节的整个“块”都搬进来。

🔍 第二部分:Cache 为什么能工作?——局部性原理

Cache 之所以有效,不是因为它快,而是因为它“聪明”。它的聪明建立在程序运行的局部性原理之上。这是所有缓存技术的基石。

1. 时间局部性

  • 定义:如果一个信息项正在被访问,那么在近期它很可能再次被访问。
  • 例子:循环结构中的指令、被频繁调用的变量。
  • 对策:Cache 会保留最近使用过的数据。

2. 空间局部性

  • 定义:如果一个存储器的位置被引用,那么它附近的地址也很可能即将被引用。
  • 例子:数组遍历、顺序执行的指令流。
  • 对策:Cache 不仅读取当前数据,还会把相邻的数据也一起搬进来(预取)。

💡 记忆口诀:

  • 时间局部性= “回头客”(刚用过还要用)
  • 空间局部性= “连坐制”(用了这个,旁边那个大概率也要用)

📊 第三部分:性能分析——命中率与两种方式

Cache 再好,也不可能装下所有数据。当 CPU 要找的数据不在 Cache 里时,就叫未命中

1. 核心指标

  • 命中率 (HHH):CPU 访问 Cache 成功的次数 / 总访问次数。
  • 缺失率 (MMM)1−H1 - H1H
  • 平均访问时间 (TaT_aTa):这是考试必考的公式!
    (这里展示的公式是同时访问时的公式)
    Ta=H×Tc+(1−H)×TmT_a = H \times T_c + (1-H) \times T_mTa=H×Tc+(1H)×Tm
    (其中TcT_cTc是 Cache 时间,TmT_mTm是主存时间)

2. 两种访问方式(难点)

  • 方式一:先查 Cache,后查主存(串行)
    • 流程:CPU 先问 Cache,“你有吗?” -> Cache 说“没有” -> CPU 再去问主存。
    • 特点:逻辑简单,但如果没命中,浪费时间较多(因为多了一次查询 Cache 的时间)。
  • 方式二:同时访问(并行)
    • 流程:CPU 同时向 Cache 和主存发请求。
    • 结果:如果 Cache 命中,立刻取消主存的访问;如果未命中,直接等主存的数据。
    • 特点:速度快,但硬件设计复杂,功耗稍高。

🧩 第四部分:其他重要概念

1. 块的别名

  • 主存的块:又叫页 / 页框 / 页面
  • Cache 的块:又叫
  • 注意:虽然名字不同,但它们的大小通常是对应的,是为了方便数据搬运。

2. 地址拆分

主存地址通常被拆分为两部分:

  • 主存块号:用来在 Cache 中查找对应的行(标记匹配)。
  • 块内地址:找到行之后,确定具体要取哪一个字节的数据。

📝 课后实战:精选习题与解析

为了巩固今天的知识,这里有三道经典题目,涵盖了概念辨析和计算。

1. 【单选】关于 Cache 的工作原理,下列说法错误的是?

A. Cache 的存在是为了缓和 CPU 与主存之间的速度矛盾
B. Cache 对程序员是透明的,由硬件自动管理
C. 每次被访问的主存块,一定会被立即调入 Cache
D. 主存与 Cache 之间以“块”为单位进行数据交换

✅ 正确答案:C
解析:这是一个经典的陷阱题。虽然理想情况下我们希望这样,但实际上受限于 Cache 容量和映射规则(如直接映射冲突),并不是“一定”能立即调入,可能需要等待替换旧块。

2. 【单选】程序执行过程中,循环体指令的频繁执行体现了程序的哪种局部性?

A. 空间局部性
B. 时间局部性
C. 顺序局部性
D. 逻辑局部性

✅ 正确答案:B
解析:循环意味着同一段代码在很短的时间间隔内被反复执行,这是典型的“现在访问的地址,不久之后也很可能被再次访问”,即时间局部性

3. 【计算题】Cache 平均访问时间计算

假设某计算机系统的 Cache 存取周期为10ns10\text{ns}10ns,主存的存取周期为100ns100\text{ns}100ns。若 Cache 的命中率为95%95\%95%,请计算该存储系统的平均访问时间。(假设采用同时访问方式,即未命中时不额外消耗 Cache 查询时间)

✅ 解题思路与答案:
根据公式:Ta=H×Tc+(1−H)×TmT_a = H \times T_c + (1-H) \times T_mTa=H×Tc+(1H)×Tm

  • H=0.95H = 0.95H=0.95
  • Tc=10nsT_c = 10\text{ns}Tc=10ns
  • Tm=100nsT_m = 100\text{ns}Tm=100ns

计算过程:
Ta=0.95×10+(1−0.95)×100T_a = 0.95 \times 10 + (1 - 0.95) \times 100Ta=0.95×10+(10.95)×100
Ta=9.5+0.05×100T_a = 9.5 + 0.05 \times 100Ta=9.5+0.05×100
Ta=9.5+5=14.5nsT_a = 9.5 + 5 = 14.5\text{ns}Ta=9.5+5=14.5ns

结论:虽然主存很慢(100ns100\text{ns}100ns),但有了 Cache,平均下来只要14.5ns14.5\text{ns}14.5ns,性能提升了近 7 倍!这就是 Cache 的威力。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 18:22:35

BilibiliDown:B站视频音频一键提取终极指南,免费获取高质量音源

BilibiliDown:B站视频音频一键提取终极指南,免费获取高质量音源 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitc…

作者头像 李华
网站建设 2026/6/4 18:20:20

SourceGit:5分钟掌握跨平台Git图形化客户端的完整使用指南

SourceGit:5分钟掌握跨平台Git图形化客户端的完整使用指南 【免费下载链接】sourcegit Windows/macOS/Linux GUI client for GIT users 项目地址: https://gitcode.com/gh_mirrors/so/sourcegit 你是否厌倦了在命令行中反复输入Git命令?是否希望有…

作者头像 李华
网站建设 2026/6/4 18:20:17

三分钟解锁RPG Maker游戏资源:终极浏览器解密指南

三分钟解锁RPG Maker游戏资源:终极浏览器解密指南 【免费下载链接】RPG-Maker-MV-Decrypter You can decrypt RPG-Maker-MV Resource Files with this project ~ If you dont wanna download it, you can use the Script on my HP: 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/6/4 18:15:24

如何快速解决《绝区零》VRAM内存泄漏:DXVK优化完整指南

如何快速解决《绝区零》VRAM内存泄漏:DXVK优化完整指南 【免费下载链接】dxvk Vulkan-based implementation of D3D8, 9, 10 and 11 for Linux / Wine 项目地址: https://gitcode.com/gh_mirrors/dx/dxvk 你是否在玩《绝区零》时遇到游戏突然卡顿、纹理加载失…

作者头像 李华
网站建设 2026/6/4 18:12:04

MySQL的两大支柱:undo Logredo log

redo log 和 undo log 是事务型数据库保证 ACID 的两根支柱 一、redo log(重做日志) 1.1 核心作用 保证持久性(Durability),事务提交后,即使数据库崩溃,已提交的数据也能根据redo log 恢复。Redo 负责恢复数据页 1.2 核心原则 先写日志&#…

作者头像 李华
网站建设 2026/6/4 18:12:03

利用快马平台快速构建天元云防火墙策略验证原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个用于天元云防火墙策略配置验证的web应用,该应用需要包含以下核心功能:提供一个可视化界面展示防火墙规则列表,每条规则需包含源IP、目…

作者头像 李华