我们可能都听说过这样的话:“CPU是计算机的大脑,所有运算都在这里完成”,“CPU是由数十亿个晶体管组成的”,“CPU只能识别二进制,类似于1001101100这样的数据”,“所有的编程语言最终都会被转换为二进制进行处理,因为CPU只识别二进制”……。时间久了,我们会把这些话当做约定俗成的公理来看待,很少思考这是为什么。

我有着20年编程经验,虽然日常工作中使用编程解决各类问题在我看来都是信手拈来,但有几个问题一直困扰我,CPU为什么能识别二进制?它的工作原理是什么?数十亿个晶体管起到什么作用?这些问题不明白虽然不会影响我的生活、工作,但会让我无法全面认知计算机运行的原理,总感觉缺少点什么,接下来我就带着大家一起看看CPU是如何工作的。

先来看CPU的构成,其实不只是CPU,也包括GPU、NPU……等等所有的芯片都是一样的,他们都是由很多个“开关”组成的,对,就是开关,你没看错!


来源|1688.com

就好像家里的水龙头,打开,水流出来,关上,水没了。当然芯片里不是真的有水龙头,只是个比喻。早期的计算机使用的是继电器开关,在一些工业电气设备中还能看到这种器件。
来源|1688.com

典型的外观就是一大卷铜线,旁边有几个弹簧片,弹簧片上有金属触点,当铜线圈通电时会产生磁场,吸引弹簧片产生位移,从而使金属触点连接或断开,本质上说就是一个开关,只不过它控制的是电流,而不是水流。

后来人们发现这种继电器开关故障率太高,哪怕是一只虫子爬进去,也可能造成开关短路,软件编程中的“bug”一词就来源于此。所以人们又研究出了电子管开关,这种开关摒弃了机械运动部件,故障率大大降低。


来源|zhe2.com

现在逛一些旧家电市场,可能还会看到使用老式电子管的收音机。但电子管由于体积大,功耗高,后来基本被晶体管替代了,除了一些专业领域,比如音响功放,因为电子管制成的功率放大器可以保证高品质的原声,所以音响发烧友,都会以拥有一台优质的电子管功率放大器为荣。

最后我们看看晶体管,它也是一个电流开关,相较于电子管,它可以做得非常小,功耗非常低,所以现在的芯片都是基于晶体管开关的。


来源|电子通

当然这张图片是普通的晶体管,并不是芯片中微型晶体管的样子,晶体管可以比较大,在一些家用电器的电路板上经常能看到这样的东西,外观样式很丰富。同时也可以做的非常小,在一个指甲盖大小的区域里能集成上百亿个晶体管。

我们说过晶体管就是一个开关,类似于水龙头,水龙头控制的是水流,之所以打开开关,有水流出,是因为有水压的存在。

同样晶体管开关控制的是电流,之所以打开开关,有电流通过,是因为有电压的存在。我们用这个符号来表示一个晶体管开关。

上面是控制端,相当于水龙头的开关,当控制端施加一个高电位(可以简单理解为有电),输入端和输出端之间的通道打开,电流由输入端流向输出端。如果控制端是低电位(相当于没电),通道关闭,输出端没有电流流出。为了描述方便,我们使用0代表没电,1代表有电,一个晶体管开关会形成下面二种状态:


也就是控制端有电(1),输出端就有电(1),控制端没电(0),输出端没电(0)。所以一个晶体管开关只能有二种状态,要么是1要么是0,而1和0就是二进制,这也就是CPU只能识别二进制的道理。

本节我们介绍了芯片为什么只能识别二进制,下节开始我们会介绍由多个晶体管开关组合形成的基本门电路,若干门电路组合又能形成更复杂的存储电路、运算电路,然后是半加器、全加器……直到形成整个CPU!

来源: 孙老师聊人工智能