组成原理全书
总控图 数据通路 演示 书目 笔记 发展史 产业 题库
Computer Organization · 408 Field Guide

计算机组成原理
全书精读

按考研 408 组成原理大纲编排:数据表示与运算、存储与 Cache、指令系统、CPU 与流水线、总线与 I/O。可以少讲,不写错;数值例题已手算。

10 章 · 四大模块 机制图 · 五部件 / 映射 / 五段 12 题 章末自测
01

概述与冯·诺依曼

LEVEL 1

组成原理看的是「一台机器怎么把比特变成一次次指令执行」。先钉死存储程序、五部件和性能公式,后面各章都站在这张图上。

1.1层次与五部件

冯·诺依曼机的核心是存储程序:指令和数据以同样的二进制形式放在主存里,CPU 按 PC 指定地址取指;非转移时通常顺序递增,分支/跳转/异常可改变控制流。五个部件是:运算器、控制器、存储器、输入设备、输出设备。教材里的 CPU 通常指运算器加控制器(再加通用寄存器等)。

PITFALL · 哈佛结构不是「少一个箱子」哈佛结构的要点是指令存储器与数据存储器分开编址、可并行访问。不要把它说成「冯·诺依曼少画了一个框」。现代 CPU 内部常用分离的指令/数据 Cache,对外仍常呈现统一的主存地址空间。

1.2性能公式

CPU TIMECPU 时间 = IC × CPI × 时钟周期

IC 是执行的指令条数,CPI 是平均每条指令的时钟数,时钟周期是时钟频率的倒数。吞吐看单位时间完成的指令或任务;延迟看一条指令或一次请求从发到完。二者不是同一个数。

1.3三层时间单位

唐朔飞体系里:时钟周期是节拍;若干时钟组成一个机器周期(如取指周期);若干机器周期组成一个指令周期。Patterson 教学用的单周期数据通路则让「一条指令 = 一个时钟」。两套词汇不要捏成一句。

CROSSREF单周期与流水线对照见 08、09;部件符号见 数据通路图集。
02

数据的表示

LEVEL 2

同一串比特在不同编码下表示不同的数。先分清原码、反码、补码、移码,再谈校验。

2.1原码 · 反码 · 补码 · 移码

编码n 位范围(整数)零要点
原码−(2n−1−1) ~ 2n−1−1两个(+0 / −0)符号位 + 真值的绝对值
反码同原码两个正数同原码;负数数值位按位取反
补码−2n−1 ~ 2n−1−1一个负数 = 反码 + 1;加减可用同一套加法器
移码与补码真值范围相同常对应中间码教材常见 [x]移 = 2n−1 + x

8 位补码:−128 ~ 127。符号扩展:补码向高位复制符号位;无符号数则高位补 0。

PITFALL · 移码偏置不是 IEEE 754 的 1278 位移码按 2n−1 定义时偏置是 128。IEEE 754 单精度阶码 8 位,偏置是 27−1 = 127。两个数不要写成同一个定义。

2.2校验码

  • 奇偶校验:在信息位外加 1 位,使 1 的个数为偶或奇。典型只能发现奇数个比特翻转,不能纠错。
  • 海明码:m 位数据需要 k 个校验位,满足 2k ≥ m + k + 1。可纠 1 位错。再加一位总校验可做成 SECDED(纠 1 检 2)。
  • CRC:用生成多项式做模 2 除,余数作校验位,用于检错;不要把它写成「和海明一样纠 1 位」。
HAMMING · 8 DATA BITS2k ≥ 8 + k + 1 → k = 4(因为 23=8 < 12,24=16 ≥ 13)。校验位放在 1、2、4、8 号位置。
CROSSREF浮点格式见 04;演示 demos/float.html。
03

定点数运算

LEVEL 2

补码加减走加法器。溢出是「结果无法用当前位数表示」,不是「最高位进位」的同义词。

3.1加减与溢出

