CS152 · 第 1 课

Early Machines:计算机体系结构是什么

在学习任何具体的处理器设计之前,先要回答一个更根本的问题:计算机体系结构(computer architecture)到底在做什么?这一课通过 IBM 360 的真实故事,引出整门课的核心矛盾——指令集架构(ISA)与微架构(microarchitecture)的分离。

授课:Sophia Shao 预计用时:45 分钟 难度:入门

计算机体系结构的定义

课程给出的定义:计算机体系结构是设计抽象层(abstraction layers),使我们能够用现有的制造技术高效地实现信息处理应用。应用(application)和物理(physics)之间的鸿沟太大,无法一步跨越,于是产生了一系列中间抽象层:

抽象层对应的 UCB EECS 课程
Application—
AlgorithmCS170
Programming LanguageCS164
Operating System / Virtual MachinesCS162
Instruction Set Architecture (ISA)CS152/252A(本课程)
Microarchitecture
Gates / Register-Transfer Level (RTL)EECS151/251
CircuitsEE143
Devices / Physics—

CS152 恰好覆盖了 ISA 和 微架构 这两层——这正是本课程反复强调的一对概念,也是理解全课的钥匙:

ISA(指令集架构):软件可见的语义——指令做什么、有哪些寄存器/内存/PC 等"架构状态"(architectural state)。

微架构(microarchitecture):ISA 的物理实现——数据如何存储和移动(datapath,数据通路)、控制信号如何生成并对数据通路排序(control,控制)。

同一个 ISA,可以有许多种不同的微架构实现——这正是本课程要讲的全部内容:Hardwired(硬连线)、Microcoded(微编码)、Pipelined(流水线)等风格。


技术与应用的螺旋

体系结构并非一成不变,而是被两股力量持续推动:

但这个循环受到第三个力量的强烈牵制:兼容性(compatibility)——软件开发的成本使兼容性成为市场中的主导力量。这条线索会在本课直接引出 IBM 360 的设计动机。

历史上主要的技术世代(technology generation)依次是:机电(electromechanical)→ 继电器(relay)→ 真空管(vacuum tube)→ 晶体管(bipolar/pMOS/nMOS)→ CMOS。每一代都带来数量级的性能/能耗提升,但也让"用什么技术实现控制逻辑最便宜"这个问题的答案不断变化——这正是第 2、3 课要讨论的硬连线 vs. 微编码之争的技术背景。


从计算装置到通用计算机:几个关键节点

课程用历史叙事帮助理解设计动机:"未来的技术可能和过去一样受限,忽视历史的人注定要重蹈覆辙"。这里只挑选对理解 ISA/微架构分离最关键的几个节点,而非逐台机器罗列。

Babbage 的分析机(1837):Store 与 Mill 的分离

Charles Babbage 设计的 Analytical Engine 被认为是第一台通用数字计算机的设计(虽然只造出了很小一部分)。它已经包含了现代计算机的主要部件:

指令以打孔卡片形式提供,采用三地址格式(两个源操作数、一个目的操作数,均在 Store 中)。Ada Lovelace 为其撰写了计算伯努利数的程序——被公认为世界上第一个程序。

ENIAC(1946)与 EDVAC:从硬连线到存储程序

ENIAC 是第一台电子通用计算机,纯电子的取指令和执行,因此速度很快,但编程方式是插板和开关——修改一次程序可能要花费数天。ENIAC 团队随后讨论"存储程序"(stored-program)的想法:把程序像数据一样存放在存储器中,而不是通过硬件接线来表达。

关键教训:1948 年对 ENIAC 的改造使其可以以存储程序模式运行,但速度比硬连线模式慢 6 倍。由于当时 ENIAC 本来就受限于 I/O 速度,这个降速在实践中并不重要,而编程效率的提升让这个改动物有所值。

这正是"硬连线 vs. 可编程(微编码)控制"这对权衡第一次以具体数字的形式出现——性能 vs. 灵活性/开发效率——第 2、3 课会把这个权衡系统化。

曼彻斯特 SSEM "Baby"(1948)第一次运行了存储程序,剑桥 EDSAC(1949)则是第一台实用的存储程序计算机;EDSAC-II(1958)是第一台采用微程序控制单元(microprogrammed control unit)的机器——微编码思想由此进入实践。


IBM 的困境:不兼容的产品线

到 1960 年代初,IBM 拥有多条互不兼容的计算机产品线:

早期型号后续型号
701→ 7094
650→ 7074
702→ 7080
1401→ 7010

每一条产品线都有自己独立的指令集、I/O 系统与外存(磁带、磁鼓、磁盘)、汇编器/编译器/程序库,以及各自的市场定位(商用/科学计算/实时系统)。这意味着:客户每换一个型号(哪怕只是升级同一"档次"内的机器),软件几乎要重写一遍。


IBM 360:第一个真正的可移植 ISA

Amdahl、Blaauw 和 Brooks 在 1964 年提出的设计前提中,第一条就是:设计必须能够适应增长和后续机型。IBM 360 因此被设计为一个通用寄存器(General-Purpose Register, GPR)机器:

关键在于:这一套 ISA 在从低端到高端、datapath 宽度相差 8 倍的多种硬件实现上完全一致:

Model 30(低端)Model 70(高端)
存储容量8K–64 KB256K–512 KB
数据通路(datapath)8 位64 位
电路延迟30 ns/级5 ns/级
局部存储(Local Store)主存(Main Store)晶体管寄存器
控制存储(Control Store)只读,1 微秒专用电路(硬连线)

这就是本课程的核心里程碑:IBM 360 的指令集架构完全隐藏了各型号之间的底层技术差异——8 位数据通路的 Model 30 用只读控制存储实现控制逻辑(更接近第 2、3 课要讲的"微编码"风格,因为逻辑门比 ROM 贵),64 位的 Model 70 则用专用电路直接实现控制逻辑("硬连线"风格,因为在高端机器上性能优先,逻辑电路的相对成本可以负担)。同一份汇编代码、同一个编译器后端,可以不加修改地跑在两台性能相差悬殊的机器上。

这正是与用户直接相关的经济学:厂商不必为每一档性能重新开发软件生态;用户购买入门机型后,未来可以无痛升级到高性能机型而不必重写程序——这为软件开发节省了大量的时间和金钱,也是 IBM 360 能够统一多条产品线、后来 Intel x86 沿用同样策略统治市场的根本原因。


常见误区


知识检查

问题 1:下列哪个说法准确描述了 ISA 与微架构的关系?

问题 2:IBM 360 Model 30 和 Model 70 的数据通路宽度分别是 8 位和 64 位,为什么它们仍能运行同一份编译后的程序?

问题 3:1948 年,ENIAC 被改造为可以以"存储程序"模式运行,与原来的硬连线(插板)模式相比,性能发生了什么变化?


本课要点

体系结构的定义

设计抽象层,用现有制造技术高效实现应用

ISA vs. 微架构

软件可见语义 vs. 数据通路+控制的硬件实现

兼容性的力量

软件重写成本使兼容性成为市场主导力量

IBM 360 里程碑

同一 ISA 首次跨越 8 位到 64 位数据通路,完全隐藏实现差异


参考资料与延伸阅读