共计 2022 个字符,预计需要花费 6 分钟才能阅读完成。
1、cpu 介绍
计算机的心脏 ” 中央处理单元 ”,简称 “CPU”。
CPU 负责执行程序,程序由一个个操作(又叫指令,指示 ” 计算机要做什么)组成。
如果是数学指令,比如加 / 减,CPU 会让 ALU 进行数学运算,也可能是内存指令,CPU 会和内存通信,然后读 / 写值。
2、制作 cpu
2.1 组件
- 1 个 RAM:假设它只有 16 个位置,每个位置存 8 位。
- 四个 8 位寄存器:A,B,C,D。用来 临时存数据 和 操作数据。
- 一张指令表:程序也可以以二进制存在内存里的,所以可给 CPU 支持的所有指令,分配一个 ID。
- 一个 ” 指令地址寄存器 ”,踪程序运行到哪里了。(存当前指令的内存地址)
- 一个指令寄存器,存当前指令。
- 控制单元:用于解码
- 时钟:用于管理 CPU 的节奏。
2.2 解析 CPU 执行程序的过程
以下为需要执行的四条指令
2.2.1 执行第一条指令 LOAD_A
(1)当启动计算机时,所有寄存器从 0 开始。
(2)进入第一阶段 ” 取指令阶段 ”(fetch phase),负责拿到指令。
首先,将 “ 指令地址寄存器 ” 连到 RAM,寄存器的值为 0,因此 RAM 返回地址 0 的值。
然后,0010 1110 会复制到 “ 指令寄存器 ” 里。
(3) “ 解码阶段 ”
指令拿到了,要弄清是什么指令,才能执行,即 “ 解码阶段 ”。
8 位的指令:用前四位存 "操作代码",简称 "操作码"(opcode)对应指令表中的指令。后四位代表数据来自哪里,可以是寄存器或内存地址。
- 根据指令表,前 4 位 0010 是 LOAD_A 指令,意思是,把 RAM 的值放入寄存器 A。后 4 位 1110 是 RAM 的地址, 转成十进制是 14。
- 指令由 “ 控制单元 ” 进行解码。“ 控制单元 ” 也是逻辑门组成的。
(4) “ 执行阶段 ”
知道了是什么指令,开始 “ 执行阶段 ”。
步 1:取值。用 “ 控制单元 ” 打开 RAM 的 “ 允许读取线 ”, 把地址 14 传过去,从 RAM 的地址 14 中拿到值 0000 0011,十进制的 3。
步二:存值。根据 LOAD_A 指令的要求,要把取到的值只放到寄存器 A,其他寄存器不受影响,所以使用一根线,把 RAM 连到 4 个寄存器。
步三:用 “ 控制单元 ” 启用寄存器 A 的 “ 允许写入线 ”。
步四:
成功把 RAM 地址 14 的值,放到了寄存器 A。
步五:LOAD_A 指令完成,” 执行阶段 ” 就此结束。把 “ 指令地址寄存器 ”+1,去拿下一条指令并解码执行。
总结:控制单元的抽象
LOAD_A 只是 CPU 可以执行的各种指令之一,不同指令由不同逻辑电路(控制单元)解码。
可以将 ” 控制单元 “ 包成一个整体。
控制单元就像管弦乐队的指挥,” 指挥 ” CPU 的所有组件 ” 取指令→解码→执行 ”。会配置 CPU 内的组件来执行对应操作。
2.2.2 执行 ADD 指令 “1000 0100”
(1) 指令解析:
1000 是 ADD 指令,后面的 4 位不是 RAM 地址,而是代表 2 个寄存器,第一个地址是 01, 代表寄存器 B, 第二个地址是 00, 代表寄存器 A。
因此,1000 0100,代表把寄存器 B 的值,加到寄存器 A 里。
(2) “ 控制单元 ” 的作用
- 启用寄存器 B 作为作为 ALU 的第一个输入。启用寄存器 A,作为 ALU 的第二个输入。
- 传递 ADD 操作码告诉 ALU 可以执行 ADD 操作(因为 ALU 可以执行多种操作)
- 控制单元用一个自己的寄存器暂时保存结果(因为结果应该存到寄存器 A,但不能直接写入寄存器 A,这样新值会进入 ALU,不断和自己相加)。关闭 ALU 之后,再把值写入寄存器 A。
(3) 把指令地址 + 1,执行下一条指令。
2.2.3 执行 STORE A 指令 ” 0100 1101″
(1) 解码
查看指令表,STORE A 指令是把寄存器 A 的值放入 RAM,RAM 地址为 13.
(2) 执行
- 把地址 13 传给 RAM,
- 打开 RAM 的 ” 允许写入 ”,同时打开寄存器 A 的 “ 允许读取 ”,把寄存器 A 里的值,传给 RAM。
2.2.4 时钟
在执行以上四条指令的时候,我们人工切换 CPU 的状态 “ 取指令→解码→执行 ”,但实际上电脑用 “ 时钟” 来负责管理 CPU 的节奏。
(1) 时钟的作用
时钟以精确的间隔触发电信号,控制单元会用这个信号,推进 CPU 的内部操作,确保一切按步骤进行。
(2) “ 时钟速度 ”
“ 时钟速度 ” 指 CPU “ 取指令→解码→执行 ” 的速度。单位是赫兹,
1hz/ s 代表一秒 1 个周期,
3、CPU
(1) CPU 抽象
RAM 是在 CPU 外面的独立组件,CPU 和 RAM 之间 用 “ 地址线 ” “ 数据线 ” 和 “ 允许读 / 写线 ” 进行通信。
(2) “ 英特尔 4004”
第一个单芯片 CPU 是 “ 英特尔 4004”,1971 年发布的 4 位 CPU,它的微架构 很像我们之前说的 CPU,它的时钟速度达到了 740 千赫兹 – 每秒 74 万次。
现在看视频的电脑或手机,可能有几千兆赫兹,1 秒 10 亿次时钟周期。
(3) 优化
- 超频:计算机超频,意思是修改时钟速度,加快 CPU 的速度。芯片制造商经常给 CPU 留一点余地,可以接受一点超频。但超频太多会让 CPU
过热,或产生乱码,因为信号跟不上时钟。 - 降频:有时没必要让处理器全速运行,可能用户走开了,或者在跑一个性能要求较低的程序,把 CPU 的速度降下来,可以省很多电。
- 动态调整频率:很多现代处理器可以按需求 加快或减慢时钟速度。