05 篇说"编程 = 给计算机下指令",那指令下给谁?——CPU。拆开看,它只是一个指挥官(控制器)+ 一个算术师(运算器)+ 几个小抽屉(寄存器)+ 一枚书签(程序计数器),外加一个滴答作响的节拍器(时钟)。一辈子循环三步:取指令 → 译码 → 执行。
1. 承上:指令到底下给谁
05 篇我们知道了:程序是 0/1 指令清单,编译器负责翻译。但还有一个大活人没出场——真正接收指令、执行指令的装置。
它就是 CPU(Central Processing Unit,中央处理器):你电脑里那块指甲盖大小、插在主板中央的芯片。04 篇讲的几十亿个晶体管,绝大部分就住在这里面;03 篇造的加法器,也装在它肚子里。
现在把它拆开。别怕,里面只有四个角色。
2. CPU 的三个部门 + 一枚书签
| 角色 | 学名 | 大白话 | 干什么 |
|---|---|---|---|
| 🧭 指挥官 | 控制器(Control Unit) | 念菜谱的人 | 唯一"懂"指令的部门:读指令、发号施令 |
| 🧮 算术师 | 运算器 / ALU | 干粗活的 | 加减乘除、比大小——03 篇的加法器就归它管 |
| 🗃️ 小抽屉 | 寄存器(Register) | CPU 自带的储物格 | 离 ALU 最近的存数处,每个只存一个数,最快 |
| 🔖 书签 | 程序计数器(PC) | 记着念到菜谱第几行 | 存"下一条指令的内存地址" |
几个角色怎么配合?口诀:
控制器念菜谱(取指令、译码),命令 ALU 算、命令寄存器存;书签每执行完一条就往后挪。
ALU 只认离它最近的数。要算 5 + 3,得先把 5 和 3 从内存搬进寄存器,算完再把结果搬回内存。寄存器快是快,但贵且少——现代 CPU 也就几十个,每个只能装一个数(64 位 CPU 每个抽屉装 64 个 0/1)。
3. CPU 的一辈子:三步循环
CPU 通电后到关机为止,永远在做同一个循环:
① 取指令(Fetch)—— 按书签的地址,从内存把下一条指令搬回来
② 译 码(Decode)—— 控制器拆开指令:操作码是"放入"?操作数是 5?
③ 执 行(Execute)—— 命令相应部门动手:数据进寄存器 / ALU 开算 / ……
↓
书签后移一行 → 回到 ①,永远循环
- 取指:书签指着内存第 1 格 → 控制器把
10111000 00000101搬回来 - 译码:控制器拆开——前 8 位操作码 = "放入",后 8 位操作数 = 5
- 执行:5 写入寄存器 A;书签后移指向指令 2
- 回到 ①,处理下一条指令……
遇到 05 篇讲过的"跳转指令"(JMP)怎么办?很简单:跳转指令会把书签直接改到另一个位置——这就是程序能"分情况""转圈圈"的机关。所有软件的花活,都是靠"改书签"实现的。
4. 节拍器:时钟与 GHz
三步循环总得有个节奏,不然控制器不知道"现在该走下一步了没"。这个节奏由时钟打:每"滴答"一次,循环往前推一格。
- 3 GHz = 每秒滴答 30 亿次 = 每秒完成约 30 亿个循环步
- 你买的"CPU 主频",买的就是这个节拍器多快
- 节拍器越快越费电、越烫——这就是为什么笔记本满负荷时风扇狂转
3GHz 的 CPU 执行一条简单指令约需 1~4 个滴答。你按一次键盘到屏幕出字,CPU 已经跑了几亿个循环步。所谓"电脑快",快在它不厌其烦——每一步都蠢,但每秒几十亿次。
5. 指令集是"方言":x86 与 ARM
05 篇说 CPU 只会百来条动作——但不同家族的 CPU,会的动作不一样。这就像方言:
| 家族 | 代表 | 谁在用 | 风格 |
|---|---|---|---|
| x86 | Intel、AMD | 电脑(Windows PC、Mac 旧款) | 词多、指令复杂(CISC) |
| ARM | 高通、苹果 M 系列、联发科 | 手机、平板、新 Mac | 词少、指令精简(RISC),省电 |
这解释了一个生活现象:手机 App 不能直接装到 Windows 电脑上跑——App 里的指令是说"ARM 方言"的,x86 的 CPU 听不懂。反过来也一样。(模拟器做的事,就是现场"翻译方言",所以模拟器跑得慢。)
05 篇说"高级语言和机器无关,一份代码到处能跑"——靠的就是每个平台各配一个翻译官:Windows 上把 Python 翻成 x86,手机上翻成 ARM。人写的代码不变,变的是翻译官的口音。
6. 速度金字塔:为什么抽屉离得近这么重要
各存储层的速度差距大得吓人(数量级感受即可):
寄存器 最快(<1 纳秒) 最小(几十个) 最贵
↓
高速缓存 很快(几纳秒) 几 MB~几十 MB
↓
内存 较慢(约 100 纳秒) 几 GB~几十 GB
↓
硬盘 最慢(微秒级起) 几百 GB~几 TB 最便宜
CPU 快得离谱,内存跟它比就是蜗牛。所以 CPU 采取的策略是:常用的数据尽量揣在怀里(寄存器、缓存),实在没有才去内存拿,拿了顺手多拿一份存缓存(下次还要用的概率大)。这个"揣怀里"的机制,就是你听过的缓存。
- 为什么开机慢、软件打开慢? 程序从硬盘搬进内存,硬盘最慢——搬完就快了。
- 为什么关机后内存里的东西全没了? 内存和寄存器都要持续供电才记得住(05 篇说"程序要先进内存",断电 = 抽屉全空);硬盘才是断电不忘的。这也是"存储程序"思想的代价。
7. 多核:请了好几个指挥官
现代 CPU 宣传"8 核 16 线程"——核(Core)就是一套完整的"指挥官 + ALU + 寄存器 + 书签"。8 核 = 芯片里并排塞了 8 套班底,可以同时干 8 件事。
- 但"多核 ≠ 快 8 倍":一个任务如果前后步骤环环相扣(下一步依赖上一步),只能一个人干完——会拆任务才能吃满多核。这正是 05 篇说的"拆解能力"在硬件层的回响。
- "线程"先按下不表,学到操作系统篇再展开。
8. 常见误区
不会。控制器只是把操作码译成固定动作。05 篇说过:理解只发生在人脑子里。 [!warning] 误区二:主频越高电脑一定越快 不一定。速度 = 主频 × 每周期能干的活 × 缓存命中情况 × 软件会不会用多核。8 核 2.5GHz 跑分常常赢 4 核 4GHz。 [!warning] 误区三:内存越大 CPU 越快 内存大只是"能同时装更多程序",不直接加速计算。真正贴身提速靠的是缓存和寄存器。 [!warning] 误区四:手机 CPU 和电脑 CPU 是同一种东西的不同型号 是两个方言家族(ARM vs x86),指令集都不同——这决定了软件生态的分家,不只是快慢差别。 [!warning] 误区五:程序卡住是 CPU 坏了 更可能是:在等硬盘 / 等网络 / 死循环改书签(程序 bug)。CPU 自己几乎不会"罢工",它只会忠实地跑到断电为止。
9. 可折叠自测题
控制器(读指令、发号施令)、运算器 ALU(算术与逻辑)、寄存器(贴身小抽屉存数)、程序计数器(书签,记下一条指令的地址)。 [!question]- Q2. 三步循环是什么?跳转指令改变了哪一步? 取指令 → 译码 → 执行,循环往复。 跳转指令改写书签(程序计数器),让下一步去内存别处取指令——程序的分情况和循环全靠它。 [!question]- Q3. 3GHz 是什么意思? 时钟每秒滴答 30 亿次。节拍器驱动取指-译码-执行循环往前走,每滴答一下推进一格。 [!question]- Q4. 为什么手机 App 不能直接装在 Windows 电脑上跑? 手机 CPU 说 ARM 方言,电脑 CPU 说 x86 方言——指令集不同,互相听不懂。模拟器靠现场翻译来兼容,代价是慢。 [!question]- Q5. 为什么程序"第一次打开慢,第二次快"? 第一次要从最慢的硬盘把程序搬进内存、塞进缓存;第二次缓存里还有热乎的,CPU 直接从怀里的抽屉拿——快几个数量级。
10. 下一步学什么
- [x] 执行指令 —— 已写成 第 07 篇:钻进"执行"内部,看电怎么流动
- [ ] 十六进制与负数表示 —— 颜色代码
#FF8800、内存地址,原码/反码/补码为什么会演变出补码(03 已讲用法,此篇讲由来) - [ ] 数据压缩原理 —— 哈夫曼、RLE,ZIP 到底做了什么
- [ ] 计算机五大部件 —— CPU 之外,一台完整的电脑还需要什么(本篇已备好最大一块拼图)
- [ ] 操作系统做什么 —— 8 个核、几十个程序,谁安排谁先用?(接本篇结尾)
- [ ] 写第一行真代码 —— 想动手的话,Python 是最好的第一门语言,说一声我带你装环境
相关笔记
- 05 编程是什么-给计算机下指令 ← 上一篇:指令怎么说(本篇讲指令怎么被执行)
- 04 实现电路计算之路 ← 这块芯片是怎么造出来的
- 03 用电表示计算-计算机加法运算 ← ALU 肚子里的加法器
- 📇 计算机基础 · 索引
- 🏠 返回主页