聊聊开关和CPU之间故事

作者:小牛呼噜噜 | https://xiaoniuhululu.com
计算机内功、JAVA源码、职业成长、项目实战、面试相关资料等更多精彩文章在公众号「小牛呼噜噜

大家好,我是呼噜噜,在先前的一篇文章计算机中数值和字符串怎么用二进制表示?中,我们知道了计算机为什么会采用 0 和 1 组成的二进制,来表示所有的信息,比如机器指令、数字、字符串、声音、图片、视频等等。我们本篇文章来看看计算机在硬件层面究竟是怎么表示二进制的,CPU究竟是怎么实现的?通过本文的学习,我们也可以反过来明白为什么计算机会采用二进制了。

开关

我们在生活中,处处都是开关,比如控制灯的开关

我们可以发现一个很简单的现象:

  1. 串联的开关,只有2个开关都闭合,灯泡才亮。这也就是布尔代数中”逻辑运算与”
  2. 并联的开关,只要有1个开关闭合,灯泡就会亮。这也就是布尔代数中”逻辑运算或”

我们以最简单的2个数,0和1来举个例子,写出其布尔代数的真值表:

结果
0 0 0
0 1 0
1 1 1
1 0 0
结果
0 0 0
0 1 1
1 1 1
1 0 1

电报和继电器

在人类信息传递发展的历史上,长途信息传递一直是非常困难的时,当时常见的方式有,比如人骑马送信,训练信鸽、点燃烽火,但信息传递的效率都非常低效。直到电报的出现,电报思想的正式成形是在19世纪早期,它的让人类传递信息的效率得到极大的提升。

电报利用电的特性来传递信息,早期设计复杂且不稳定,传递的信息复杂度又比较低,1837年美国人摩尔斯通过电磁感应改良了发报机,并发明了摩尔斯电码。他将电报划分为2种信号,短促的”点信号”和长一点的”划信号”, 将把“点”当成“1”,把“划”当成“0”(这不就是二进制嘛),并编写了个“字典”将字母及数字编码一一对应,这样就能传递复杂的信息,在未来产生了巨大影响力,意味着现代通信的开始。

由于早期的电报传输,需要铺设电线,但是随着电线越长,其电阻就越大,电信号常常传输过程中被消耗点,这样接受方就无法接收到信息了。幸运的是,工程师发明了继电器,其原理就是接收微弱的信号,然后不断地通过新的电源重新放大已经开始衰减的原有信号,最后把它增强后发送出去

当开关是打开的话,灯泡是不亮的;但当开关是闭合的话, 电流流过围绕在铁棒上的线圈,会发生电磁效应,铁棒就具有了磁性,会将弹簧片吸下来,右边电路就通了,灯泡就会亮了。这样通过继电器,一段段放大信号,电报就能长距离传输信息了。

虽然继电器有放大信号的作用,但和开关一样继电器也可以串联或并联以执行逻辑中的简单任务,继电器比起普通的开关的优势在于继电器无需直接被输入者控制,可以被其他继电器控制,这样就可以组合完成更复杂的操作。比如我们可以通过继电器实现: 当我们闭合开关时,灯泡关闭;当我们打开开关时,灯泡去点亮这种灯泡的状态和开关的闭合状态相反的操作,普通开关是无法实现这种操作的。这些电路物理的表象下隐藏的逻辑关系,一直没有被人发现。

直到1938年,克劳德·香农在麻省理工学院所写的硕士论文《A Symbolic Analysis of Relay and Switching Circuits》中阐述了继电器和开关电路中的符号分析之间的关系,他将开关、继电器、二进制、布尔代数联系起来。也就是发现人类可以通过开关和继电器这些普通的电路,直接就能实现布尔代数各种逻辑运算操作。这些继电器的组合被称为逻辑门,他们构造基本的逻辑电路,也叫门电路

门电路


上面是3种最最基本的门:

  1. 与门,两个开关只有同时打开,电流才会通过,灯泡才会亮
  2. 非门,当开关闭合时,电流会通过,灯泡会亮;开关打开,电流不能通过反而,灯泡熄灭
  3. 或门,两个开关中只要有一个打开电流就能通过,灯就会点亮

这些门其实就是一个个”开关”的抽象, 以后我们需要的各种复杂的逻辑都可以通过这3个门来实现,真的是非常奇妙
我们再来看一个常见的门:异或门XOR

我们先写出其真值表(真值表是在逻辑中使用的一类数学表,用来确定一个表达式是否为真或有效):

