📘 第1章 计算机系统概述
理解计算机的基本结构、ISA、翻译程序和抽象层次。
1.1 冯·诺依曼结构计算机的特点与组成 必考重点
冯·诺依曼结构的特点
1945年,美籍匈牙利数学家冯·诺依曼提出了存储程序的概念,奠定了现代计算机的结构基础。冯·诺依曼结构计算机具有以下特点:
存储程序思想
将程序指令和数据以二进制形式预先存储在存储器中,计算机运行时自动逐条取指并执行。
五大部件
由运算器、控制器、存储器、输入设备、输出设备五大部分组成。
指令与数据同存
指令和数据在存储器中同等对待,都采用二进制编码表示,但用途不同。
串行执行
指令按顺序逐条执行,即von Neumann瓶颈。
① 存储程序:程序和数据事先存入存储器,机器自动逐条取指执行。
② 五大部件:运算器(ALU)、控制器(CU)、存储器(Memory)、输入设备(Input)、输出设备(Output)。
③ 以运算器为中心:数据流经运算器处理,控制器负责协调各部件的操作时序。
④ 指令由操作码和地址码组成:操作码指明操作类型,地址码指明操作数地址。
1.2 ISA指令系统概念 必考重点
ISA (Instruction Set Architecture)
ISA(指令系统体系结构)是计算机硬件和软件之间的交界面/接口。它规定了:
指令格式
操作码和操作数的编码方式。
数据类型
支持的数据格式(整数、浮点数等)。
寻址方式
如何确定操作数的地址。
寄存器定义
通用寄存器、专用寄存器的数量和用途。
1.3 三类翻译程序 必考重点
将高级语言程序转换为机器语言程序,需要经过翻译程序的转换。共有三种翻译程序:
汇编程序 (Assembler)
将汇编语言源程序翻译为机器语言目标程序。一条汇编指令对应一条机器指令。
解释程序 (Interpreter)
将高级语言源程序逐条翻译并立即执行,不生成目标程序文件。如早期的BASIC语言。
编译程序 (Compiler)
将高级语言源程序全部翻译为机器语言目标程序,然后统一执行。如C/C++编译器。
源程序 → 编译程序 → 目标程序 → 执行
一次性翻译,执行速度快
如:C、C++、Go、Rust
源程序 → 解释程序(逐条翻译执行)
跨平台性好,执行速度慢
如:Python、JavaScript
1.4 计算机系统的抽象层 基础了解
📘 第1章续 计算机性能评价
衡量计算机性能的定量指标和计算方法。
1.5 响应时间与吞吐率 必考重点
从任务开始到完成的总时间
= CPU时间 + 等待I/O时间 + 系统开销时间
也称为执行时间或延迟
单位时间内完成的任务数量
= 任务总数 / 总时间
也称为带宽
1.6 CPU执行时间公式 必考重点
指令条数 (Instruction Count)
程序执行的总指令数,由ISA和编译器决定。
CPI (Cycles Per Instruction)
每条指令平均所需的时钟周期数,由微架构和指令类型决定。
时钟周期 (Clock Cycle Time)
每个时钟周期的时间长度,由主频决定:$T_{\text{clk}} = \frac{1}{f_{\text{clk}}}$。
题目:某程序执行了 $2\times 10^6$ 条指令,CPI=1.5,主频为2GHz,求CPU执行时间。
解:
时钟周期 $= 1 / (2 \times 10^9) = 0.5$ ns
CPU时间 $= 2 \times 10^6 \times 1.5 \times 0.5 \times 10^{-9} = 1.5 \times 10^{-3}$ s $= 1.5$ ms
1.7 CPI与综合CPI计算 必考重点
当程序中包含多种类型的指令时,需要计算综合CPI(加权平均CPI):
或:
题目:某CPU指令系统中,ALU指令占40%(CPI=1)、Load指令占20%(CPI=5)、Store指令占15%(CPI=3)、Branch指令占25%(CPI=2)。求综合CPI。
解:
CPI $= 40\% \times 1 + 20\% \times 5 + 15\% \times 3 + 25\% \times 2$
$= 0.40 + 1.00 + 0.45 + 0.50 = 2.35$
所以综合CPI = 2.35
若主频为1GHz,则CPU执行时间 $= N \times 2.35 \times 1 \text{ns}$
1.8 MIPS 常考掌握
MIPS (Million Instructions Per Second) 是衡量CPU性能的常用指标:
- 不同ISA的指令功能不同,MIPS不能跨架构比较
- 同一台机器上不同程序的MIPS值可能不同
- MIPS可能与实际性能反向变化(例如编译优化增加了指令条数但CPI降低)
某CPU主频为2.5GHz,CPI=2.5,求MIPS。
MIPS $= 2.5 \times 10^9 / (2.5 \times 10^6) = 1000$
即该CPU每秒可执行1000百万条指令。
1.9 综合性能分析 必考重点
题目:程序P在机器A上运行需10s,A的时钟频率为400MHz。现设计机器B,希望在B上运行只需6s。B的时钟频率提高导CPI增加,使P在B上的时钟周期数是A上的1.2倍。B的频率需达到A的多少倍?
解:
CPU时间A = 时钟周期数A / 频率A
时钟周期数A = 10 × 400M = 4000M个
时钟周期数B = 1.2 × 4000M = 4800M个
频率B = 时钟周期数B / CPU时间B = 4800M / 6 = 800 MHz
频率B / 频率A = 800/400 = 2倍
结论:频率增加2倍但性能并未提升2倍(1.67倍),因为CPI也增加了。
1.10 基准程序Benchmark 基础了解
基准程序(Benchmark)是用于评估和比较计算机系统性能的标准测试程序集。
SPEC CPU
标准性能评估公司推出的CPU基准测试套件。SPECint测试整数性能,SPECfp测试浮点性能。
DaCapo
Java应用性能基准测试,包含多种真实应用负载。
TPC
事务处理性能委员会推出的数据库/OLTP基准测试。
Linpack
线性代数计算的基准测试,用于TOP500超级计算机排名。
📗 第2章 数据的机器级表示
计算机如何用二进制表示和存储数据。
2.1 二进制与十六进制 基础了解
进制转换
二进制→十进制
按权展开:$1011_2 = 1\times 2^3 + 0\times 2^2 + 1\times 2^1 + 1\times 2^0 = 11_{10}$
十进制→二进制
整除取余法:$13 \div 2 = 6\cdots 1$,$6\div 2=3\cdots 0$,$3\div 2=1\cdots 1$,$1\div 2=0\cdots 1$ → $1101_2$
二进制←→十六进制
每4位二进制对应1位十六进制:$1010\;1111_2 = \text{AF}_{16}$
| 十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 二进制 | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
2.2 整数补码表示与范围 必考重点
补码的定义
在计算机中,有符号整数通常采用补码表示。补码的定义如下:
补码的特点
唯一零表示
补码中 $0$ 只有一种表示:$000\cdots 000$,消除了原码和反码中的 $\pm 0$ 问题。
符号位扩展
符号位(最高位)为0表示正数,为1表示负数。
范围不对称
n位补码表示范围:$-2^{n-1} \sim +2^{n-1}-1$
减法可统一为加法
$[x-y]_{\text{2c}} = [x]_{\text{2c}} + [-y]_{\text{2c}}$,硬件实现简单。
补码的运算规则
例:用8位补码计算 $(-5) + (-3)$。
$-5$ 的补码:$5 = 00000101_2$,取反 $11111010_2$,$+1 \to 11111011_2$
$-3$ 的补码:$3 = 00000011_2$,取反 $11111100_2$,$+1 \to 11111101_2$
相加:$11111011 + 11111101 = 111111000$,丢弃进位,得 $11111000_2$
$11111000_2$ 补码→真值:先 $-1 = 11110111_2$,取反 $00001000_2 = -8$ ✓
2.3 无符号整数 基础了解
无符号整数的所有二进制位都用于表示数值,没有符号位。n位无符号整数的表示范围:$0 \sim 2^n-1$。
2.4 IEEE754单精度浮点数 必考重点
IEEE754单精度格式
32位单精度浮点数分为三个部分:
S(符号位)
1位:0为正,1为负。
E(阶码)
8位,偏移127,实际指数 = E - 127。
M(尾数)
23位,隐含前导1,实际尾数 = 1.M。
① 确定符号:负数,S = 1
② 转换为二进制:$2.75 = 2 + 0.75 = 10.11_2$
③ 规格化:$10.11_2 = 1.011_2 \times 2^{1}$
④ 计算阶码:$E = 1 + 127 = 128 = 10000000_2$
⑤ 尾数(隐含前导1):$M = 01100000000000000000000_2$(23位)
⑥ 合并:S|E|M = 1 10000000 01100000000000000000000
→ 十六进制:0xC0300000
| 类型 | S | E | M | 值 |
|---|---|---|---|---|
| +0 | 0 | 00000000 | 000...0 | 0 |
| -0 | 1 | 00000000 | 000...0 | -0 |
| 非规格化数 | 0/1 | 00000000 | 非0 | $(-1)^S \times 2^{-126} \times 0.M$ |
| 规格化数 | 0/1 | 1~254 | 任意 | $(-1)^S \times 2^{E-127} \times 1.M$ |
| ∞ | 0/1 | 11111111 | 000...0 | $\pm \infty$ |
| NaN | 0/1 | 11111111 | 非0 | 非数 |
2.5 算术左移与算术右移 常考掌握
各位左移,低位补0,高位舍弃。
低位填0 → 相当于乘以2。
若舍弃的高位与符号位不同则溢出。
例:$0110_{2} \xrightarrow{\ll 1} 1100_{2}$
各位右移,高位补符号位,低位舍弃。
正数补0,负数补1 → 相当于除以2(向负无穷取整)。
例:$1010_{2} \xrightarrow{\gg 1} 1101_{2}$
$00001010_2 = +10$,左移1位 → $00010100_2 = +20$ ✓(乘以2)
$11110110_2 = -10$,右移1位 → $11111011_2 = -5$ ✓(除以2向负无穷取整)
$01000000_2 = +64$,左移1位 → $10000000_2 = -128$,符号位翻转 → 溢出
2.6 大端法与小端法 必考重点
大端法(Big-Endian)和小端法(Little-Endian)是两种字节存储顺序:
最高有效字节存储在最低地址。
类似于人类书写习惯——高位在前。
如:PowerPC、网络传输
最低有效字节存储在最低地址。
数值的低位在前——更符合计算机处理逻辑。
如:x86、x86-64
2.7 边界对齐 常考掌握
边界对齐要求数据的起始地址必须是其大小的整数倍。如int(4字节)的地址必须是4的倍数。
struct Example { char a; // 1字节,偏移0 int b; // 4字节,需对齐到4 → 偏移4 short c; // 2字节,对齐到2 → 偏移8 }; // 总大小 = 10,对齐到4 → 12字节
| 数据类型 | 大小 | 对齐要求 |
|---|---|---|
| char | 1字节 | 1字节对齐 |
| short | 2字节 | 2字节对齐 |
| int / float | 4字节 | 4字节对齐 |
| double | 8字节 | 8字节对齐 |
📙 第3章 存储系统
存储器的层次结构、Cache映射与虚拟存储。
3.1 SRAM与DRAM的区别 常考掌握
用触发器(6个晶体管)存储1位。
速度快、功耗较高、集成度低、价格高。
用于Cache和寄存器。
不需要刷新,读写速度快。
用电容和晶体管(1T1C)存储1位。
速度较慢、功耗较低、集成度高、价格低。
用于主存。
需要定期刷新(约64ms)。
| 特性 | SRAM | DRAM |
|---|---|---|
| 存储元件 | 触发器(6T) | 电容+晶体管(1T1C) |
| 是否需刷新 | 不需要 | 需要(电容放电) |
| 存取速度 | 快(约1~10ns) | 较慢(约50~100ns) |
| 集成度 | 低 | 高(容量大) |
| 功耗 | 较高 | 较低 |
| 价格 | 高 | 低 |
| 主要用途 | Cache、寄存器 | 主存(内存条) |
3.2 时间局部性与空间局部性 必考重点
时间局部性 (Temporal Locality)
如果某个数据被访问,那么不久的将来很可能再次被访问。
例如:循环中的循环变量、频繁使用的全局变量。
空间局部性 (Spatial Locality)
如果某个数据被访问,那么附近的地址很可能很快被访问。
例如:数组的顺序访问、指令的顺序执行。
3.3 Cache的基本功能与工作原理 常考掌握
Cache的工作原理
Cache是位于CPU和主存之间的高速小容量存储器,用于缓解CPU与主存之间的速度差异。
3.4 直接映射Cache 必考重点
直接映射:主存中的每个块只能映射到Cache中的唯一一个位置。
假设:主存容量64KB,Cache容量4KB,块大小16B。
① 块内偏移 = $\log_2 16 = 4$ 位
② Cache行数 = $4\text{KB} / 16\text{B} = 256$ 行,索引 = $\log_2 256 = 8$ 位
③ 主存块数 = $64\text{KB} / 16\text{B} = 4096$ 块
④ Tag位数 = $\log_2(4096/256) = 4$ 位
⑤ 地址划分:Tag(4位) | 索引(8位) | 块内偏移(4位)
3.5 全相联映射 常考掌握
全相联映射:主存中的任何块可以映射到Cache中的任何位置。
优点
块冲突率最低。
缺点
硬件实现复杂,需对所有Cache行并行比较Tag,成本高、速度慢。
3.6 组相联映射 必考重点
组相联映射是直接映射和全相联映射的折中方案:将Cache分成若干组,每组包含若干行。
主存块可以映射到指定组内的任意一行。n路组相联 = 每组有n行。
三种映射方式的对比
3.7 块冲突率分析 常考掌握
块冲突是指需要访问的块无法放入Cache(对应位置已被占用)。
| 映射方式 | 冲突率 | 硬件成本 | 速度 |
|---|---|---|---|
| 直接映射 | 高 | 低 | 快 |
| 全相联 | 最低 | 高(全比较) | 慢 |
| 组相联 | 中等 | 中等 | 中等 |
3.8 虚拟存储系统 基础了解
虚拟存储系统将主存和磁盘统一编址,使程序可以运行在比实际物理内存更大的地址空间上。
页式管理
固定大小的页(通常4KB),通过页表将虚拟地址映射到物理地址。
段式管理
按逻辑段分配,段长可变,通过段表映射。
TLB (快表)
页表的Cache,缓存近期使用的页表项,加速地址转换。
3.9 写策略 常考掌握
写入Cache的同时也写入主存。
✅ 一致性维护简单
❌ 写操作速度慢(需等待主存写入)
通常配合写缓冲使用
只写入Cache,标记为脏(dirty),
当该Cache行被替换时再写回主存。
✅ 写操作速度快
❌ 一致性维护复杂
现代CPU多用Write-back
📕 第4章 指令系统
CPU执行指令的流程、操作码优化与寻址方式。
4.1 指令执行顺序 必考重点
一条指令从开始到结束需要经过以下六个步骤:
4.2 操作码优化 必考重点
哈夫曼编码(Huffman Coding)
根据指令的使用频率分配不同的操作码长度:高频指令用短编码,低频指令用长编码,使平均操作码长度最小。
假设有4条指令,频率分别为:A(50%)、B(25%)、C(15%)、D(10%)
等长编码:每条指令2位,平均长度 = 2位
哈夫曼编码:A→0(1位)、B→10(2位)、C→110(3位)、D→111(3位)
平均长度 = $50\%\times1 + 25\%\times2 + 15\%\times3 + 10\%\times3 = 1.75$位
压缩率 = $1 - 1.75/2 = 12.5\%$
题目:7条指令 I1~I7,频度分别为 0.4, 0.3, 0.15, 0.05, 0.04, 0.03, 0.03。用哈夫曼编码求平均码长。
解:
① 构造哈夫曼树:合并最小的两个频度(0.03+0.03=0.06),依次向上合并。
② 得到的编码(示例):
I1(0.4)→0 | I2(0.3)→10 | I3(0.15)→110 | I4(0.05)→11100
I5(0.04)→11101 | I6(0.03)→11110 | I7(0.03)→11111
③ 平均码长 = 0.4×1 + 0.3×2 + 0.15×3 + 0.05×5 + 0.04×5 + 0.03×5 + 0.03×5
= 0.4 + 0.6 + 0.45 + 0.25 + 0.20 + 0.15 + 0.15 = 2.20位
④ 对比定长编码(3位):压缩率 = 1 - 2.20/3 ≈ 26.7%
扩展编码法
在固定长度操作码的基础上,使用特定前缀码表示指令长度的扩展。常见的有3-4扩展、4-8扩展等。
题目:指令系统共42种指令。前15种频率共0.5,中间13种频率共0.15,最后14种频率共0.35。如何用扩展编码?
解:
采用15/15/15扩展法:
第一段(4位):0000~1110 映射前15种指令(1111留作扩展标志)
第二段(8位):1111 0000~1111 1110 映射中间15种(最后一组1111 1111留作再扩展)
第三段(12位):1111 1111 0000~1111 1111 1110 映射最后15种
总指令数 = 15 + 15 + 15 = 45种,实际需42种,足够。
题目:指令系统共74种指令。前4种频率0.42,中间15种频率0.34,最后55种频率0.24。求平均码长。
解:
采用4/16/64扩展法(3-6-9位):
第一段(3位):0xx → 4种指令
第二段(6位):1xx 0xx → 8×2=16种指令
第三段(9位):1xx 1xx 0xx → 8×8×1=64种指令
平均码长 = 0.42×3 + 0.34×6 + 0.24×9 = 1.26 + 2.04 + 2.16 = 5.46位
4.3 寻址方式 必考重点
寻址方式规定了指令中如何确定操作数的地址。共7种常见寻址方式:
| 寻址方式 | 操作数来源 | 说明 | 示例 |
|---|---|---|---|
| 立即寻址 | 指令本身 | 操作数直接在指令中,速度最快 | MOV R1, #100 |
| 直接寻址 | 内存 | 指令中给出操作数的内存地址 | LOAD R1, [addr] |
| 间接寻址 | 内存 | 指令给出地址的地址 | LOAD R1, [[addr]] |
| 寄存器寻址 | 寄存器 | 操作数在寄存器中,速度快 | ADD R1, R2, R3 |
| 寄存器间接 | 内存 | 操作数地址在寄存器中 | LOAD R1, [R2] |
| 变址寻址 | 内存 | 基址+变址寄存器,适合数组 | LOAD R1, [R2+R3] |
| 相对寻址 | 内存 | PC+偏移量,用于分支转移 | BEQZ R1, offset |
立即 vs 寄存器:操作数位置不同。立即数在指令中,寄存器操作数在寄存器中。
直接 vs 寄存器间接:地址来源不同。直接寻址的地址在指令中,寄存器间接的地址在寄存器中。
变址 vs 相对:基址来源不同。变址的基址来自寄存器,相对的基址来自PC。
4.4 CISC特点 常考掌握
CISC (Complex Instruction Set Computer) — 复杂指令集计算机,如x86架构。
指令数量多
指令种类丰富,可支持复杂的操作。
指令长度可变
指令长度不固定,译码逻辑复杂。
寻址方式丰富
支持多种寻址方式,灵活性高。
微程序控制
多采用微程序控制器实现复杂指令。
4.5 RISC特点 常考掌握
RISC (Reduced Instruction Set Computer) — 精简指令集计算机,如ARM、MIPS、RISC-V。
指令数量少
仅包含最常用的简单指令。
指令长度固定
所有指令长度相同,便于流水线处理。
Load-Store结构
只有Load/Store指令可以访问内存,运算指令只操作寄存器。
硬连线控制
多采用硬连线控制器,控制逻辑简单、速度快。
| 比较项目 | CISC | RISC |
|---|---|---|
| 指令数量 | 多(数百条) | 少(几十~一百余条) |
| 指令长度 | 可变 | 固定 |
| 寻址方式 | 多(十几种) | 少(几种) |
| 内存访问 | 多数指令可直接访存 | 仅Load/Store访存 |
| 寄存器数量 | 较少 | 较多(通用寄存器多) |
| 控制器实现 | 微程序(复杂) | 硬连线(简单) |
| 编译优化 | 较困难 | 较容易 |
| 代表架构 | x86、VAX | ARM、MIPS、RISC-V |
📘 第5章 流水线技术
通过指令级并行提高CPU吞吐率的核心技术。
5.1 流水线基本概念与五段流水线 必考重点
五段流水线(MIPS经典5级流水线)
IF (取指)
从指令Cache中取出指令,PC自增。
ID (译码)
指令译码,读取寄存器堆,生成控制信号。
EX (执行)
ALU执行运算或计算地址。
MEM (访存)
访问数据Cache(仅Load/Store指令)。
WB (写回)
将结果写回寄存器堆。
5.2 流水线时空图 必考重点
5.3 吞吐率与加速比 必考重点
对于k段流水线,执行n条指令:
当 $n \to \infty$ 时,$TP_{\max} = \frac{1}{\Delta t}$。
当 $n \to \infty$ 时,$S_{\max} = k$,即流水线级数就是理论最大加速比。
某5段流水线,每段耗时1ns,执行200条指令。若无冲突:
$TP = 200 / (5+200-1) \div 1 = 200/204 \approx 0.98$ 条/ns
加速比 $S = 5 \times 200 / (5+200-1) = 1000/204 \approx 4.9$
接近理论最大加速比5。
5.4 结构冲突(资源相关) 必考重点
结构冲突发生在多条指令同时竞争同一硬件资源时。例如,冯·诺依曼结构中指令和数据共用同一存储器,IF和MEM阶段可能同时访问存储器。
IF和MEM同时访存 → 冲突
解决方法:
- 分离指令Cache和数据Cache(哈佛结构)
- 插入暂停气泡(Stall)
哈佛结构:I-Cache和D-Cache分离
IF使用I-Cache,MEM使用D-Cache
→ 不会冲突
5.5 数据冲突RAW与转发技术 必考重点
RAW (Read After Write) 数据冲突
当下一条指令需要读取上一条指令的计算结果,而上一条指令尚未将结果写回时,发生数据冲突。
// 典型的RAW数据冲突 ADD R1, R2, R3 ; R1 = R2 + R3 (WB在周期5完成) SUB R4, R1, R5 ; 需要R1的值 (ID在周期3需要R1) → 冲突!
解决方法:Bypassing(转发/旁路)
转发技术将ALU的输出直接通过旁路转发给下一指令的ALU输入,无需等待写回寄存器。
ADD的EX阶段计算出R1后,直接转发给SUB的EX阶段——硬件透明处理,无需软件干预。
5.6 Load-use冒险与阻塞 必考重点
Load-use冒险是一类特殊的数据冲突:Load指令后的指令立即使用Load的结果。
LW R1, 0(R2) ; R1 = Mem[R2] (MEM阶段在周期4) ADD R3, R1, R4 ; EX阶段需要R1 (周期3) → 转发也来不及!
Load指令在周期4的MEM阶段才能拿到数据,而ADD在周期3的EX阶段就需要数据。
即使有转发也无法解决,因为数据直到MEM阶段才可用。
解决方案:
① 插入1个气泡(Stall)—— 硬件阻塞
② 编译器在Load后插入无关指令 —— 指令调度
5.7 控制冲突与分支预测 必考重点
控制冲突发生在分支指令(BEQ、BNE等)时,流水线需要等待分支结果才能确定下一条指令的地址。
静态分支预测
编译器或硬件固定预测分支方向。如:总是预测"不跳转"。
预测正确则无惩罚,预测错误需清空流水线。
动态分支预测
根据历史执行记录预测。如2位饱和计数器(00→01→10→11,高位为1预测跳转)。
BTB(分支目标缓冲器)缓存分支地址和目标地址。
BEQ R1, R0, Target ; 若R1=R0,跳转到Target ADD R2, R2, R3 ; 预测不跳转,预取此指令 ; ... 若实际跳转,清空流水线中后续指令
5.8 指令调度(编译器优化) 常考掌握
编译器可以通过重新排列指令顺序来减少流水线停滞:
优化前(有Load-use冒�的):
LW R1, 0(R2) ADD R3, R1, R4 ; 需要stall 1周期 SUB R5, R6, R7 ; 与R1无关
优化后(无Load-use冒险):
LW R1, 0(R2) SUB R5, R6, R7 ; 与Load无关,移到此处执行 ADD R3, R1, R4 ; 此时R1已可用,无需stall
5.9 超流水线与多发射技术 基础了解
将流水线级数进一步细分
减小每级延迟 → 提高主频
如:从5级增加到8/10/14级
代价:控制冲突惩罚更大
每个周期发射多条指令
需要多个功能单元(ALU等)
如:Intel Core系列可发射4~6条
VLIW:编译器决定并行指令
📗 第6章 输入输出组织
CPU与外部设备之间的数据交换方式。
6.1 基本I/O方式 基础了解
基本的I/O方式包括:
程序查询方式
CPU不断查询I/O设备状态,直到设备准备就绪。CPU效率低(等待浪费)。
程序中断方式
设备准备就绪后主动向CPU发出中断请求,CPU响应后执行中断处理程序。
DMA方式
DMA控制器直接在内存和外设之间传输数据,无需CPU逐字干预。
通道方式
使用专门的I/O处理器(通道)管理I/O操作,大型机中使用。
6.2 程序中断方式 常考掌握
中断处理流程
中断优先级
多个设备同时发出中断请求时,CPU按优先级高低依次响应。优先级高的中断可以打断优先级低的中断服务程序(中断嵌套)。
| 特性 | 程序查询 | 程序中断 |
|---|---|---|
| CPU利用率 | 低(CPU等待) | 高(CPU可做其他事) |
| 实时性 | 差 | 好 |
| 硬件成本 | 低 | 中等 |
| 适合场景 | 简单低速设备 | 中速设备 |
6.3 DMA方式 常考掌握
DMA的工作原理
DMA传送方式
周期挪用 (Cycle Stealing)
DMA在每个传送周期中占用一个总线周期,其余时间CPU继续运行。
突发传送 (Burst Mode)
DMA一次性占用总线,连续传送一批数据,传送期间CPU被阻塞。
| 特性 | 程序中断 | DMA |
|---|---|---|
| CPU参与程度 | 需要CPU执行中断服务程序 | 初始化后无需CPU干预 |
| 响应速度 | 较慢(数百~数千个时钟周期) | 快(几个时钟周期) |
| 适合场景 | 中低速设备(键盘、鼠标) | 高速设备(磁盘、GPU、网卡、SSD) |
| 数据传输单位 | 字节/字 | 数据块 |
📚 基于计算机组成原理课程资料整理 · 配合题库练习效果更佳
📝 去做练习题 →