精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

计算机系统层次结构

大纲定位

对应大纲第一章(一)计算机系统层次结构:计算机系统的基本组成;计算机硬件的基本组成;计算机软件和硬件的关系;计算机系统的工作原理("存储程序"工作方式,从源程序到可执行文件,程序和指令的执行过程)。

考情分析

本章是组成原理的总纲,题目形式几乎清一色是"下列叙述中错误的是"。它的难点不在于知识多,而在于每个概念都有一个紧挨着的近义概念:微架构 vs 物理实现、编译 vs 汇编 vs 解释、指令 vs 数据。下面每一对都用同一张表并排放,方便直接比对。

冯·诺依曼体系结构

冯·诺依曼在研究 EDVAC 机时提出"存储程序"思想,奠定了现代计算机的基本结构。

冯·诺依曼机的核心特点:

  1. 存储程序工作方式:程序和数据预先存入主存,计算机启动后自动逐条取指并执行,无须人工干预
  2. 硬件由运算器、控制器、存储器、输入设备、输出设备五大部件组成
  3. 指令和数据以相同形式(二进制)存放在存储器中,仅凭内容无法区分
  4. 指令由操作码(指明操作类型)和地址码(指出操作数地址)组成
  5. 早期冯·诺依曼机以运算器为中心:I/O 与存储器之间的数据传送都要经过运算器中转
  6. 程序的功能都通过中央处理器执行指令来实现

第 4 条藏着一个常考陷阱

地址码给的是操作数的地址,不是操作数本身。所以"指令按地址访问,数据都在指令中直接给出"是错误说法——只有立即寻址那一种情况下操作数才直接写在指令里,绝大多数指令给的是地址。

第 5 条是另一个经典陷阱:现代计算机已演进为以存储器为中心(I/O 可不经运算器直接与存储器交换数据,如 DMA),但"以运算器为中心"仍是冯·诺依曼机的原始特征。题目问"冯·诺依曼机的特点"选它是对的,问"现代计算机结构"则相反。

为什么用二进制

这一条常被跳过,但它是可以单独成题的。三个理由缺一不可:

理由说明
运算规则简单二进制加法只有 4 条规则,十进制有 100 条,硬件实现的复杂度天差地别
两个稳态的物理器件容易制造高/低电平、导通/截止、有/无磁性——只要区分两种状态即可,抗干扰能力强
便于用逻辑门电路实现算术运算0/1 与逻辑值的真/假天然对应,加减乘除都能归结为与或非,可直接用门电路搭出来

CPU 靠什么区分指令和数据

既然指令和数据在存储器里长得一模一样,CPU 凭什么不会把一条指令当成数据去加?

答案是:靠指令周期的不同阶段

取指周期里从主存取回的,CPU 一律当作指令送去译码;执行周期里从主存取回的,一律当作数据送去运算。

也就是说,区分它们的不是内容本身,而是取它们的那个时刻,CPU 正处在指令周期的哪个阶段

排除掉其他三个常见干扰项:

说法为什么不对
靠操作码译码结果译码发生在已经确定它是指令之后,是果不是因
靠寻址方式寻址方式是指令内部的字段,同样是取回指令之后才谈得上
靠所在存储单元冯·诺依曼机的指令和数据共用同一个存储器、同一套地址空间,没有物理分区

计算机硬件的基本组成

现代计算机将运算器、控制器集成为 CPU(中央处理器)。完整硬件系统包括:

部件功能
CPU数据通路(ALU + 寄存器组)负责运算;控制单元负责取指译码、生成控制信号
存储器主存(DRAM)存放当前程序和数据;外存(磁盘/SSD)长期保存
I/O 设备输入设备(键盘、鼠标)和输出设备(显示器、打印机)
I/O 接口设备控制器,负责外设与主机之间的通信
总线CPU、主存、I/O 接口之间传输信息的公共通路

计算机软件

系统软件 vs 应用软件

类别定义举例
系统软件管理系统资源、提供基础服务的软件操作系统、编译器、DBMS
应用软件用户为解决特定问题开发的程序Office、浏览器、游戏

软硬件逻辑功能等价性

同一功能既可用硬件实现,也可用软件实现,从用户视角看逻辑功能等价。例如浮点运算既可由硬件浮点单元完成,也可由软件子程序模拟,但硬件实现效率远高于软件。

如何划分软硬件的功能边界,是计算机体系结构研究的核心问题之一。

计算机系统的层次结构

自顶向下八层,每一层向上提供简洁接口,向下依赖更底层的功能:

