CPU 肚子里只有四块——寄存器、控制器、运算器、时钟;它一天到晚做的事,就是这四块绕着一条指令转一圈。
全书第一节。先认识跑程序的那台机器本身,后面讲二进制、内存、压缩才有落脚点。
一、CPU 是干什么的
CPU 是中央处理器,一句话说清它的职责:解释并执行指令。 注意这两个词——它是【解释】和【执行】,不是【创造】。 你写的代码被人(编译器)翻译成指令,CPU 只负责照做。 所以 CPU 内部的结构,都是围绕【怎么又快又准地把指令做掉】长出来的。
二、里面的四块
教材把 CPU 内部点成四块:寄存器、控制器、运算器、时钟。 寄存器:CPU 内部的存放处,指令和数据在处理之前都要先搬到这里。 控制器:从内存读指令和数据,按指令的含义去指挥别的部件干活。 运算器:真正动手算的地方——加减乘除、比大小。 时钟:发出固定频率的信号,让所有动作踩在同一个节拍上。
三、打个比方
把 CPU 想成一个小车间: 寄存器是工作台面——手边放得下、够得着的那一小块地方。 控制器是工头——看着图纸下命令,自己不搬砖。 运算器是机床——活是它干的,但它只认送来的料。 时钟是节拍器——滴答滴答,所有人跟着它的节奏动。 这个比方越熟悉后面越好懂:几乎所有性能问题,最后都能落回这四块中的某一块。
四、为什么非要分成四块
分块的意义是把不同的事拆开、各管一摊: 控制器只管【指令从哪来、要干什么】,不必关心加法怎么做。 运算器只管【给我两个数】,不必关心这两个数从哪个变量来。 分工带来的好处是各块能同时忙——这就是后面流水线、多发射这些技术的起点。 但分工也划出了速度的上限:时钟再快,也要等数据搬进寄存器、等指令从内存读出来。 所以【换更快的 CPU】往往不如【少搬几次数据】——这句话会贯穿全书。
五、四块之外,还要记住一条主线
这四个部件不是各自为政,它们围着一条循环转: 取指令 → 译码 → 执行 → 程序计数器前进,然后再来一遍。 CPU 一秒钟重复这个循环几十亿次——你看到的视频、游戏、网页,都是这几十亿次重复拼出来的。 下一节先把四块里和程序打交道最多的那块(寄存器)讲透。
六、动手 Demo:一条指令在 CPU 内部走一趟
CPU 肚子里就四块:寄存器放数据、控制器发号施令、运算器做加减、时钟打拍子。 让一条指令走一趟,看四块怎么配合。
steps = [
("取指", "控制器"),
("译码", "控制器"),
("取数", "寄存器"),
("运算", "运算器"),
("写回", "寄存器"),
("前进", "控制器"),
]
for i, (step, who) in enumerate(steps, 1):
print("%d. %-4s 由%s负责" % (i, step, who))
实跑输出:
--------------------------------------------------------------------
一条指令在 CPU 内部走一趟
--------------------------------------------------------------------
CPU 肚子里就四块:**寄存器**放数据、**控制器**发号施令、
**运算器**做加减、**时钟**打拍子。让一条指令走一趟看它们怎么配合。
步骤 谁在做 做什么
---------------------------------------------------
取指 控制器 按 PC 里的地址,从内存取出指令
译码 控制器 看懂这条指令要干什么
取数 寄存器 把操作数送进累加器
运算 运算器 做加减乘除,结果放回累加器
写回 寄存器 把结果存回寄存器或内存
前进 控制器 把 PC 指向下一条指令
四块的账:
控制器 取指、译码、发命令——六步里有三步是它在做
寄存器 装数据的地方,取数和写回都落到它头上
运算器 只在【运算】那一步露面,但那是出结果的地方
时钟 不在步骤表里——它像节拍器,每一步都踩它的拍
**一条指令就是这六拍。CPU 一天到晚只重复这六拍。**
六步里控制器露面三次(取指、译码、发命令),寄存器露面两次(取数、写回)。 运算器只在一处出现,但那一处是出结果的地方。 时钟不在表里——它不在【步骤】上,而是给所有步骤打拍子。
30 秒实验
- 打开系统的任务管理器(或活动监视器),看一眼 CPU 的实时频率——那就是时钟在工作。
- 随便找一张 CPU 架构框图,试着认出那四块:寄存器、控制器、运算器、时钟。
常见误区
- 以为 CPU 会【理解】你写的代码。它只会一条一条执行指令,指令是别人替你翻译好的。
- 以为主频越高就一定越快。时钟只是节拍,还要看每条指令要几拍、数据跟不跟得上。
自测三问(点开对答案)
1. CPU 内部由哪四部分组成? —— 寄存器、控制器、运算器、时钟。 2. 控制器和运算器各管什么? —— 控制器读指令并按指令含义控制全局;运算器负责加减乘除之类的运算。 3. 为什么说分工也划出了速度上限? —— 各块要互相等:时钟再快,也要等数据搬进寄存器、等指令从内存读出。- ☐ 下一节(1.2 CPU是寄存器的集合体)
相关笔记
- CPU是寄存器的集合体 — 四块里与程序最亲近的那一块
- CPU的处理其实很简单 — 本章收口:这台机器到底会几件事
- 输入、运算、输出是硬件的基础 — 姊妹篇里硬件三件套的另一种讲法
- 🔵 计算机基础 · 索引 — 硬件底层的入门课
- ⚙️ 程序是怎样跑起来的 · 索引