作者:跑酱er
链接:https://www.zhihu.com/question/666025968/answer/2009932099776451175
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
很多教材和大学课程在教授计算机原理时,采用的是自顶向下的灌输法。第一堂课就给你甩出一张冯诺依曼架构图,告诉你计算机由控制器、运算器、存储器、输入设备和输出设备组成。接着就开始罗列寄存器、总线、指令集这些名词。这种教学方式注定会让大多数人感到迷茫。死记硬背这些功能模块的定义,永远无法真正理解计算机。
说白了,现代计算机科学建立在极其厚重的抽象层之上。教材直接带你进入了位于十几层楼高的建筑内部,给你看房间的格局,却从不告诉你这栋楼是由什么材质的砖头砌成的,这些砖头又是如何通过物理规律咬合在一起的。要打破这种满脸懵的状态,唯一的路径是把现有的认知全部清空,直接降维到物理世界的最底层,从一粒沙子开始,自底向上地把计算机重新构建一遍。
我们先抛开所有高深的名词,回到最基础的物理现实。计算机世界里唯一真实存在的东西,只有电压的高低和电子的流动。人类利用自然界的硅元素,通过掺杂其他微量元素,制造出了一种特殊的半导体材料。这种材料有一个奇妙的物理特性,通过施加微小的电压,可以改变它的导电性。工程师们基于这种材料制造出了晶体管。晶体管有三个引脚,其中一个引脚负责控制另外两个引脚之间是否连通。给控制引脚加高电压,电路导通;给它低电压,电路断开。我们就这样实现了一种完全由电信号控制的电子开关。
有了这种电控开关,我们就跨出了人类科技史上最关键的一步,从物理学迈入了数学。我们约定高电压代表数字1,低电压代表数字0。接着我们把几个晶体管组合起来。把两个晶体管串联在电路上,只有当两个晶体管的控制引脚同时输入高电压时,电流才能通过,输出端才会得到高电压。这在逻辑代数中叫做与门。如果把两个晶体管并联,只要其中任何一个输入高电压,电流就能通过,这叫做或门。再稍微改变一下接法,输入高电压输出低电压,输入低电压输出高电压,这就构成了非门。
到了这一步,我们手里就有了与门、或门、非门这三种基本逻辑元件。请务必记住,它们不是什么虚无缥缈的概念,而是实打实的物理电路,是刻在硅片上的微观结构。
接下来的发展就是纯粹的搭积木过程。我们利用这三种基本逻辑门,可以组合出异或门。异或门的特性是输入相同时输出0,输入不同时输出1。如果你懂一点二进制加法,就会发现异或门的逻辑正好对应二进制相加的本位和。把异或门和与门组合在一起,就能实现两个一位二进制数的加法,并输出进位信号,这被称为半加器。再把两个半加器和一个或门连接起来,就能处理来自低位的进位,这叫做全加器。
当我们把六十四个全加器级联在一起,一个能处理六十四位二进制数加法运算的庞大电路就诞生了。这正是教材里提到的算术逻辑单元的核心部分。减法可以通过加上一个负数的补码来实现。乘法可以通过多次移位和加法来实现。所有的算术运算,最终都被还原成了电压在成千上万个逻辑门之间穿梭的物理过程。这里面没有任何魔法,只有极其严密的电路拓扑结构。当高低变化的电压信号输入到这个电路的一端,经过短暂的物理延迟,另一端就会稳定输出代表运算结果的电压信号。
但是只有计算能力是不够的,算出来的结果如果不能保存,瞬间就会随风飘散。我们需要让电路拥有记忆。工程师们设计了一种反馈电路,把或门的输出端重新连接到它自己的输入端。这样一来,只要电路被触发过一次产生高电压,这个高电压就会一直维持下去,哪怕撤销了初始的输入信号。这种能维持状态的电路被称为触发器。
把八个触发器排成一排,就能记住八位二进制数,也就是一个字节。这正是教材中反复出现的寄存器的物理本质。寄存器根本不是什么抽象的存储空间,它就是一堆能锁存电信号的微型电路阵列。为了在面积有限的硅片上塞进更多的记忆单元,人们又发明了利用极其微小的电容器来存储电荷的技术。电容里有电荷代表1,没电荷代表0。这就是我们电脑里插的内存条的底层原理。因为电容会漏电,所以需要控制电路以极高的频率不断去刷新电荷状态,这就是动态随机存取存储器名称的由来。
有了运算电路和记忆电路,我们还需要一个极其关键的部件来协调它们的工作,这就是时钟。在一块复杂的芯片里,电信号在不同长短的线路中传输需要时间。如果没有统一的指挥,各个模块的运行就会陷入混乱。芯片外部会连接一个石英晶体振荡器,它以极其稳定的频率产生高低交替的电脉冲。每一次脉冲到来,就像交响乐团指挥挥下的指挥棒。所有的寄存器在这个瞬间同时更新状态,逻辑门电路开始处理新的数据。我们平时买电脑看的CPU主频,比如4GHz,意思就是这个时钟每秒钟会发出四十亿次脉冲。在这个极其恐怖的速度下,微观世界里的电子进行着高度有序的集体迁徙。
现在我们有了硬件基础,但计算机如何知道我们想让它执行加法还是减法?这就涉及到了指令集。工程师们在硬件电路上硬连线了多种不同的功能模块。然后设计了一个译码器电路。我们约定一串特定的二进制数字,比如1011代表加法。当这串数字被送到译码器时,译码器的物理结构会将其解析成多路控制信号,精确地接通加法器电路的电源,同时关闭其他运算模块的数据通路。这些用来控制硬件电路状态的二进制数字串,就是所谓的机器指令。
软件和硬件的边界就在这里被彻底打破。软件代码在最底层绝对不是什么虚拟的文本,而是一段极其具体的物理配置参数。你写下的每一行代码,最终都会被编译器转换成这些极其枯燥的二进制指令。当程序运行时,内存会把这些指令一条接一条地送进CPU。CPU内部的控制单元根据指令的要求,精准地拨动成千上万个电子开关,把数据从某个存储单元提取出来,送进运算单元处理,再把结果存放到另一个地方。这就是取指、译码、执行的无限循环,也是计算机工作的全部真相。
深入理解这种底层的物理和逻辑映射关系,绝不是为了应对考试,而是解决复杂工程问题的前提。这里必须引入一个极具深度的现代技术案例来印证这个观点。
回顾几年轰动全球的熔断与幽灵漏洞事件。当时的黑客成功窃取了无数计算机系统内部的极高权限数据。这个漏洞的可怕之处在于,它根本不是软件代码写错了,而是硬件底层架构的物理特性被恶意利用了。现代CPU为了追求极致的速度,普遍采用了一种叫做推测执行的技术。当CPU遇到一个条件分支指令,比如判断密码是否正确时,它觉得等待内存返回结果太慢了。于是它会根据历史经验猜测一个结果,顺着这条路提前把后面的指令执行了。如果后来发现猜错了,CPU会把推测执行的计算结果丢弃,恢复到分支前的状态。
从高级语言和软件抽象的视角来看,这个过程完美无瑕,猜错了就撤销,没有任何数据泄露。其实吧,微观世界的物理现实是残酷的。CPU内部为了加速数据读取,存在着静态存储器构成的缓存。推测执行虽然撤销了运算结果,但被它提前读取到缓存中的数据,却真真切切地改变了缓存内部的物理电荷状态。黑客正是通过极高精度的时钟,测量特定数据读取的微小时间差,反向推导出了缓存内部残留的物理状态,从而拼凑出了极其机密的密码信息。
如果研发人员脑子里只有教材上那套高层的抽象概念,面对这种漏洞只会束手无策。只有那些真正清楚电子是如何在缓存门电路中流动、清楚时钟周期是如何被精细切分的人,才能理解这种利用物理层微观副作用发起的攻击,并从硬件微代码层面给出修复方案。这就是为什么顶级的系统架构师必须具备穿透抽象层、直视硬件物理本质的能力。
我们再来看一个更前沿的案例,2026年当下正在极速演进的AI大模型算力底层。为什么传统的CPU在处理大语言模型时显得如此无力,而非要依赖英伟达的GPU或者专门的张量处理单元。依然要回到最底层的逻辑门电路来寻找答案。
CPU是为了处理极其复杂的通用逻辑而设计的。它的内部塞满了庞大的控制单元、极其复杂的分支预测电路和深层的缓存结构。这些东西占据了芯片硅片的绝大部分面积,真正用来做基础算术运算的全加器和乘法器反而比例很小。因为日常的操作系统和各种软件逻辑充满了无数的条件跳转和随机任务。
但在深度学习的神经网络运算中,核心计算几乎全是海量的矩阵乘加运算。就是不断地把两个数相乘,再加上第三个数。这种计算的逻辑极其简单,极其机械,但是数据量大得惊人。如果在CPU上跑,大部分的时间和电力都消耗在了解码指令、判断分支、搬运数据这些控制逻辑上,真正在做乘加运算的物理时间极短。
专门针对AI设计的芯片架构彻底颠覆了这种资源分配。工程师们在芯片上砍掉了大部分用于处理复杂控制逻辑的电路,腾出宝贵的硅片面积,密密麻麻地铺设了成千上万个专门执行乘加运算的算术逻辑阵列。在每个时钟周期里,这些专用的运算单元可以同时吞吐几万条数据。这种架构层面的巨大差异,根本原因是解决特定数学问题时,底层硬件晶体管物理拓扑结构的最优解不同。理解了这一点,你就能看懂科技巨头们在芯片架构上的战略布局,而不是人云亦云地追逐各种新造的算力名词。
计算机科学的伟大之处就在于这种极其严密的层层堆叠。最底层是量子力学和固体物理学,决定了半导体的特性。往上是电子工程,用晶体管搭建出逻辑门。再往上是数字电路设计,组合出运算器和存储器。接着是计算机体系结构,设计出指令集和执行流水线。然后是系统软件,用汇编和C语言写出操作系统内核,管理硬件资源。最上面才是各种高级编程语言、数据库、前端框架和人工智能算法。
我们平时学习的困难,就在于我们往往被直接空投到了上面几层。我们调用着封装好的函数,面对着花里胡哨的图形界面,理所当然地认为计算机本该如此。一旦程序报错,或者系统性能出现诡异的瓶颈,因为缺乏底层的认知支撑,排查问题就变成了盲人摸象。
想要真正夯实这方面的基础,不要去啃那些晦涩的考研教材。强烈推荐去学习一门神级课程名为从Nand到Tetris。这门课会带你从最基本的与非门开始,用硬件描述语言一步步搭出所有的逻辑电路,构建出一个完整的CPU架构。接着让你在这个自己创造的硬件上,写出汇编器、编译器,最终在上面运行一个俄罗斯方块游戏。只要你跟着走完这个极其硬核的构建过程,所有关于计算机底层的迷雾都会彻底消散。另外,查尔斯佩措尔德编写的代码隐匿在计算机软硬件背后的语言这本书,也是极其难得的入门经典。它没有任何复杂的数学公式,纯粹用极其通俗的逻辑推演,把继电器时代到现代微处理器的演进过程讲述得极其透彻。
免费下载地址:编码+Nand2Tetris,计组必刷神级书(附PDF)
学习技术最忌讳的就是停留在名词解释的层面。计算机世界里没有玄学,每一行代码的执行,最终都会毫无偏差地转化为微观世界里数以十亿计的电子在硅晶格之间的定向移动。当你能在脑海中清晰地构建出从键盘敲击到晶体管状态翻转的完整链路时,你就真正掌握了这门学科的精髓。到那时,再看那些教材上的框架图,就不再是死板的概念,而是一座极其精密、充满物理工业美感的宏伟建筑。