跳转至

第1章 抽象层次与整机视角

一台计算机同时是电子系统、数字电路、指令执行器和软件平台。若一次把所有细节摊开,任何问题都会变成不可管理的网;抽象层次的作用,是让每一层只承诺稳定接口,把实现选择藏在接口之后。

本章动机

理解层次不是为了记一张“从高级语言到晶体管”的图,而是为了定位问题。例如同一个加法结果错误,可能来自源程序溢出、编译器指令选择、ISA 语义理解或硬件实现缺陷;同一个程序变慢,也可能是分支预测、cache、缺页或 I/O 在作怪。先确定哪一层的契约被破坏,诊断才有方向。

内容

三个贯穿问题

  1. 软件能观察到什么状态? 寄存器、内存、异常和指令结果构成架构状态。
  2. 实现可以自由改变什么? 流水级数、cache 容量、是否乱序等通常不改变 ISA 语义。
  3. 性能由谁限制? 可能是计算延迟、吞吐量、带宽、容量、能耗或并行度。

学习抓手

每遇到一个新机制,先写出输入、输出、保存的状态和不变量,再看内部细节。这个方法既适用于一个触发器,也适用于整台多核机器。

本章自测

  1. 为什么 ISA 被称为软硬件接口,而 cache 大小通常不属于 ISA?
  2. “抽象隐藏细节”是否意味着上层永远不需要知道下层?请用性能优化举反例。
  3. 同一段程序换到同 ISA 的新 CPU 上无需重新编译,但性能可以变化数倍,原因是什么?