x − y 做成 x + (−y),−y 取补。判别溢出的常用说法:

  • 两操作数符号相同,结果符号相反 → 溢出。
  • 等价:最高位的进位入与进位出不同(Cin ⊕ Cout = 1)。

8 位例子:127 + 1 → 01111111 + 00000001 = 10000000,位型是 −128,两正数得负,溢出。不要把这个位型当成 +128。

PITFALL · 有进位 ≠ 有溢出无符号加法「最高位进位」表示进位/借位。有符号补码溢出看符号组合或双进位异或。两套判据不要混用。

3.2乘除与 ALU

ALU 做算术与逻辑:加、减、与、或、非、比较、移位。乘法可用移位加阵列或 Booth 编码减少部分积;除法有恢复余数 / 不恢复余数等。复习记分类即可,具体阵列延迟随实现变。

逻辑左移在低位补 0;算术右移在高位复制符号位。对补码,算术右移对应向 −∞ 的整数除 2(注意 −1 右移仍是 −1)。

CROSSREF加法器进位链见 图集 · 加法器。
04

浮点数

LEVEL 3

IEEE 754 把一个有限比特场拆成符号、阶码、尾数。边界取值必须按字段定义读,不能「阶码全 0 就是 0」一句话带过。

4.1IEEE 754

符号阶码尾数偏置
单精度1823127
双精度111521023
  • 规格化(阶码非全 0 非全 1):(−1)s × 1.f × 2E−bias,前导 1 隐含。
  • 阶码全 0 且尾数全 0:带符号的零。
  • 阶码全 0 且尾数非 0:非规格化数,(−1)s × 0.f × 21−bias。
  • 阶码全 1 且尾数全 0:±∞。
  • 阶码全 1 且尾数非 0:NaN。
BIT PATTERNS · SINGLE+1.0 → 0 01111111 000…0  +0.5 → 0 01111110 000…0  −2.0 → 1 10000000 000…0
单精度规格化最小正数 = 2−126;非规格化最小正数 = 2−149。
PITFALL · 阶码全 0 不是一律为零只有尾数也是 0 才是零。尾数非 0 是非规格化数,用来填 0 与最小规格化数之间的空隙。

4.2对阶 · 加减 · 舍入

对阶

把较小阶码的尾数右移,直到两阶码相等。移出的位进入舍入逻辑,不是直接丢掉就完。

尾数加减

对阶后的尾数相加或相减。

规格化

结果可能需要左移或右移以恢复 1.f 形式,并同步调整阶码。阶码上溢时,IEEE 754 的结果取决于符号与舍入方向,可能是 Inf,也可能舍入为最大有限数;下溢则可能进入非规格化数或零。

舍入

IEEE 默认向最近偶数(ties to even)。另有向 0、向 +∞、向 −∞。不要只写「四舍五入」。

CROSSREF演示 demos/float.html。
05

存储系统

LEVEL 3

层次靠局部性工作。SRAM 做 Cache,DRAM 做主存。虚存在这一章只看到 MMU 与 TLB,缺页之后交给操作系统。

5.1层次 · SRAM / DRAM

自上而下通常是:寄存器 → Cache → 主存 → 辅存。容量增大、延迟变长、每比特成本下降。程序的时间局部性与空间局部性让靠近 CPU 的小而快的层有效。

  • SRAM:触发器保存,不必刷新,快、贵、密度低,用作 Cache。
  • DRAM:电容保存,要刷新,密度高,用作主存。

按字节编址时,一个字可能占连续多个地址。字地址与字节地址的换算依赖字长和端序;端序说的是字节排列,不是 ALU 内部的比特编号。

5.2交叉编址

多体交叉把连续地址分到不同存储体。低位交叉用地址低位选体,连续访问可流水式启动多个体;高位交叉用高位选体,一个体内地址连续。题面要看是哪一种。

5.3虚存的硬件侧