层次这一层是什么谁在这一层工作
应用程序最终用户直接使用的软件最终用户
高级语言C / Java 等,由编译器向下翻译应用程序员
汇编语言助记符,由汇编器向下翻译汇编语言程序员
操作系统在 ISA 之上做资源管理,向上提供系统调用系统管理员
ISA(指令集体系结构)软件与硬件的接口系统程序员
微体系结构(计算机组成)ISA 的逻辑实现:数据通路、控制器、流水线硬件设计者
逻辑电路门电路、组合逻辑与时序逻辑电路设计者
物理实现晶体管、版图、制造工艺工艺工程师

下层的实现细节对上层用户透明

ISA 与微架构:定义"做什么"和"怎么做"

ISA 是软硬件之间的关键接口,定义了软件可直接使用的硬件功能:

  • 指令格式、操作类型、寻址方式
  • 可访问的寄存器等硬件资源
  • 存储器组织、异常/中断处理方式

ISA 定义"做什么",微体系结构决定"怎么做"。 相同的 ISA 可以有多种不同的微架构实现——Intel 的多代酷睿都遵循 x86 ISA,但内部组织方式完全不同。

微架构不是"物理实现层"

这是本章最容易被绕进去的一处。微架构是 ISA 的逻辑实现,不是物理实现。

回答的问题例子
ISA有哪些指令、寄存器、寻址方式?x86-64、RISC-V
微架构用什么样的数据通路和控制器去执行这些指令?几级流水线、Cache 多大、是否乱序
逻辑电路这些部件用什么门电路搭?加法器用超前进位还是行波进位
物理实现用什么晶体管、什么工艺、什么版图造出来?7nm、10nm

微架构和物理实现之间还隔着逻辑电路层。同一套微架构可以用不同工艺去生产——两层关注的完全是两件事,"微架构即物理实现层"是错误说法。

编程语言与翻译程序

三种编程语言

语言层次特点硬件能否直接执行
机器语言0/1 二进制编码,与硬件直接对应
汇编语言用助记符(mov、add)代替二进制指令不能,需汇编器翻译
高级语言C/Java 等,接近自然语言不能,需编译器/解释器翻译

硬件能直接执行的只有机器语言程序。硬件描述语言(Verilog/VHDL)是用来描述电路的,更不是给 CPU 执行的——它经综合后变成电路,不是变成指令。

三种翻译程序

翻译程序输入输出特点
汇编程序(汇编器)汇编语言机器语言一对一翻译
编译程序(编译器)高级语言汇编/机器目标代码一次性翻译全部,生成目标程序
解释程序(解释器)高级语言逐条翻译并立即执行,不生成目标程序

三者的上位概念是翻译程序。问"将高级语言源程序转换为机器目标代码文件的程序",答案是编译程序——注意题眼是"生成文件",解释器不生成文件,汇编器的输入不是高级语言,链接器的输入不是源程序。

存储程序工作方式

程序执行前,把指令和数据预先加载到主存。启动后 CPU 自动循环:

取指(PC 提供地址)译码取操作数执行写回结果

PC(程序计数器)的更新规则:

  • 顺序指令:PCPC+指令长度
  • 跳转指令:PC目标地址

从源程序到可执行文件

以 C 语言为例,四个阶段:

hello.c → [预处理 cpp] → hello.i → [编译 cc1] → hello.s → [汇编 as] → hello.o → [链接 ld] → hello
阶段工具输入 → 输出功能
预处理cpp.c → .i处理 #include、#define 等预处理指令
编译cc1.i → .s翻译为汇编语言
汇编as.s → .o翻译为机器语言,生成可重定位目标文件
链接ld.o → 可执行文件解析外部符号引用、合并库函数,生成可执行目标文件

顺序为什么只能是这个

每一步的输出正好是下一步的输入,链条是被文件类型锁死的:编译器只吃 .i.s,汇编器只吃 .s.o,链接器只吃 .o

所以"预处理 → 汇编 → 编译 → 链接"之类的排列一眼就能否掉——汇编器拿不到 .s 文件,根本没法开工。

关于这条工具链在真题里的具体考法(哪个阶段解析符号、哪个阶段确定地址),见 汇编语言基础

交互可视化

加载可视化中...

考点清单

  • 冯·诺依曼机:存储程序、五大部件、指令和数据同形式存放、指令 = 操作码 + 地址码、以运算器为中心
  • 地址码给的是操作数地址,不是操作数本身
  • 用二进制的三个理由:运算规则简单、两稳态器件易制造、便于用逻辑门实现运算
  • CPU 靠指令周期的不同阶段区分指令和数据——取指周期取的是指令,执行周期取的是数据
  • 硬件能直接执行的只有机器语言
  • 编译器一次翻译全部并生成目标程序;解释器逐条翻译不生成目标程序
  • ISA 是软硬件接口;微架构是 ISA 的逻辑实现,物理实现是晶体管/工艺层,两者中间还隔着逻辑电路
  • 源程序到可执行文件:预处理 → 编译 → 汇编 → 链接,顺序被文件类型锁死
  • 下层实现对上层用户"透明"

真题练习