计算机是如何⼯作的
- 🌲计算机发展史
- 🌲冯诺依曼体系(Von Neumann Architecture)
- 🌲CPU 基本⼯作流程
- 🍓逻辑⻔
- 🍓⻔电路(Gate Circuit)
- 🍓算术逻辑单元 ALU(Arithmetic & Logic Unit)
- 🍓算术单元(Arithmetic Unit)
- 🍓逻辑单元(Logic Unit)
- 🍓ALU 符号
- 🍓寄存器(Register) 和内存(RAM)
- 🍓控制单元 CU(Control Unit)
- 🍓指令(Instruction)
- 🍇CPU 的基本⼯作流程
- 🌲⼩结
🌲计算机发展史
计算的需求在⼈类的历史中是⼴泛存在的,发展⼤体经历了从⼀般计算⼯具到机械计算机到⽬前的电
⼦计算机的发展历程。
⼈类对计算的需求,驱动我们不断的发明、改善计算机。⽬前这个时代是“电⼦计算机”的时代,发
展的潮流是:更快速、更稳定、更微型。计算机的以后将如何发展,期待⼤家的努⼒。
🌲冯诺依曼体系(Von Neumann Architecture)
现代的计算机, ⼤多遵守 冯诺依曼体系结构
- CPU 中央处理器: 进⾏算术运算和逻辑判断.
- 存储器: 分为外存和内存, ⽤于存储数据(使⽤⼆进制⽅式存储)
- 输⼊设备: ⽤⼾给计算机发号施令的设备.
- 输出设备: 计算机个⽤⼾汇报结果的设备.
针对存储空间
- 硬盘 > 内存 >> CPU
针对数据访问速度
- CPU >> 内存 > 硬盘
认识计算机的祖师爷 – 冯诺依曼
冯·诺依曼(John von Neumann,1903年12⽉28⽇-1957年2⽉8⽇), 美籍匈⽛利数学家、计算机
科学家、物理学家,是20世纪最重要的数学家之⼀。冯·诺依曼是布达佩斯⼤学数学博⼠,在现代计
算机、博弈论、核武器和⽣化武器等领域内的科学全才之⼀,被后⼈称为“现代计算机之 ⽗”、“博弈论之⽗”.
🌲CPU 基本⼯作流程
接下来,我们⽤⼀个从⽆到有的过程,⼀步步搭建⼀个 CPU 出来,希望⼤家可以借助这个过程,理解
CPU、内存等计算机主要部件的⼯作原理。
🍓逻辑⻔
电⼦开关⸺机械继电器(Mechanical Relay)
通过电⼦开关,我们可以实现 1 位(bit) 的看似⽆⽤的逻辑运算,但⾄少它⼯作起来了,不是么。怎么
使⽤电⼦开关组合出真正有⽤的逻辑组件,我们接来下会做进⼀步的学习了解。
以后的真空管、晶体管的实质也是完成类似的⼯作,只是物理原理更加复杂,我们就不带着⼤家做深
⼊解读了。
🍓⻔电路(Gate Circuit)
接下来,我们学习如何使⽤电⼦开关构建⼀些有⽤的部件⸺⻔电路。可以实现 1 位(bit) 的基本逻辑
运算。
🍓算术逻辑单元 ALU(Arithmetic & Logic Unit)
ALU 是计算机中进⾏算数、逻辑运算的核⼼部件,是计算机的数学⼤脑。接下来,我们⽤上⼀节构建
的逻辑⻔来完成⾃⼰的⼀个 ALU,去学习理解它的⼯作模式,以便作为我们进⼀步理解现代计算机⼯
作原理的基⽯。
进制的理解
🍓算术单元(Arithmetic Unit)
算数单元,负责计算机⾥的所有数字操作,⽐如四则运算,当然它能做的远远不⽌这些。接下来我们
会带着⼤家实现⼀个 8 位(bits)的加法器(adder)来,以演⽰整个过程,其他的运算器就不再详细
讲解了。
⾄此,⼀个 8 位(bits) 加法器就被我们从⽆到有制作了出来。算术单元⽀持的操作当然远不⽌这些,
通过继续组合逻辑⻔,算数单元可以做到加减乘除甚⾄更多的算术运算,但⼀个加法器作为演⽰已经
⾜够了。实际上,乘法器和除法器的制作难度是要⾼于加、减法器的,有兴趣的同学可以尝试做更多
的了解。
🍓逻辑单元(Logic Unit)
逻辑单元主要⽤来进⾏逻辑操作,最基本的操作就是 与、或、⾮操作,但不只是⼀位(bit)数的⽐较。
🍓ALU 符号
经过我们的努⼒,通过基本的逻辑⻔电路,我们⼀步步地做出了⼀个 8 位(bits) ALU,甚⾄⽐ Intel
74181 还要强⼤,Intel 74181 只是⼀个 4 位(bits) ALU(😀)。当然现代的计算机中的 ALU 部件⾮常强
⼤,复杂度远远超过了我们的想象,32 位 甚⾄ 64 位基本已经普及全球了。但⽆论如何,再复杂的
ALU 也是芯⽚⼯程师像我们这样,⼀层⼜⼀层,⼀步⼜⼀步地将其抽象出来的。ALU 是第⼀次将⼈类
历史上的数学和逻辑学学科有机地结合起来,可以视为⼈类智慧发展的现代巅峰。
🍓寄存器(Register) 和内存(RAM)
光有 ALU 还是远远不够的,我们⽆法为 ALU 提供存储的部件,所以接来下,我们利⽤⻔电路简单说明
下存储的制作。注意,虽然图中没有明显的表⽰出来,但这些存储都是要求必须保持通电状态的,也
就是这些存储都是易失的(volatile)
中间我们隐藏了⼀些实现细节,最后的效果就是:使能线置位时,输⼊为 1,保存 1;输⼊为 0,保存
0。使能线不置位时,则写⼊⽆效。
我们可以利⽤⻔锁,构建我们需要的寄存器和内存。
内存的构建要⽐这个复杂⼀点,但基本原理⼀致。如此构建的内存被称为 RAM(Random Access
Memory),可以⽀持 O(1) 时间复杂度访问任意位置的数据,这也就是我们数组下标访问操作是 O(1)
的硬件⽀持。
期间,为了我们学习的聚焦性,我们隐藏了⼤量的实现细节,对于这部分知识感兴趣的同学可以在课
后做深⼊的学习。
🍓控制单元 CU(Control Unit)
我们现在有 ALU、存储了,但这还是不⾜以让我们的计算机⼯作起来,我们需要有⼀个部件来指挥
ALU 进⾏何种的运算,⽽这个部件就是控制单元(CU)。
关于 CU 如何由⻔电路从⽆到有搭建,我们就进⾏抽象了,我们只需要理解 CU 可以驱动 ALU 进⾏具体
的计算⼯作即可,⾄于 ALU 是如何驱动 ALU 进⾏⼯作的,我们在下⼀节进⾏详细的论述。
🍓指令(Instruction)
⾸先,我们先介绍下我们需要到的指令(instruction)
所谓指令,即指导 CPU 进⾏⼯作的命令,主要有操作码 + 被操作数组成。
其中操作码⽤来表⽰要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是
寄存器编号等。
指令本⾝也是⼀个数字,⽤⼆进制形式保存在内存的某个区域中。
🍇CPU 的基本⼯作流程
接下来,我们演⽰指令运⾏的⼀个周期,希望同学们可以学习到其流程,并完成剩余指令的运⾏过
程。
第⼀条指令的运⾏,其实没有⽤到我们之前制作的 ALU 部件,但这只是其中⼀些指令⽽已,⼤家尝试
把剩余的 3 条指令⾃⾏运⾏⼀次,观察并理解这个过程。
我们来总结下执⾏周期经过哪些阶段:
当然,电⼦计算机中的 CPU 可不像我们刚才那样,靠⾃⼰来驱动这个周期的运转,⽽是靠背后⼀个时
钟来进⾏周期驱动的。
知乎问题: 时钟频率是什么概念
最后,ALU + CU + 寄存器 + 时钟就组成了我们平时经常看到的⼀个词汇:中央处理器(Center
Process Unit)简称 CPU。
🌲⼩结
通过上述的章节,我带领⼤家从基本的电⼦开关开始,⼀步步的搭建了⼀个CPU和内存出来,虽然
中间还是对很多过程和细节做了隐藏和抽象,但主要流程已经体现了出来,希望这节学习完成之后,
同学们不在对CPU充满了神秘感。
然后我们把这⼀节中⼀些要点给⼤家做⼀个⽂字总结:
- CPU 中的 PC 寄存器,是决定 CPU 要执⾏哪条指令的关键;
- 指令是由 动作 + 操作对象组成
- CPU 眼中只有指令,没有其他的概念