MMU 用页表把虚页号译成物理页框号。TLB 缓存最近用过的页表项,命中则不必走多级页表。访问时:有效位为 0,或权限不匹配,触发异常。页不在内存是操作系统的事:本站只要求会描述「硬件陷入」这一步。

PITFALL · TLB 未命中 ≠ 缺页TLB 未命中后查页表,页表项有效且已驻留则只是补填 TLB。缺页是「合法页未驻留」。Cache 未命中又是另一件事。三层不要写成同一个故障。
CROSSREFCache 见 06;缺页的软件处理在操作系统课,不在这里展开置换算法。
06

Cache

LEVEL 4

Cache 按块与主存映射。命中看有效位和标记。直接映射没有「选哪一行替换」的自由。

6.1三种映射

映射一个主存块能去哪地址字段替换
直接映射唯一一行标记 | 行号 | 块内无选择,只能覆盖该行
组相联某一组内任一路标记 | 组号 | 块内组满才替换(LRU / FIFO / 随机等)
全相联任一行标记 | 块内Cache 满才替换

n 路组相联就是每组 n 行。直接映射是 1 路组相联。

6.2地址划分例题

条件:32 位物理地址,Cache 容量 16 KB,块大小 32 B,4 路组相联,按字节编址。

WORKED · 16KB / 32B / 4-WAY / 32-BIT行数 = 16×1024 / 32 = 512
组数 = 512 / 4 = 128
块内偏移 = log232 = 5 位
组号 = log2128 = 7 位
标记 = 32 − 5 − 7 = 20 位

平均访问时间 AMAT = 命中时间 + 缺失率 × 缺失惩罚。缺失惩罚是到下一层的代价,不是「再跑一遍 Cache」。

6.3写策略与三类缺失

  • 写直达:命中时同时写 Cache 与下一级;常配不按写分配。
  • 写回:只写 Cache 并置脏位,替换时若脏才写回;常配按写分配。

「常配」不是定律:写直达也可以按写分配。映射方式与写策略是两轴,不要说「写回就是组相联」。

三类缺失:强制(首次)、容量(工作集大于 Cache)、冲突(相联度不够;全相联没有冲突缺失)。

CROSSREF演示 demos/cache.html;图集 Cache 组织。
07

指令系统

LEVEL 3

指令格式和寻址方式决定操作数从哪来。CISC / RISC 写的是常见特征,不是比赛名次。

7.1格式与寻址

一条指令至少包含操作码;地址码可以是零个或多个。常见寻址:立即、寄存器、直接(绝对)、寄存器间接、基址/变址(寄存器 + 位移)、相对(PC + 位移)、间接。有效地址的计算发生在什么阶段,取决于数据通路,不在这一节发明新阶段名。

7.2CISC / RISC

常见特征不要写成
CISC指令可变长、寻址方式多、可存储器-存储器运算一定更慢、已被淘汰
RISC指令定长、Load/Store、通用寄存器多、硬布线控制更常见一定更快、没有复杂指令、访存指令不存在

7.3指令周期

一条指令至少经过取指、译码、执行;访存与写回视指令而定。时钟周期、机器周期、指令周期是三层,见 01.3。

CROSSREF演示 demos/isa.html。
08

CPU 结构

LEVEL 4

CPU = 数据通路 + 控制器。控制器可以是硬布线,也可以是微程序。单周期和多周期是两种教学实现,不是两种 ISA。

8.1数据通路

数据通路是寄存器、ALU、存储器端口和它们之间的多路选择器。一次操作:控制信号打开通路,操作数从源寄存器或立即数进入 ALU 或存储器,结果写回。

8.2硬布线与微程序

  • 硬布线:由操作码和时序状态经组合/时序逻辑直接产生控制信号,快,改指令集要改电路。
  • 微程序:控制信号编成微指令存在控存,靠微 PC 顺序或分支取出。灵活。一条机器指令由一串微指令完成,需逐条访问控存取微指令,控制速度通常低于硬布线。

