第1章 抽象层次与整机视角¶
一台计算机同时是电子系统、数字电路、指令执行器和软件平台。若一次把所有细节摊开,任何问题都会变成不可管理的网;抽象层次的作用,是让每一层只承诺稳定接口,把实现选择藏在接口之后。
本章动机¶
理解层次不是为了记一张“从高级语言到晶体管”的图,而是为了定位问题。例如同一个加法结果错误,可能来自源程序溢出、编译器指令选择、ISA 语义理解或硬件实现缺陷;同一个程序变慢,也可能是分支预测、cache、缺页或 I/O 在作怪。先确定哪一层的契约被破坏,诊断才有方向。
内容¶
- 抽象层次与接口契约:区分 ISA、微体系结构、逻辑电路和器件,并用一个最小表达式追踪各层职责。
- 计算机体系结构的历史演进:从存储程序、集成电路、RISC 到多核,理解设计为何随瓶颈迁移。
三个贯穿问题¶
- 软件能观察到什么状态? 寄存器、内存、异常和指令结果构成架构状态。
- 实现可以自由改变什么? 流水级数、cache 容量、是否乱序等通常不改变 ISA 语义。
- 性能由谁限制? 可能是计算延迟、吞吐量、带宽、容量、能耗或并行度。
学习抓手
每遇到一个新机制,先写出输入、输出、保存的状态和不变量,再看内部细节。这个方法既适用于一个触发器,也适用于整台多核机器。
本章自测¶
- 为什么 ISA 被称为软硬件接口,而 cache 大小通常不属于 ISA?
- “抽象隐藏细节”是否意味着上层永远不需要知道下层?请用性能优化举反例。
- 同一段程序换到同 ISA 的新 CPU 上无需重新编译,但性能可以变化数倍,原因是什么?