计算机结构这个东西,真不能光死记硬背那张块状图。我当年在机房里带人,也好多次在考试前把自己绕晕。
起初说结构,别把它当成一个博物馆,那东西是个动态的组装车间。它不是按固定顺序排列的,而是像乐高积木,功能拍板位置,位置适应功能。有些部件是串起来的,比如 CPU 和内存就是 slaves,哪位掉链子哪位就尴尬;有些是并联的,比如多个硬盘组成了一个 RAID,坏了一个还剩几个撑着。
这就好比请客进食,主桌是 CPU,备桌是内存,隔壁桌是硬盘,主桌挂了,其他桌还得空着等。理解这个“动态连接”比记住哪块在哪更关键。 硬件的底层逻辑,实际上就在那一堆晶体管上面。别被“冯·诺依曼架构”这种名字绊住了,那是个传说,真正的计算机就是由一个个硅片堆起来的。芯片内部,主控单元像个总指挥,负责调度;寄存器是那个随时预备动作的员工站,快进快出,不拖泥带水;主存是仓库,数据放哪说哪;I/O 接口就是收发员,负责跟键盘鼠标这些外部世界握手。别当作数据只在线程里跑,那些在寄存器里跳来跳去的指令,才是计算机动作的源头,指令一旦生成,就往主存里一塞,接着就执行。
这种“指令即数据”的特性,是理解计算机如何工作的钥匙。 再看那些并行的组件,千万别当成流水线干巴巴的。现代的多核 CPU,就像是个庞大的分叉路口。几个核心与此同时干活,但不是与此同时出结局,而是轮流取指令、轮流读数据、轮流写结局。
这就好比你请几个工人,有人负责搬砖,有人负责扫地,有人负责洗碗。他们可能与此同时都在干活,但你没法指望所有人与此同时把盘子端到桌子上。
这种“软中断”和“工夫片轮转”的概念,是计算机真正体现并行本事的地方。别只盯着核心数看,别当作核心多就一定能跑得快,关键是能不能让指令在这个复杂的网络里高效流转。 内存这块,特别是物理内存,是个让人头疼的玄学。
为啥有时候感觉电脑卡得那么紧?有时候不是程序逻辑错了,而是内存没找到位置。缓存(Cache)就是为了让这个“仓库”更近更熟,CPU 既然知道数据在哪,为啥不直接把它拿过来用呢?这就好比你去超市找东西,要是货架就在你手边,你肯定选直接拿;要是得绕远路,那你肯定绕路走。CPU 有三级缓存,像是一个个小的中转站,RGD 是第一级,直接给核心服务;L1/L2 中间转接口,L3 全系统共享。
这种层级结构是为了在速度和容量之间找平衡,不是好办的堆砌。 还有那个著名的“冯·诺依曼瓶颈”。内核容量忒小,指令和数据的带宽有限,如何跑得开?解决办法就是增大带宽,比如把高速缓存做得大一点,要么让核频繁访问内存。别总认定是代码写得烂,大量时候是硬件架构和指令集的匹配度不够。有些指令忒慢,就连不如直接调系统文件快。
这就像有人问你路线,你告诉他走迷宫,他还能够直接开门走。 最终,别死磕那个“冯·诺依曼”名字。早在 1945 年,有人把它原型机造出来,但那时候的电脑才几千元,那时候的计算机结构早就变了。目前的计算机,指令流和程序流是融合在一起的,程序本身在变,CPU 结构也在跟着变。RISC 和 CISC 就是两种不同的设计哲学,有的核心喜爱好办粗暴,有的喜爱复杂优雅。学习结构,就是要学会看这些不同的设计目标,为啥他们要如此设计,是为了啥。 故此,学计算机结构,第一步是忘掉那些过时的理论,第二步是去摸那几块芯片,第三步是理解它们之间是如何互相呼应的。别追求完美的线性逻辑,要接纳并行的混沌。
只要你能看懂指令如何流动,如何在物理世界中瞬间搞定移动,那就离掌握这个结构不远了。