计算机组成原理 · 核心算法与公式速查
各章关键算法、公式和判定条件的集中整理。
第1章 计算机系统概述
性能公式
CPU 时间 = 指令数 × CPI × 时钟周期时间
= 指令数 × CPI / 主频
MIPS = 指令数 / (执行时间 × 10⁶)
= 主频 / (CPI × 10⁶)
MFLOPS = 浮点运算次数 / (执行时间 × 10⁶)
时钟周期 = 1 / 主频
CPI = 总时钟周期数 / 指令总数
IPC = 1 / CPI
Flynn 分类法
SISD: 单指令流单数据流(传统单机)
SIMD: 单指令流多数据流(向量机)
MISD: 多指令流单数据流(少见)
MIMD: 多指令流多数据流(多处理器)
第2章 计算机的逻辑部件
三态电路
三态:0态、1态、高阻态Z
G=0 → Y=A(正常态),G=1 → Y=Z(高阻态)
加法器
半加器:H_i = X_i ⊕ Y_i
全加器:F_i = X_i ⊕ Y_i ⊕ C_{i-1}
C_i = X_iY_i + (X_i + Y_i)C_{i-1}
超前进位
进位传递函数 P_i = X_i + Y_i
进位产生函数 G_i = X_i · Y_i
C_i = G_i + P_i · C_{i-1}
4位超前进位:
C_1 = G_0 + P_0·C_0
C_2 = G_1 + P_1·G_0 + P_1·P_0·C_0
C_3 = G_2 + P_2·G_1 + P_2·P_1·G_0 + P_2·P_1·P_0·C_0
C_4 = G_3 + P_3·G_2 + P_3·P_2·G_1 + P_3·P_2·P_1·G_0 + P_3·P_2·P_1·P_0·C_0
组进位产生函数 G* = G_3 + P_3G_2 + P_2P_3G_1 + P_0P_1P_2P_3G_0
组进位传递函数 P* = P_0P_1P_2P_3
第3章 运算方法和运算部件
补码表示
正数补码 = 原码
负数补码 = 反码 + 1
补码 = 模 - |负数|(模的概念)
移码 = 补码符号位取反
定点小数(n+1位)
补码范围: -1 ~ +(1 - 2^(-n))
原码范围: -(1 - 2^(-n)) ~ +(1 - 2^(-n))
最小正数: 2^(-n)
模 = 2
定点整数(n+1位)
补码范围: -2^n ~ +(2^n - 1)
原码范围: -(2^n - 1) ~ +(2^n - 1)
模 = 2^(n+1)
IEEE 754 单精度
数 = (-1)^S × (1 + M) × 2^(E - 127)
S: 符号位(1位)
E: 阶码(8位,偏置127)
M: 尾数(23位)
特殊值:
全0阶+全0尾 → ±0
全1阶+全0尾 → ±∞
全1阶+非0尾 → NaN
浮点数表示范围(补码,n+1位尾数,k+1位阶码)
最大正数 = (1 - 2^(-n)) × 2^(2^k - 1)
最小正数 = 2^(-n) × 2^(-2^k)
绝对值最大负数 = (-1) × 2^(2^k - 1)
溢出判断
双符号位法:
S1S2 = 00 → 正数,无溢出
S1S2 = 11 → 负数,无溢出
S1S2 = 01 → 正溢出
S1S2 = 10 → 负溢出
溢出 = S1 ⊕ S2
移位规则
负数补码左移: 补0
负数补码右移: 补1
负数反码移位: 补1
原码移位: 补0
符号扩展
正数: 附加高位全填0
负数原码: 附加高位填0,符号位保持1
负数补码: 附加高位全填1
补码一位乘法(Booth 算法)
yn yn+1 操作
00 右移一位
01 加 [X]补,右移一位
10 加 [-X]补,右移一位
11 右移一位
重复 n+1 次,最后一步不移位
原码两位乘法
Yi-1 Yi 操作
00 +0,右移两位
01 +|X|,右移两位
10 +2|X|,右移两位
11 +3|X| → 执行 -|X|,欠帐 +4X 用 C 记录
不恢复余数法
第一步: 余 = 被除数 - 除数(余为正→溢出终止)
之后每步:
余 ≥ 0: 商1, 余左移后减除数
余 < 0: 商0, 余左移后加除数
重复 n 次,最后余数 × 2^(-n) 为真正余数
全加器与先行进位
Si = Ai ⊕ Bi ⊕ Ci-1
Ci = AiBi + Ci-1(Ai ⊕ Bi)
Gi = AiBi (进位生成)
Pi = Ai ⊕ Bi (进位传递)
Ci = Gi + PiCi-1
海明校验
2^r ≥ k + r + 1
k = 数据位数,r = 校验位数
校验位 Pi 在位号 2^(i-1) 的位置
S1~S5 检错:
全0 → 无错
一位不为0 → 校验位错
两位不为0 → 两位错
三位不为0 → 数据位错,S4~S1 指明出错位
CRC 校验
CRC 编码 = 数据字 + 余数
余数 = (M(x) × X^r) mod G(x)
循环纠错:
余数=0 → 无错
余数=101 → 左起第1位错
余数非0非101 → 继续除,除n-1次得101 → 左起第n位错
第4章 主存储器
SRAM 与 DRAM
SRAM:6 管触发器 / 位,不需刷新,~1ns,地址一次送入,用于 Cache
DRAM:1T1C / 位,需 64ms 内刷新,~50ns,地址分两次接收(行列复用),用于主存
DRAM 刷新
刷新周期 = 64ms
集中刷新: 连续完成所有行,有死区
分散刷新: 穿插在读/写周期中,无死区延存取周期
异步刷新: 定时刷新一行,折中
ROM 分类
非易失性存储器(断电保留)
掩模 ROM: 出厂固化,成本最低
PROM: 用户一次性烧写(熔丝)
EPROM: 紫外线擦除,可重写
EEPROM: 电擦除,字节级修改
Flash: 电擦除,块级操作,密度高
Cache 平均访问时间
Ta = h × Tc + (1-h) × Tm
h = 命中率, Tc = Cache 访问时间, Tm = 主存访问时间
访问效率 e = 1 / (h + (1-h) × r), r = Tm/Tc
第5章 指令系统
指令格式
三地址: OP A1 A2 A3
二地址: OP A1 A2
一地址: OP A1
零地址: OP
操作数位置类型
SS 型: 两个操作数都在主存
RR 型: 两个操作数都在寄存器
RS 型: 一个在寄存器,一个在主存
寻址方式有效地址
立即寻址: 操作数 = A
直接寻址: EA = A
间接寻址: EA = (A)
寄存器寻址: EA = Ri
寄存器间接: EA = (Ri)
基址寻址: EA = (BR) + A
变址寻址: EA = (IX) + A
相对寻址: EA = (PC) + A
堆栈寻址: EA = SP
第6章 中央处理器
时序关系
1 指令周期 = 若干机器周期
1 机器周期 = 若干时钟周期
1 时钟周期 = 1 / 主频
微指令编码方式
直接控制: 1 位/微操作 → 并行度高,字长长
字段直接编码: 分字段编码 → 字长短,需译码
字段间接编码: 字段间有依赖 → 字长更短,控制复杂
后继微地址
计数器方式: μPC+1(顺序),BAF→μPC(转移)
断定方式: 微指令中下址字段直接指定
BCF 编码:
000 顺序 (μPC+1)
001 操作码产生
010 无条件转移
011 条件转移
100 测试循环
101 转子程序
110 返回
流水线
5级流水线: IF → ID → EX → MEM → WB
冒险类型: 结构冒险、数据冒险、控制冒险
解决方法: 转发、插入气泡、分支预测
第7章 存储系统
Cache 地址映射
直接映射: i = j mod m(i行号,j主存块号,m总行数)
主存地址: [标记(s-r)] [行号(r)] [块内(w)]
全相联映射: 任意块→任意行
主存地址: [标记(s)] [块内(w)]
组相联映射: 组内全相联,组间直接映射
主存地址: [标记(s-d)] [组号(d)] [块内(w)]
Cache 替换算法
随机法: 随机选择一行替换
FIFO: 最先进入的行被替换
LRU: 最久未使用的行被替换(命中率最高)
LFU: 使用次数最少的行被替换
虚拟存储器
虚存地址: [逻辑页号] [页内行地址]
实存地址: [物理页号] [页内行地址]
地址转换: 通过页表完成逻辑页号 → 物理页号映射
第8章 辅助存储器
磁记录方式
RZ(归零制): 正脉冲=1,负脉冲=0,位间电流为0
NRZ(不归零制): 始终有电流,连续1/0时不改变方向
NRZ1(见1就翻): 遇1翻转方向,遇0不变
PM(调相制): 利用相位差180°代表0和1
FM(调频制): 1在中心翻转且位间翻转,0仅位间翻转
MFM(改进调频): 1在中心翻转,连续0时起始翻转
磁盘技术指标
存储容量 = 记录面数 × 每面磁道数 × 每道扇区数 × 每扇区字节数
平均寻址时间 = 平均找道时间 + 平均等待时间
数据传输率 = 记录密度 × 介质运动速度
RAID 级别
RAID 0: 无冗余分块,性能最高
RAID 1: 镜像,安全高,空间利用率50%
RAID 5: 分布校验,无专用校验盘
RAID 6: 两种奇偶校验,可坏两块盘
RAID 10: RAID 0+1,性能和安全性兼备
第9章 输入输出设备
ASCII 码
7位表示128个字符
数字0-9: 30H~39H(高3位011,低4位0000~1001)
大写A-Z: 41H~5AH
小写a-z: 61H~7AH
大小写仅b5一位不同
显示器参数
分辨率: 像素个数(如1920×1080)
灰度级: 亮暗差别(8位=256级)
帧存储器容量 = 分辨率 × 灰度级位数
刷新频率: >30次/秒不闪
第10章 输入输出系统
中断处理流程
中断请求 → 中断响应 → 中断隐指令(关中断、保存断点、转向入口)
→ 中断服务程序(保存现场→处理→恢复现场)
→ 开中断 → IRET 返回
中断响应条件
1. 至少有一个中断请求
2. CPU 允许中断(IF=1)
3. 当前指令执行完毕
DMA 传送方式
CPU 暂停方式: DMA 占用总线直到完成
周期挪用方式: 窃取空闲总线周期
直接访问方式: DMA 优先级高于 CPU 时才占用总线
DMA 控制器寄存器
DMAR: DMA 地址寄存器(主存地址)
ADR: 外设地址寄存器
WCR: 字计数器(传送字数)
CSR: 控制/状态寄存器
DBR: 数据缓冲寄存器