计算机系统的层次结构

这一节是全书最重要的”世界观”一节。 它说明一件事:计算机不是一台机器,是一摞机器——每一层用下一层提供的东西,造出一个更好用的东西给上一层。

而”计算机体系结构 vs 计算机组成”这条分界线,就是从这个层次观里切出来的,它是第 1 章唯一年年必考的概念题。

机制

五级层次:M0 到 M4

从下往上读,每一层都问同样三个问题:用什么语言、给谁看、由谁实现。

层名称使用的语言由谁把它变成下一层
M4高级语言机器高级语言(C、Java)编译程序
M3汇编语言机器汇编语言汇编程序
M2操作系统机器作业控制语言 / 系统调用操作系统
M1传统机器机器语言(ISA)硬件直接执行
M0微程序机器微指令硬件直接执行

四条边界,逐条都是考点:

① M0 和 M1 是实际机器,M2~M4 是虚拟机器。

定义哪几层
实际机器由硬件或固件实现,能直接执行该层语言M0、M1
虚拟机器由软件实现,该层语言必须先被翻译M2、M3、M4

“虚拟机器”和 VMware、KVM 那种虚拟机没有关系——它只是说”这一层看起来像一台机器,其实是软件造出来的假象”。

② M1 与 M0 的分界正是 ISA 的位置。 M1 是机器语言程序员看到的机器,它的规格书就是 ISA。M0 在 ISA 之下,属于实现细节。

③ M0 只在微程序控制器里存在。 用硬布线控制器的 CPU 根本没有可辨认的微程序层。所以”任何计算机都有 M0 层”是错的——教材画五层是以微程序机为模型。这一点在 5.4.3 兑现。

④ M2 层的”语言”不是编程语言。 它指的是操作系统提供的接口:作业控制、系统调用。这一层就是 CO 与 OS 的正式交界。

计算机体系结构 vs 计算机组成

这是本章的招牌考点,判据只有一句话:

机器语言程序员看得见的是体系结构;看不见的是组成
计算机体系结构(Architecture)计算机组成(Organization)
回答有没有 / 是什么怎么实现
对谁可见机器语言程序员可见对程序员透明
典型内容指令系统、数据类型、寻址方式、可见寄存器、I/O 机制、中断机构、机器字长数据通路宽度、控制信号、是否采用流水线、Cache 组织、乘法用什么电路、控制器用硬布线还是微程序

用一个例子把它彻底分开:

问题属于
”有没有乘法指令”体系结构
”乘法指令用什么电路实现”(阵列乘法器还是移位加)组成
”有多少个通用寄存器”体系结构
”Cache 是几路组相联”组成
”指令字长是多少位”体系结构
”流水线分几段”组成

同一个 ISA 可以有很多种组成——这就是为什么 Intel 和 AMD 的 CPU 能跑同一份 .exe,但性能和功耗完全不同。

边界辨析:「透明」在计算机里是反直觉的

这个词在 408 里的意思和日常相反,几乎年年设陷阱。

“对某某透明” = 某某看不见它、不需要知道它。 不是”清晰可见”。

对象对谁透明意思
Cache对应用程序员透明程序员写代码时不用管 Cache 存不存在
浮点运算器对应用程序员不透明要用它就得写浮点指令
指令寄存器 IR对汇编程序员透明汇编里写不出”访问 IR”
程序计数器 PC对汇编程序员不透明转移指令就是在改它
虚拟存储器对应用程序员透明,对系统程序员不透明注意分对象

做题模板:先问”谁在看”,再问”他写代码时需不需要知道这个东西”。 需要知道 = 不透明。

注意最后一行:同一个对象对不同层次的程序员透明性不同。题目不说”对谁”,这题就是残缺的——正规题目一定会写明。

三个接口:API / ABI / ISA

教材主线只要求 ISA,但这三个词一起看才不会混。

接口约定什么谁和谁之间换了它会怎样
API函数名、参数、返回值源代码与库源码要改
ABI调用约定、寄存器谁保存、栈对齐、数据布局、系统调用号二进制与库/OS.o 不能混用,但机器码合法
ISA指令编码、可见寄存器、寻址方式、异常行为软件与硬件机器码根本执行不了

一个能记住的例子:同一颗 x86-64 CPU 上,Windows 和 Linux 的 ISA 完全相同,ABI 不同——所以 .exe 在 Linux 上跑不起来,不是因为指令不认识,而是因为调用约定和系统调用号对不上。

这三层的详细展开在 4.1.1。

这一节是全书的目录

把五层结构和后面六章对上,整本书的位置就清楚了:

层对应的章
M4 高级语言4.3 C 语句 → 汇编
M3 汇编语言4.1、4.2 指令系统与寻址
M2 操作系统5.5 中断与特权级 → OS
M1 传统机器(ISA)5.2 指令怎么执行
M0 微程序5.4.3 微程序控制器
M0 之下:数字逻辑2.2.1 运算电路

而第 3、6、7 章不在这条竖线上——它们是横向的支撑:存储器(第 3 章)、互连(第 6 章)、外设(第 7 章)为每一层提供数据的存放和搬运。

边界

说法判断理由
”所有计算机都有微程序机器级 M0”❌硬布线控制器没有
”虚拟机器就是 VMware 那种虚拟机”❌指由软件实现的层
”M2、M3、M4 都是实际机器”❌都是虚拟机器
”Cache 的容量属于体系结构”❌属于组成,对程序员透明
”指令系统属于计算机组成”❌属于体系结构
”透明就是清楚可见”❌恰恰相反:看不见
”机器字长属于组成”❌体系结构(程序员可见)
“数据通路宽度属于体系结构”❌组成
”同一 ISA 的两台机器,程序性能相同”❌组成不同,性能可以差很多
”同一 ISA 的二进制程序一定能互相运行”❌还要 ABI 相同

对照速查

层语言实际/虚拟实现者
M4高级语言虚拟编译程序
M3汇编语言虚拟汇编程序
M2系统调用虚拟操作系统
M1机器语言实际硬件
M0微指令实际硬件/固件
判据内容
体系结构 vs 组成机器语言程序员看不看得见
透明看不见、不用管
实际 vs 虚拟机器硬件/固件实现 vs 软件实现

考点

  • 体系结构与组成的划分——第 1 章最高频,几乎必考。
  • “透明”的含义,以及”对谁透明”。
  • M0~M4 各层的语言与实现者,M2~M4 是虚拟机器。
  • 硬布线控制器没有 M0 层。

链接