Skip to content

计算机组成原理 ​

!!! info "考试重点" 本文档整理了计算机组成原理课程的核心知识点与重点,涵盖8个章节。

**最后更新:2026-06-24** | **整理人:小弟二号**

目录 ​

  1. 计算机系统概述
  2. 数据信息的表示
  3. 运算方法与运算器
  4. 存储系统
  5. 指令系统
  6. 中央处理器
  7. 系统总线
  8. 输入输出系统
  9. 公式速查表
  10. 记忆口诀汇总

一、计算机系统概述 ​

1.1 计算机发展历史 ​

时代时间核心技术代表
第一代1946-1958电子管ENIAC
第二代1958-1964晶体管-
第三代1964-1971集成电路IBM 360
第四代1971-至今大规模集成电路现代计算机

1.2 冯·诺依曼思想(核心!) ​

存储程序:将程序存放在计算机的存储器中

程序控制:按指令地址访问存储器并取出指令,经译码依次产生指令执行所需的控制信号

五大功能部件:

  • 运算器:完成算术运算、逻辑运算
  • 控制器:控制指令的执行
  • 主存储器:存放程序及数据
  • 输入设备
  • 输出设备

💡 记忆要点:冯·诺依曼 = 存储程序 + 程序控制 + 五大部件

1.3 计算机层次结构 ​

高级语言 (C)          ← 用户层
    ↓ Compiler
汇编语言 (MIPS)       ← 汇编层
    ↓ Assembler
指令集架构层           ← ISA层
    ↓
微代码层              ← 微程序层
    ↓
硬件逻辑层            ← 硬件层

1.4 性能评价指标 ​

非时间指标 ​

  • 机器字长:CPU一次能处理的二进制位数
  • 总线宽度:数据总线一次能传输的位数
  • 主存容量:主存能存储的二进制位数
  • CPU内核数

时钟频率与时钟周期 ​

  • 核心公式:时钟周期 = 1 / 时钟频率
  • 1 GHz = 1 ns(纳秒);1 MHz = 1 μs(微秒);1 kHz = 1 ms(毫秒)
  • ⚠️ G→ns,M→μs,k→ms,对应关系要记住
  • CPU占用率计算:CPU占用率 = 每秒花在I/O上的时间 ÷ 1秒 × 100%
    • 三步走:①每秒次数 = 速率÷每次数据量 ②每秒I/O时间 = 每次时间×次数 ③占用率 = 时间÷1秒×100%

时间指标 ​

CPI(Clock cycles Per Instruction):

CPI = \frac{\text{程序中所有指令的时钟周期数之和}}{\text{指令条数}}

CPI=∑i=1nCPIi×PiCPI = \sum_{i=1}^{n} CPI_i \times P_i

CPU执行时间:

CPU时间 = CPI \times IC \times T = \frac{CPI \times IC}{f}

MIPS(Million Instructions Per Second):

MIPS=ICTcpu×106=fCPI×106=IPC×fMIPS = \frac{IC}{T_{cpu} \times 10^6} = \frac{f}{CPI \times 10^6} = IPC \times f

MFLOPS(Million Floating-Point Operations Per Second):

MFLOPS = \frac{\text{浮点运算次数}}{T_{cpu} \times 10^6}

💡 关键公式:CPU性能 = IPC × f(频率)

💡 MIPS单位:Mega = 10⁶, Giga = 10⁹, Tera = 10¹², Peta = 10¹⁵, Exa = 10¹⁸


二、数据信息的表示 ​

2.0 位、字节、字的关系 ​

三个概念 ​

  • 位(bit):最小单位,只能是 0 或 1
  • 字节(Byte):8 位 = 1 字节,存储基本单位
  • 字(Word):CPU 一次能处理的数据长度,取决于架构

换算关系 ​

  • 1 字节 = 8 位
  • 1 字 = ? 位(架构决定):
    • 16 位 CPU → 1 字 = 16 位 = 2 字节
    • 32 位 CPU → 1 字 = 32 位 = 4 字节
    • 64 位 CPU → 1 字 = 64 位 = 8 字节

常见误区 ​

  • ❌ 位 ≠ 字(位是最小单位,字是 CPU 处理单位)
  • ✅ 1 位 = 1/8 字节