A B X(输出)
0 0 0
0 1 1
1 1 0
1 0 1

其表达式也就是:

通过表达式我们就能知道,把非A与B的值 和非B与A的值 通过或门加起来就能得到异或门

材料学的发展

上世纪材料学的发展也大力推动了计算机的蓬勃发展,计算机的硬件出现了3次大的更新换代

继电器与哈佛Mark1号

在1944年,为了给美国曼哈顿计划跑模拟,IBM建造出来首台自动按序控制计算机哈弗Mark1号,有76万五千个组件,300万个连接点和500英里长的导线,重达4500公斤,占地面积有房间那么大。其大脑是由继电器组成的,其一秒能做3次加或减,乘法花费6秒,除法花费15秒

由于继电器的金属臂有“质量”,无法快速开关,1940年一个好的继电器一秒钟可以翻转50次,但是任何会动的机械都会随着时间出现物理磨损,部件会损坏,随着继电器数量增加,故障概率也会增加。真的是又慢又容易坏的大家伙,但瑕不掩瑜,其依旧具有跨时代的意义。

真空管与巨人一号

在1904年,英国物流学家弗莱明就已经开发了一种新的电子组件,叫做真空管,也就是把两个电极装在一个气密的玻璃灯泡里,但弗莱明的这个电子部件,电流只能单向流动,俗称称为 “二极管”。要想制作计算机,需要能够控制电子的流动的东西。

在 1906 年,美国发明家”李·德富雷斯特”在”弗莱明”设计的两个电极之间,加入了第三个”控制”电极(一 种栅栏式的金属网,形成电子管的第三个极),向”控制”电极施加正电荷,它会允许电子流动;但如果施加负电荷,它会阻止电子流动。被命名为真空三极管,这样就能形成一个”开关”,可以“断开或闭合电路”。

更多精彩文章在公众号「小牛呼噜噜

由于真空管内没有会动的组件,想较于机械装置,磨损更少,又没有金属臂的限制,每秒可以开闭数千次,继电器一秒钟只能翻转50次左右,效率大大的提升。

第一个大规模使用真空管的计算机是”巨人1号”,标志着计算机从机电转向电子,电子计算机的大门自此打开。由工程师Tommy Flowers设计,完工于1943年12月,用于二战时破解德国军事通讯密码。

晶体管与IBM608

虽然真空管做计算机的大脑,解决了继电器许多缺陷,但是其还是容易损坏,就像灯泡一样烧坏。到1950年代,真空管计算机都达到了极限。

1947年,贝尔实验室发明了晶体管,其成为了新的”开关”,也标志着一个全新的计算机时代到来。晶体管不仅体积小,响应速度快(每秒切换开关能达到上百万次),而且使用寿命也非常悠远,准确 性高,稳定性好,不易损坏。关键它可以做得非常小,一块集成电路即可容纳十几亿到几十亿 个晶体管。

晶体管泛指一切以半导体材料为基础的单一元件,半导体顾名思义,可导电也可不导电,是常温下导电性能介于导体与绝缘体之间的材料,一般有硅、锗、砷化镓等

IBM608第一个完全用晶体管,消费者也可以买的起计算机。该计算机有3000个晶体管,每秒执行4500次加法,80次左右的乘除法。

计算机2大特性:计算能力和记忆能力

通过本文的阅读,我们知道了开关是一个生活中很普通的东西,但香农将开关、布尔代数联系的一起后,产生了化学反应。可以用一个个开关组合起来,成为门电路,从而能够造成CPU。

随着材料学等发展,开关也从继电器到真空管,再到晶体管,相应速度,提交,使用寿命,成本都得到了明显的改善。他们制造出来的计算机也慢慢的变成了我们现在熟悉的计算机。

计算机的大脑就是CPU,我们知道CPU内最重要的2个部件是寄存器和计算单元那么如何用开关来让计算机拥有计算能力和记忆能力?大家可以思考一下,后面的文章让我们抛开硬件,通过抽象出来的逻辑门来一步步设计和实现一个CPU。


参考资料:
《深入理解计算机系统》
《编码:隐匿在计算机软硬件背后的语言》
《深入浅出计算机组成原理》
《数字电子技术基础》
《穿越计算机的迷雾》
https://cloud.tencent.com/developer/article/2135886
百度百科


本篇文章到这里就结束啦,很感谢你能看到最后,如果觉得文章对你有帮助,别忘记关注我!更多精彩的文章