CISC 历史上多用微程序,RISC 教学实现多用硬布线。这是常见搭配,不是定义。

8.3单周期 / 多周期 · 异常硬件

单周期:一条指令一个时钟,CPI 常取 1,时钟必须罩住最慢那条指令。多周期:按步骤拆成若干时钟,不同指令时钟数可以不同。流水线见下一章。

异常/中断的硬件侧:保存返回地址(如 EPC)、记下原因、切到处理入口,进入体系结构规定的异常处理状态/特权上下文;若原已处于相应高特权级则未必再次提升。之后由软件读原因并分派。页不在内存时硬件只负责陷入,不在 CPU 章里做页面置换。

CROSSREF演示 demos/cpu.html;图集 硬布线 / 微程序。
09

流水线

LEVEL 4

经典五级是教学模型:IF ID EX MEM WB。流水线提高吞吐,不自动缩短单条指令的延迟。加速比不等于级数。

9.1五段划分

取指、译码/读寄存器、执行/有效地址、访存、写回。这是 MIPS 风格的五段,不是「所有 CPU 都是五段」。

理想情况下填满后接近每周期完成一条。实际 CPI = 1 + 因冒险插入的平均停顿。

9.2三类冒险

冒险含义常见处理
结构同一拍争用同一部件(如统一存储器)复制资源、分时、停顿
数据RAW / WAR / WAW。流水线里最常考 RAW转发可解决部分 RAW;load-use 仍要停顿
控制分支目标未定就已取了后续指令停顿、冲刷、预测
PITFALL · 转发不是万能转发把 ALU 结果提前送到后面指令的 ALU 输入,可减少 RAW 停顿。load 的数据要到 MEM 段末才可用,紧邻的使用仍必须插入气泡。

9.3加速比与超标量

把一条指令拆成 k 段、每段一个时钟,与「不流水、一条指令 k 个同样长的时钟」比:

WORKED · k=5 · N=100 · NO STALL不流水:100 × 5 = 500 拍
流水:5 + 99 = 104 拍
加速比 = 500 / 104 ≈ 4.81(不是 5)
N → ∞ 时上限趋近 k,有停顿时更低。

超标量:同一拍发射多于一条指令。发射宽度、结构冲突和相关性都会限制实际 IPC。这里只要求概念,不编造某代处理器的 IPC 数字。

CROSSREF演示 demos/pipeline.html;图集 转发路径。
10

总线与 I/O

LEVEL 3

总线是共享互连,要仲裁。I/O 有程序查询、中断和 DMA;通道比 DMA 更「像一个小处理器」。

10.1总线与仲裁

典型分地址线、数据线、控制线。同步总线用公共时钟;异步总线靠握手(互锁)。多主设备同时申请时要仲裁:集中式(链式查询、计数器定时查询、独立请求)或分布式。链式查询实现简单、优先级靠电气位置、故障隔离差。

总线定时讲的是一次事务里信号谁先谁后,不是处理机调度算法。

10.2程序查询 · 中断 · DMA

方式谁搬数据CPU 在传送中
程序查询CPU 指令轮询状态,占用处理机
中断CPU 在中断服务里设备就绪才打断,仍按字节/字由 CPU 搬
DMADMA 控制器CPU 负责启动与收尾;传送中可周期窃取或成组占用总线
PITFALL · DMA ≠ CPU 完全退出CPU 要设置地址、计数、方向并启动。块结束常用中断通知。DMA 减少的是「逐字节由 CPU 搬」,不是「CPU 对这次传送毫无责任」。

10.3通道

通道是更独立的 I/O 处理机,能执行通道程序、组织一批设备的传送。代价和复杂度高于基本 DMA。教材三者递进:查询 < 中断 < DMA < 通道,指的是 CPU 介入粒度,不是「通道一定最快」。

CROSSREF图集 DMA 控制器、仲裁。
QZ

章末自测

LEVEL 3

先自己答再展开。数值题按本章公式,不要心算口误。