计算机组成原理¶
考试重点
本文档整理了计算机组成原理课程的核心知识点与重点,涵盖8个章节。
最后更新:2026-05-26 | 整理人:赫尔墨斯(小弟一号)
目录¶
一、计算机系统概述¶
1.1 计算机发展历史¶
| 时代 | 时间 | 核心技术 | 代表 |
|---|---|---|---|
| 第一代 | 1946-1958 | 电子管 | ENIAC |
| 第二代 | 1958-1964 | 晶体管 | - |
| 第三代 | 1964-1971 | 集成电路 | IBM 360 |
| 第四代 | 1971-至今 | 大规模集成电路 | 现代计算机 |
1.2 冯·诺依曼思想(核心!)¶
存储程序:将程序存放在计算机的存储器中
程序控制:按指令地址访问存储器并取出指令,经译码依次产生指令执行所需的控制信号
五大功能部件: - 运算器:完成算术运算、逻辑运算 - 控制器:控制指令的执行 - 主存储器:存放程序及数据 - 输入设备 - 输出设备
💡 记忆要点:冯·诺依曼 = 存储程序 + 程序控制 + 五大部件
1.3 计算机层次结构¶
1.4 性能评价指标¶
非时间指标¶
- 机器字长:CPU一次能处理的二进制位数
- 总线宽度:数据总线一次能传输的位数
- 主存容量:主存能存储的二进制位数
- CPU内核数
时间指标¶
CPI(Clock cycles Per Instruction):
CPU执行时间:
MIPS(Million Instructions Per Second):
MFLOPS(Million Floating-Point Operations Per Second):
💡 关键公式:CPU性能 = IPC × f(频率)
💡 MIPS单位:Mega = 10⁶, Giga = 10⁹, Tera = 10¹², Peta = 10¹⁵, Exa = 10¹⁸
二、数据信息的表示¶
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) - 加减运算统一 - 符号位参与运算
移码(Biased Notation)¶
- 用于浮点数的阶码
- 补码符号位取反
💡 记忆口诀:正数三码相同,负数原码符号不变、反码各位取反、补码取反加1
2.3 定点数表示¶
定点整数:小数点固定在最低位之后
定点小数:小数点固定在符号位之后
表示范围(n位): - 原码:\(-(2^n-1) \sim +(2^n-1)\) - 补码:\(-2^n \sim +(2^n-1)\)
2.4 浮点数表示¶
IEEE 754 标准(重点!)
| 格式 | 符号位 | 阶码 | 尾数 | 总位数 |
|---|---|---|---|---|
| 单精度 | 1位 | 8位 | 23位 | 32位 |
| 双精度 | 1位 | 11位 | 52位 | 64位 |
表示公式: $\(V = (-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
2.5 数据校验¶
奇偶校验¶
- 奇校验:数据位中1的个数 + 校验位 = 奇数
- 偶校验:数据位中1的个数 + 校验位 = 偶数
- 只能检测奇数个错误,不能纠错
海明码(Hamming Code)¶
校验位数量:\(2^r \geq m + r + 1\)(m为数据位数,r为校验位数)
校验位位置:2的幂次方位置(1, 2, 4, 8, ...)
校验规则:每个校验位负责校验特定位置的数据位
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 = C_s \oplus C_1\)(符号位进位与最高数据位进位异或) 2. 双符号位法:\(V = S_1 \oplus S_2\)(两个符号位异或) 3. 变形补码法:两个符号位不同即溢出
3.3 定点乘法¶
原码一位乘法: - 符号位单独处理(异或) - 数值部分用移位加法实现
补码一位乘法(Booth算法): - 符号位参与运算 - 根据相邻两位判断操作
3.4 定点除法¶
原码除法: - 符号位单独处理 - 数值部分用恢复余数法或不恢复余数法
补码除法: - 符号位参与运算 - 加减交替法
3.5 浮点运算¶
浮点加减法步骤: 1. 对阶:小阶向大阶看齐 2. 尾数运算:加减法 3. 规格化:结果规格化 4. 舍入:处理精度 5. 溢出判断:检查阶码
3.6 运算器组成¶
ALU(算术逻辑单元): - 完成算术运算和逻辑运算 - 核心部件:加法器
加法器类型: - 串行进位加法器:简单但慢 - 并行进位加法器:快但复杂 - 分组并行进位加法器:折中方案
四、存储系统¶
4.1 存储器分类¶
| 分类方式 | 类型 | 特点 |
|---|---|---|
| 存储介质 | 半导体/磁/光 | 速度/容量/成本 |
| 存取方式 | 随机/顺序/直接 | 访问特性 |
| 读写功能 | ROM/RAM | 可写性 |
| 易失性 | 易失/非易失 | 断电保持 |
4.2 SRAM vs DRAM¶
| 特性 | SRAM | DRAM |
|---|---|---|
| 存储元件 | 触发器 | 电容 |
| 速度 | 快(<1ns) | 慢(10ns) |
| 集成度 | 低 | 高 |
| 功耗 | 高 | 低 |
| 刷新 | 不需要 | 需要 |
| 用途 | Cache | 主存 |
4.3 存储系统层次结构¶
4.4 主存组织¶
存储扩展: - 位扩展:增加字长(数据位数) - 字扩展:增加字数(地址空间) - 字位同时扩展:两者都增加
地址计算: - 芯片数 = 总容量 / 单片容量 - 地址线数 = log₂(字数) - 数据线数 = 字长
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{命中次数}{总访问次数}\)
平均访问时间: $\(T_{avg} = H \times T_{cache} + (1-H) \times T_{main}\)$
带多级Cache: $\(T_{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¶
| 特性 | CISC | RISC |
|---|---|---|
| 指令数量 | 多 | 少 |
| 指令长度 | 可变 | 固定 |
| 寻址方式 | 复杂 | 简单 |
| 访存次数 | 多 | 少(Load/Store) |
| 流水线 | 难优化 | 易优化 |
| 代表 | x86 | MIPS, ARM, RISC-V |
💡 RISC特点:指令少、长度固定、寻址简单、Load/Store结构
六、中央处理器¶
6.1 CPU组成¶
运算器:ALU、寄存器组、状态寄存器
控制器:PC、IR、时序发生器、操作控制器
主要寄存器: - PC(程序计数器):存放下一条指令地址 - IR(指令寄存器):存放当前指令 - MAR(地址寄存器):存放访存地址 - MDR(数据寄存器):存放访存数据 - PSW(程序状态字):存放程序状态
6.2 指令周期¶
指令周期组成:
时序层次: - 时钟周期(节拍):最小时间单位 - 机器周期(CPU周期):完成一次访存操作 - 指令周期:取指+执行
6.3 控制器类型¶
硬布线控制器¶
- 用组合逻辑电路产生控制信号
- 速度快,但设计复杂,不灵活
微程序控制器¶
- 用微指令产生控制信号
- 灵活,易于修改,但速度较慢
微指令格式: - 水平型微指令:并行操作,效率高 - 垂直型微指令:串行操作,类似机器指令
6.4 流水线(重点!)¶
流水线原理:将指令执行过程分成多个阶段,各阶段并行执行
流水线阶段: 1. IF(取指) 2. ID(译码) 3. EX(执行) 4. MEM(访存) 5. WB(写回)
流水线性能:
理想情况: $\(T_{pipeline} = n \times \Delta t + (k-1) \times \Delta t\)$
其中:n为指令数,k为流水线级数,Δt为时钟周期
加速比: $\(S = \frac{T_{sequential}}{T_{pipeline}} = \frac{n \times k}{n + k - 1}\)$
吞吐率: $\(TP = \frac{n}{T_{pipeline}} = \frac{1}{\Delta t}\)$
流水线冲突: 1. 结构冲突:硬件资源冲突 2. 数据冲突:数据依赖 3. 控制冲突:分支指令
数据冲突解决: - 数据旁路(Forwarding):直接传递结果 - 插入气泡(Stall):等待数据就绪 - 编译器调度:重排指令顺序
七、系统总线¶
7.1 总线分类¶
| 分类方式 | 类型 |
|---|---|
| 传输方式 | 并行/串行 |
| 传输方向 | 单向/双向 |
| 时序控制 | 同步/异步 |
| 连接部件 | 片内/系统/外部/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设备、定时器 - 内部中断(异常):溢出、除零、缺页
8.3 DMA方式¶
DMA工作过程: 1. CPU初始化DMA控制器 2. DMAC接管总线 3. DMAC直接在内存和外设之间传输数据 4. 传输完成后DMAC向CPU发中断
DMA传送方式: - 停止CPU访问:CPU停止工作 - 周期挪用:CPU让出一个总线周期 - 交替访问:DMA和CPU交替访问
8.4 通道方式¶
通道类型: - 选择通道:连接高速设备 - 数组多路通道:连接多台高速设备 - 字节多路通道:连接多台低速设备
通道与DMA区别: - DMA需要CPU初始化,通道有自己的通道程序 - 通道可以处理更多I/O细节,进一步减轻CPU负担
公式速查表¶
性能指标¶
| 公式 | 说明 |
|---|---|
| \(CPI = \sum CPI_i \times P_i\) | 平均CPI |
| \(CPU时间 = \frac{CPI \times IC}{f}\) | CPU执行时间 |
| \(MIPS = \frac{f}{CPI \times 10^6}\) | 每秒百万指令 |
| \(CPU性能 = IPC \times f\) | 性能决定因素 |
Cache¶
| 公式 | 说明 |
|---|---|
| \(T_{avg} = H \times T_c + (1-H) \times T_m\) | 平均访问时间 |
| \(H = \frac{命中次数}{总次数}\) | 命中率 |
流水线¶
| 公式 | 说明 |
|---|---|
| \(T = n \times \Delta t + (k-1) \times \Delta t\) | 流水线时间 |
| \(S = \frac{n \times k}{n + k - 1}\) | 加速比 |
| \(TP = \frac{n}{T}\) | 吞吐率 |
浮点数¶
| 公式 | 说明 |
|---|---|
| \(V = (-1)^S \times 1.M \times 2^{E-Bias}\) | IEEE 754 |
| Bias(单精度) = 127 | 偏移量 |
| Bias(双精度) = 1023 | 偏移量 |
记忆口诀汇总¶
核心口诀¶
- 冯·诺依曼:存储程序、程序控制、五大部件
- 补码:正数不变,负数取反加1
- 溢出检测:双符号位异或
- Cache:时间局部性、空间局部性
- RISC:指令少、长度固定、Load/Store结构
- 流水线:IF → ID → EX → MEM → WB
- I/O方式:查询→中断→DMA→通道(CPU介入越来越少)
范式判断¶
- 直接映射:固定位置,简单快速
- 全相联映射:任意位置,灵活复杂
- 组相联映射:折中方案
中断处理¶
- 中断请求
- 中断判优
- 中断响应
- 保存现场
- 执行服务程序
- 恢复现场
- 中断返回
最后更新:2026-05-26 | 整理人:赫尔墨斯(小弟一号)