💡 速记:位是砖,字节是砖块,字是一次搬多少砖

数据单位 ​

  • SI国际单位制(10的幂次):1k=10³=1千,1M=10⁶=1百万,1G=10⁹=10亿
  • 计算机二进制单位(2的幂次):1KiB=2¹⁰=1024,1MiB=2²⁰≈1048576,1GiB=2³⁰≈1073741824
  • 硬盘厂商标SI,操作系统显示二进制 → 买500GB显示约465GiB

2.1 进制转换 ​

二进制 → 八进制:从小数点向左右三位一分组

二进制 → 十六进制:从小数点向左右四位一分组

2.2 机器码表示(重点!) ​

原码(Signed Magnitude) ​

  • 最高位为符号位,0正1负
  • 数值位不变
  • 两个机器零:+0 和 -0

反码(One's Complement) ​

  • 符号位与原码相同
  • 正数不变,负数各位取反
  • 两个机器零

补码(Two's Complement)⭐ ​

公式:

[X]_补 = \begin{cases} X & 0 \leq X < 2^n \\ 2^{n+1} + X & -2^n \leq X < 0 \end{cases}

简便方法:

  • 正数:直接取原码,符号位为0
  • 负数:逐位取反,末位加1,符号位为1

特性:

  • 只有一个零(+0 = -0)
  • 加减运算统一
  • 符号位参与运算

32位补码整数范围 ​

  • 范围:-2³¹ ~ 2³¹-1,即 -2,147,483,648 ~ 2,147,483,647
  • 原因:补码最高位为符号位,0正1负;正数 0~2³¹-1,负数 -2³¹~-1
  • 关键点:比原码多表示一个负数(-2³¹),因为补码合并了 +0 和 -0
  • 实例:Java 的 int 类型就是 32 位补码

移码(Biased Notation / 变形补码)⭐ ​

概念:变形补码 = 移码(Excess-K / Offset Binary)

公式:

  • 变形补码 = 原值 + 偏移量,偏移量 = 2^(n-1)(n 为位数)
  • 转换回原值:原值 = 变形补码 - 偏移量

举例(8 位,偏移量=128):

原值移码
-1280
-1127
0128
+127255

特点:

  • 符号位反转(0=负,1=正),可直接当无符号数比较
  • 用于浮点数的阶码,方便指数大小比较

用途:IEEE 754 浮点数的指数部分用移码表示

和补码区别:

特性补码移码
符号位1=负0=负
适合场景运算比较

💡 记忆口诀:正数三码相同,负数原码符号不变、反码各位取反、补码取反加1

2.3 定点数表示 ​

定点整数:小数点固定在最低位之后

定点小数:小数点固定在符号位之后

表示范围(n位):

  • 原码:−(2n−1)∼+(2n−1)-(2^n-1) \sim +(2^n-1)
  • 补码:−2n∼+(2n−1)-2^n \sim +(2^n-1)

2.4 浮点数表示 ​

IEEE 754 标准(重点!)

格式符号位阶码尾数总位数
单精度1位8位23位32位
双精度1位11位52位64位

表示公式:

V=(−1)S×1.M×2E−BiasV = (-1)^S \times 1.M \times 2^{E-Bias}

  • S:符号位
  • M:尾数(隐含前导1)
  • E:阶码(移码表示)
  • Bias:偏移量(单精度127,双精度1023)

特殊值:

  • 零:S=0, E=0, M=0
  • 无穷大:S=0, E=255, M=0
  • NaN:E=255, M≠0

IEEE 754 单精度浮点数尾数详解 ​

  • 尾数 M = 隐含的1 + 小数位f,即 M = 1.f
  • 隐藏位:整数部分的1不存储,但实际运算时要加上,节省1bit存储
  • 例题:43940000H → 0 10000111 00101000... → E=135-127=8, f=00101 → M=1.00101
  • 计算:1.00101×2⁸ = 100101000₂ = 256+32+8 = 296

2.5 数据校验 ​

奇偶校验 ​

  • 奇校验:数据位中1的个数 + 校验位 = 奇数
  • 偶校验:数据位中1的个数 + 校验位 = 偶数
  • 只能检测奇数个错误,不能纠错

海明码(Hamming Code)⭐ ​

核心概念:

  • 纠错码,能自动纠正单比特错误
  • 最小码距 = 3,能纠 1 错 / 检 2 错
  • 校验位位置:必须在 2 的幂次位(1, 2, 4, 8, 16...)
  • 信息位位置:其他位置(3, 5, 6, 7, 9, 10...)

校验位数量:2r≥m+r+12^r \geq m + r + 1(m为数据位数,r为校验位数)

校验位负责的位(偶校验): 每个校验位 Pi 负责位置编号二进制第 i 位为 1 的位置:

  • P1(第1位):负责位置二进制末位=1 的位:1, 3, 5, 7, 9, 11...
  • P2(第2位):负责位置二进制倒数第2位=1 的位:2, 3, 6, 7, 10, 11...
  • P4(第4位):负责位置二进制倒数第3位=1 的位:4, 5, 6, 7, 12, 13...
  • P8(第8位):负责位置二进制倒数第4位=1 的位:8, 9, 10, 11, 12...

💡 速记:位置编号写成二进制,哪些位有1就归谁管

解题步骤(已知码字求正确信息位):

  1. 给每个位置编号,区分校验位和信息位
  2. 计算每个校验组的异或值(偶校验:异或=0正确,=1有错)
  3. 把结果按 P4 P2 P1 拼成二进制 → 即为出错位置
  4. 翻转该位纠错
  5. 去掉校验位(2的幂次位置),提取信息位

错误位置检测:

  • P4 P2 P1 = 000 → 无错
  • P4 P2 P1 = 011 = 3 → 第3位出错
  • 翻转出错位即可纠正

例题:收到 0 1 1 0 1 0 1:

  • P1组(1,3,5,7): 0⊕1⊕1⊕1=1 ← 有错
  • P2组(2,3,6,7): 1⊕1⊕0⊕1=1 ← 有错
  • P4组(4,5,6,7): 0⊕1⊕0⊕1=0 ← 无错
  • 错误位置: P4P2P1=011=3, 第3位出错
  • 纠正后信息位(3,5,6,7): 0 1 0 1

📝 解题口诀: 2的幂次放校验,其余位置放信息 每个校验管一组,异或为0就没事 P4P2P1拼一起,哪位出错就翻转它

CRC校验(循环冗余校验) ​

生成多项式:G(x)

编码方法:

  1. 数据位后补r个0(r为G(x)的最高次幂)
  2. 用模2除法除以G(x)
  3. 余数即为校验码

💡 校验能力:CRC > 海明码 > 奇偶校验


三、运算方法与运算器 ​

3.1 补码加减法 ​

补码加法:[X+Y]_补 = [X]_补 + [Y]_补

补码减法:[X-Y]_补 = [X]_补 + [-Y]_补

💡 关键:补码加减法符号位参与运算,结果自动为补码

3.2 溢出检测 ​

溢出条件:两个正数相加结果为负,或两个负数相加结果为正

检测方法:

  1. 单符号位法:V=Cs⊕C1V = C_s \oplus C_1(符号位进位与最高数据位进位异或)
  2. 双符号位法:V=S1⊕S2V = S_1 \oplus S_2(两个符号位异或)
  3. 变形补码法:两个符号位不同即溢出

3.3 定点乘法 ​

原码一位乘法:

  • 符号位单独处理(异或)
  • 数值部分用移位加法实现

补码一位乘法(Booth算法):

  • 符号位参与运算
  • 根据相邻两位判断操作

3.4 定点除法 ​

原码除法:

  • 符号位单独处理
  • 数值部分用恢复余数法或不恢复余数法

补码除法:

  • 符号位参与运算
  • 加减交替法

3.5 浮点运算 ​

浮点加减法步骤:

  1. 对阶:小阶向大阶看齐
  2. 尾数运算:加减法
  3. 规格化:结果规格化
  4. 舍入:处理精度
  5. 溢出判断:检查阶码

浮点运算后为什么需要规格化 ​

目的:让结果精度最大化,保持表示唯一性

根因:尾数求和后结果可能不是规格化形式(前面有无效的 0 或 1,或者溢出)

左规:尾数为 00.0xxxx 或 11.1xxxx → 尾数左移,阶码减 1,消除多余位提高精度

右规:尾数为 01.xxxxx 或 10.xxxxx(溢出)→ 尾数右移,阶码加 1,恢复合法范围

规格化后尾数形式:正数 00.1xxxx,负数 11.0xxxx(补码表示)

本质:不规格化 = 浪费有效位 = 精度降低,规格化是必经步骤

规格化是否必须? ​

  • IEEE 754 规定:正规数尾数必须 1.xxxxx 形式(隐含前导 1),这是格式定义
  • 但标准专门设计了非规格化数(subnormal):尾数 0.xxxxx,阶码全 0,用于表示接近 0 的极小数,防止下溢归零
  • 考试/教材:必须规格化,考完整流程
  • 硬件实现:正规数必须规格化,但标准允许非规格化数存在
  • 高效计算场景:DSP、ML 加速器等可跳过规格化,用非规格化数直接算,牺牲精度换速度
  • 结论:规格化是精度最优解,但不是绝对强制的,标准自己都留了"不规格化"的口子

3.6 运算器组成 ​

ALU(算术逻辑单元):

  • 完成算术运算和逻辑运算
  • 核心部件:加法器

加法器类型:

  • 串行进位加法器:简单但慢
  • 并行进位加法器:快但复杂
  • 分组并行进位加法器:折中方案

四、存储系统 ​

4.1 存储器分类 ​

分类方式类型特点
存储介质半导体/磁/光速度/容量/成本
存取方式随机/顺序/直接访问特性
读写功能ROM/RAM可写性
易失性易失/非易失断电保持

4.2 SRAM vs DRAM ​

特性SRAMDRAM
存储元件触发器电容
速度快(<1ns)慢(10ns)
集成度低高
功耗高低
刷新不需要需要
用途Cache主存

4.2.1 存储器访问时间量级 ​

单位换算说明
1ms10⁻³ s毫秒,磁盘级别
1μs10⁻⁶ s微秒
1ns10⁻⁹ s纳秒,SRAM/DRAM 级别
1ps10⁻¹² s皮秒

典型访问时间:

  • SRAM 访问时间:几ns~几十ns
  • DRAM 访问时间:几十ns
  • 主存(磁盘):ms 级别

💡 关键对比:SRAM 比 DRAM 快约一个数量级,磁盘比 DRAM 慢约六个数量级(百万倍),这就是 Cache 存在的意义。

4.3 存储系统层次结构 ​

寄存器 ←→ Cache ←→ 主存 ←→ 磁盘 ←→ 光盘/磁带
  KB      KB~MB     GB      TB      TB~PB
 <1ns     1-2ns    10ns    10ms     10s

4.4 主存组织 ​

存储扩展:

  • 位扩展:增加字长(数据位数)
  • 字扩展:增加字数(地址空间)
  • 字位同时扩展:两者都增加

地址计算: 芯片数 = 总容量 / 单片容量

  • 地址线数 = log₂(字数)
  • 数据线数 = 字长

4.4.1 存储器结构与CPU连接 — 译码器划分ROM/RAM区域 ​

核心概念 ​

  • CPU 地址线分两路:高位(A₁₆₋₁₄)接 3:8 译码器选片选信号,低位(A₁₃₋₀)直接接芯片地址引脚选具体单元
  • 3:8 译码器:3位输入 → 8个输出中的1个,每个输出覆盖 8KB 地址空间
  • 片选信号 CS = 译码器输出,OE 接 MREQ#(存储器请求信号),WE 接 R/RW#(读写控制)

题目分析(18000H~1FFFFH 为 ROM) ​

  • 总地址空间:A₁₆₋₀ = 17位 = 128KB
  • ROM 区:18000H~1FFFFH = 32KB = 2 个译码器输出(Y₃ + Y₄)
  • RAM 区:00000H~17FFFH = 96KB = 6 个译码器输出(Y₀~Y₂ 实际够用,图上可能示意更多组)

关键设计 ​

  • ROM 32KB 需要 15 根地址线(A₁₄₋₀),用与门合并 Y₃ 和 Y₄ 作为 CS
  • RAM 16K×8 两片并联 = 16K×16(32KB/组),数据总线 D₀₋₁₅
  • ROM 只读不写,没有 WE 信号;RAM 有 WE 接 R/W#

考点 ​

  1. 译码器输出与地址范围的对应关系
  2. 与门合并多个译码器输出实现更大连续地址块
  3. RAM 的字扩展(两片8位并联成16位)与字节数计算

4.4.2 RAM/ROM 与 Cache 的区别(易混淆点) ​

  • RAM 和 ROM 都是主存的一部分,不是 cache vs 主存的关系
  • RAM:可读可写,断电丢失,程序运行时的工作内存
  • ROM:只读,断电不丢失,存放固化程序(如 BIOS)
  • Cache:CPU 和主存之间的高速缓存,对程序员透明,不在地址空间中占位置
  • 图中考的是主存的地址映射和芯片选择,Cache 根本没出现

4.4.3 Cache 与 SRAM/DRAM 的关系 ​

核心结论 ​

  • Cache = SRAM(静态随机存储器)
  • 主存(内存条)= DRAM(动态随机存储器)

为什么 Cache 用 SRAM ​

特性SRAMDRAM
速度极快(1~10ns)较慢(50~70ns)
成本贵便宜
集成度低(6个晶体管/位)高(1个晶体管+1个电容/位)
需要刷新不需要需要(电容会漏电)
用途Cache主存(内存条)

存储体系层次(速度从快到慢) ​

  1. 寄存器 — CPU 内部,最快
  2. Cache — SRAM,几十 ns,容量小(L1: 32~64KB,L2: 几百KB~几MB)
  3. 主存 — DRAM(内存条),几百 ns,容量大
  4. 硬盘 — 机械/SSD,最慢但容量最大

关键点 ​

  • SRAM 不需要刷新电路(叫"静态"),DRAM 需要定期刷新(叫"动态")
  • SRAM 每个位要 6 个晶体管,DRAM 只要 1 个晶体管+1 个电容,集成度差很多
  • 所以 Cache 做不大但极快,主存容量大但相对慢

4.5 Cache(重点!) ​

程序局部性原理 ​

  • 时间局部性:刚访问的数据很快会被再次访问
  • 空间局部性:刚访问的数据附近很快会被访问

Cache地址映射 ​

直接映射:

  • 主存块只能映射到Cache的固定位置
  • 映射关系:Cache行号 = 主存块号 \mod Cache行数
  • 优点:简单快速
  • 缺点:冲突率高

全相联映射:

  • 主存块可以映射到Cache的任意位置
  • 优点:冲突率低
  • 缺点:硬件复杂,查找慢

组相联映射:

  • Cache分组,组间直接映射,组内全相联
  • 折中方案

Cache替换算法 ​

算法策略特点
FIFO先进先出简单,不反映局部性
LRU最近最少使用反映局部性,常用
LFU最不经常使用统计频率
Random随机替换最简单

Cache写策略 ​

写命中:

  • 写直达(Write Through):同时写Cache和主存
  • 写回(Write Back):只写Cache,替换时写回主存

写不命中:

  • 写分配(Write Allocate):先调入Cache再写
  • 非写分配(No Write Allocate):直接写主存

Cache性能计算 ​

命中率:H = \frac{命中次数}{总访问次数}

平均访问时间:

Tavg=H×Tcache+(1−H)×TmainT_{avg} = H \times T_{cache} + (1-H) \times T_{main}

带多级Cache:

Tavg=H1×T1+(1−H1)×H2×T2+(1−H1)(1−H2)×TmainT_{avg} = H_1 \times T_1 + (1-H_1) \times H_2 \times T_2 + (1-H_1)(1-H_2) \times T_{main}

4.6 虚拟存储器 ​

概念:将主存和辅存统一管理,提供比实际主存更大的地址空间

页式虚拟存储:

  • 虚拟地址 → 页号 + 页内偏移
  • 页表:记录虚拟页到物理页的映射
  • TLB(快表):加速地址转换

五、指令系统 ​

5.1 指令格式 ​

指令基本格式:

| 操作码 | 地址码 |

操作码:指定操作类型

地址码:

  • 三地址指令:OP A1, A2, A3
  • 二地址指令:OP A1, A2
  • 一地址指令:OP A1
  • 零地址指令:OP

5.2 寻址方式 ​

寻址方式有效地址特点
立即寻址操作数在指令中速度快,不访存
直接寻址EA = A简单,范围有限
间接寻址EA = (A)灵活,多次访存
寄存器寻址EA = R速度快
寄存器间接EA = (R)灵活
基址寻址EA = (B) + A程序重定位
变址寻址EA = (I) + A数组访问
相对寻址EA = (PC) + A程序转移

5.3 CISC vs RISC ​

特性CISCRISC
指令数量多少
指令长度可变固定
寻址方式复杂简单
访存次数多少(Load/Store)
流水线难优化易优化
代表x86MIPS, ARM, RISC-V

💡 RISC特点:指令少、长度固定、寻址简单、Load/Store结构


六、中央处理器 ​

6.1 CPU组成 ​

运算器:ALU、寄存器组、状态寄存器

控制器:PC、IR、时序发生器、操作控制器

主要寄存器:

  • PC(程序计数器):存放下一条指令地址
  • IR(指令寄存器):存放当前指令
  • MAR(地址寄存器):存放访存地址
  • MDR(数据寄存器):存放访存数据
  • PSW(程序状态字):存放程序状态

6.2 指令周期 ​

指令周期组成:

取指周期 → 执行周期 → [间址周期] → [中断周期]

时序层次:

  • 时钟周期(节拍):最小时间单位
  • 机器周期(CPU周期):完成一次访存操作
  • 指令周期:取指+执行

6.3 控制器类型 ​

硬布线控制器 ​

  • 用组合逻辑电路产生控制信号
  • 速度快,但设计复杂,不灵活

微程序控制器 ​

  • 用微指令产生控制信号
  • 灵活,易于修改,但速度较慢

微指令格式:

  • 水平型微指令:并行操作,效率高
  • 垂直型微指令:串行操作,类似机器指令

6.3.1 CPU数据通路分析(题6.4) ​

题意:分析四寄存器数据通路(a=DR, b=IR, c=AR, d=PC)

关键连线:

  • PC→AR 送地址;DR↔主存M 双向传数据;IR→操作控制器译码
  • PC 有 +1 特征(取指后自动递增)

取指阶段:PC→AR→主存M→DR→IR;PC→PC+1

执行阶段(LDA):IR(地址)→AR→主存M→DR→AC

数据通路分析要点:

  • DR有两条输出路径:回主存(写)、直送AC(加载)
  • LDA不需要ALU运算,DR→AC是直送,一个时钟周期完成

💡 解题思路:先找有+1特征的寄存器确定PC,再根据连线关系推断数据流向,最后按取指/执行分别列出微操作序列。

6.3.2 ADD (R1), R0 指令执行分析(题6.23) ​

指令含义:(R0) + ((R1)) → (R1),R1是寄存器间接寻址

执行阶段微操作:

时钟周期微操作说明
C5R1(地址)→MAR准备访问主存
C6读主存→MDR 且 R0→A并行操作,走不同数据通路
C7MDR+A→ACALU做加法,结果存AC
C8AC→MDR准备写回
C9MDR→主存写回R1指向的地址

关键点:

  • 读主存和 R0→A 可以并行(不同数据通路)
  • 写回必须经过 MDR
  • 结果存回 (R1) 指向的内存地址

💡 解题思路:寄存器间接寻址 = 先从寄存器取地址,再按地址访问内存。分析时注意哪些操作可以并行(走不同通路),哪些必须串行(走同一通路)。

6.4 流水线(重点!) ​

流水线原理:将指令执行过程分成多个阶段,各阶段并行执行

流水线阶段:

  1. IF(取指)
  2. ID(译码)
  3. EX(执行)
  4. MEM(访存)
  5. WB(写回)

流水线性能:

理想情况:

Tpipeline=n×Δt+(k−1)×ΔtT_{pipeline} = n \times \Delta t + (k-1) \times \Delta t

其中:n为指令数,k为流水线级数,Δt为时钟周期

加速比:

S=TsequentialTpipeline=n×kn+k−1S = \frac{T_{sequential}}{T_{pipeline}} = \frac{n \times k}{n + k - 1}

吞吐率:

TP=nTpipeline=1ΔtTP = \frac{n}{T_{pipeline}} = \frac{1}{\Delta t}

流水线冲突:

  1. 结构冲突:硬件资源冲突
  2. 数据冲突:数据依赖
  3. 控制冲突:分支指令

数据冲突解决:

  • 数据旁路(Forwarding):直接传递结果
  • 插入气泡(Stall):等待数据就绪
  • 编译器调度:重排指令顺序

七、系统总线 ​

7.1 总线分类 ​

分类方式类型
传输方式并行/串行
传输方向单向/双向
时序控制同步/异步
连接部件片内/系统/外部/I/O

片内总线与系统总线 ​

  • 片内总线 = CPU芯片内部的总线,连接寄存器↔ALU↔控制器,速度快
  • 系统总线(片间总线) = CPU↔内存↔I/O设备之间的总线
  • 总线 = 数据传输的公共通道,类似公路,多个部件共用这条路来通信

7.2 总线组成 ​

数据总线:传输数据,双向

地址总线:传输地址,单向

控制总线:传输控制信号,混合

7.3 总线仲裁 ​

集中式仲裁:

  • 链式查询:简单,但对故障敏感
  • 计数器定时查询:灵活,但速度慢
  • 独立请求:速度快,但硬件复杂

分布式仲裁:

  • 各设备自行仲裁

7.4 总线定时 ​

同步定时:

  • 统一时钟信号
  • 简单快速
  • 适合短距离、高速

异步定时:

  • 握手协议
  • 灵活可靠
  • 适合不同速度设备

半同步定时:

  • 结合同步和异步

八、输入输出系统 ​

8.1 I/O方式比较(重点!) ​

方式CPU介入数据传输适用场景
程序查询全程CPU低速设备
程序中断每次传输CPU随机事件
DMA开始和结束DMAC成组数据
通道开始和结束通道处理器复杂I/O

8.2 程序中断方式 ​

中断处理过程:

  1. 中断请求
  2. 中断判优
  3. 中断响应
  4. 保存现场
  5. 执行中断服务程序
  6. 恢复现场
  7. 中断返回

中断分类:

  • 外部中断:I/O设备、定时器
  • 内部中断(异常):溢出、除零、缺页

中断隐指令 ​

  • 不是真正的指令,是硬件自动完成的操作,程序员看不到
  • 包括:①关中断 ②保护断点(PC和PSW)→ 保存到堆栈或特定寄存器
  • ⚠️ 保存通用寄存器 → 不是中断隐指令做的,是中断服务程序做的

中断屏蔽字 ​

  • 每个中断处理程序运行时设置自己的屏蔽字
  • 1 = 屏蔽(禁止该中断打断自己);0 = 不屏蔽
  • 原则:正在处理某个中断时,只能被优先级更高的中断打断
  • 硬件响应优先级是固定的(如L0>L1>L2>L3),但可以通过屏蔽字改变处理优先级

8.3 DMA方式 ​

DMA(Direct Memory Access,直接内存访问):让外设绕过CPU,直接和内存交换数据

没有DMA时:外设→中断→CPU处理→CPU逐字节搬运,全程占用CPU,效率极低

有DMA时:外设→DMA控制器→直接读写内存,搬完通知CPU。核心:绕过CPU,直接搬数据,搬完通知CPU

DMA工作过程:

  1. CPU初始化DMA控制器
  2. DMAC接管总线
  3. DMAC直接在内存和外设之间传输数据
  4. 传输完成后DMAC向CPU发中断

DMA传送方式:

  • 停止CPU访问:CPU停止工作
  • 周期挪用:CPU让出一个总线周期
  • 交替访问:DMA和CPU交替访问

DMA总线:DMA控制器专用的传输通道,与系统总线共享物理线路

8.4 通道方式 ​

通道类型:

  • 选择通道:连接高速设备
  • 数组多路通道:连接多台高速设备
  • 字节多路通道:连接多台低速设备

通道与DMA区别:

  • DMA需要CPU初始化,通道有自己的通道程序
  • 通道可以处理更多I/O细节,进一步减轻CPU负担

8.5 经典例题:I/O 方式性能计算(题9.8) ​

已知条件 ​

参数值
主频500MHz → 时钟周期 = 1/500M = 2ns
CPI4
设备 A 传输速率2MB/s
设备 B 传输速率40MB/s
数据缓冲寄存器32 位(4 字节)

核心公式 ​

CPU占用率 = 每秒花在 I/O 上的时间 ÷ 1 秒 × 100%

三步走:①每秒次数 = 速率÷每次数据量 ②每秒I/O时间 = 每次时间×次数 ③占用率 = 时间÷1秒×100%


第(1)题:定时查询 I/O 方式(设备 A) ​

① 最多间隔多长查询一次?

设备 A 速率 2MB/s,缓冲寄存器 4 字节:

缓冲区存满时间 = 4B ÷ 2MB/s = 2μs

必须在 2μs 内查询一次,否则数据溢出丢失。

② CPU 用于设备 A 的时间占比?

每次查询至少执行 10 条指令:

10 条 × 4 周期/条 = 40 个时钟周期

每次查询耗时 = 40 × 2ns = 80ns

每秒查询次数 = 2MB ÷ 4B = 50 万次

CPU 占用时间 = 50 万 × 80ns = 40ms/s

占比 = 40ms / 1s = 4%


第(2)题:中断 I/O 方式(设备 B) ​

① 每秒中断次数

40MB/s ÷ 4B/次 = 1000 万次/秒

② 每次中断的 CPU 开销

400 周期 × 2ns = 800ns/次

③ CPU 占用

1000 万 × 800ns = 8s/s = 800%

800% >> 100%,CPU 根本扛不住! 所以设备 B 不能用中断 I/O 方式。

核心原因:B 速率太快(40MB/s),但每次只传 4 字节,导致中断太频繁。1 秒里 CPU 要花 8 秒干这事 → 不可能。


第(3)题:DMA 方式(设备 B) ​

① 每秒 DMA 次数

每次传送 1000B,速率 40MB/s:

40MB/s ÷ 1000B = 40000 次/秒

② 每次 DMA 的 CPU 开销

预处理 + 后处理共 500 周期:

500 × 2ns = 1000ns/次

③ CPU 占用

40000 × 1000ns = 40ms/s

占比 = 40ms / 1s = 4% ✅


三种方式对比(设备 B) ​

方式CPU 占用能否使用?
定时查询更高❌
中断 I/O800%❌ 不可能
DMA4%✅ 完全可以

💡 核心结论:高速设备必须用 DMA,中断方式只适合低速设备。DMA 一次传 1000 字节,中断次数直接降了 250 倍(1000万→4万),CPU 就轻松了。


公式速查表 ​

性能指标 ​

公式说明
CPI=∑CPIi×PiCPI = \sum CPI_i \times P_i平均CPI
CPU时间 = \frac{CPI \times IC}{f}CPU执行时间
MIPS=fCPI×106MIPS = \frac{f}{CPI \times 10^6}每秒百万指令
CPU性能 = IPC \times f性能决定因素
CPU占用率 = \frac{每秒I/O时间}{1秒} \times 100\%I/O设备CPU占用率

Cache ​

公式说明
Tavg=H×Tc+(1−H)×TmT_{avg} = H \times T_c + (1-H) \times T_m平均访问时间
H = \frac{命中次数}{总次数}命中率

流水线 ​

公式说明
T=n×Δt+(k−1)×ΔtT = n \times \Delta t + (k-1) \times \Delta t流水线时间
S=n×kn+k−1S = \frac{n \times k}{n + k - 1}加速比
TP=nTTP = \frac{n}{T}吞吐率

浮点数 ​

公式说明
V=(−1)S×1.M×2E−BiasV = (-1)^S \times 1.M \times 2^{E-Bias}IEEE 754
Bias(单精度) = 127偏移量
Bias(双精度) = 1023偏移量

记忆口诀汇总 ​

核心口诀 ​

  1. 冯·诺依曼:存储程序、程序控制、五大部件
  2. 补码:正数不变,负数取反加1
  3. 溢出检测:双符号位异或
  4. Cache:时间局部性、空间局部性
  5. RISC:指令少、长度固定、Load/Store结构
  6. 流水线:IF → ID → EX → MEM → WB
  7. I/O方式:查询→中断→DMA→通道(CPU介入越来越少)

范式判断 ​

  • 直接映射:固定位置,简单快速
  • 全相联映射:任意位置,灵活复杂
  • 组相联映射:折中方案

中断处理 ​

  1. 中断请求
  2. 中断判优
  3. 中断响应
  4. 保存现场
  5. 执行服务程序
  6. 恢复现场
  7. 中断返回

最后更新:2026-06-24 | 整理人:小弟二号

小弟二号打造的知识体系