教材: 袁春风《计算机系统原理》(2023年版)
考试时间: 预计2026年4月
| 部件 | 作用 |
|---|---|
| 主存储器(Memory) | 存放指令和数据的临时存储单元 |
| 算术逻辑部件(ALU) | 在ALUop控制下,对输入端A和B进行运算,得到结果F |
| 控制部件(CU) | 自动逐条取出指令并进行译码 |
| 通用寄存器组(GPRs) | 临时存放操作数和运算结果 |
| IR (指令寄存器) | 存放从主存取来的指令 |
| PC (程序计数器) | 存放下一条指令地址 |
| MAR (地址寄存器) | 存放访问的主存地址 |
| MDR (数据寄存器) | 存放访问的数据 |
| 层次 | 说明 |
|---|---|
| 应用语言机器级 | 高 |
| 高级语言机器级 | |
| 汇编语言机器级 | |
| 操作系统级 | 软件/硬件接口 |
| 机器语言机器级 | ISA定义 |
| 微程序机器级 | 硬件 |
用户CPU时间 = 程序总时钟周期数 ÷ 时钟频率
= 指令数 × CPI × 时钟周期
程序总时钟周期数 = Σ(CPIi × Ci)
综合CPI = Σ(CPIi × Fi)
MIPS = 主频 / CPI
某程序指令条数10^8条,CPI=1.25,时钟频率4GHz,求执行时间?
解:时钟周期 = 1/4GHz = 0.25ns
总周期数 = 10^8 × 1.25 = 1.25×10^8
执行时间 = 0.3125s
⚠️ 注意:指令条数少不代表执行时间短,时钟频率高也不说明执行速度快!
| 码制 | 定义 | +0 | -0 | 8位表示范围 |
|---|---|---|---|---|
| 原码 | 最高位符号位,0正1负 | 00000000 | 10000000 | -(2^7-1)~+(2^7-1) |
| 反码 | 正数同原码;负数数值位取反 | 00000000 | 11111111 | -(2^7-1)~+(2^7-1) |
| 补码 | 正数同原码;负数反码+1 | 00000000 | 无 | -2^7~+(2^7-1) |
用8位补码计算:52 - 37
解:52原码 = 00110100
-37补码 = 11011011
相加:00110100 + 11011011 = 100001111
溢出位丢弃,结果 = 00001111 = 15 ✓
N = M × R^E
| 字段 | 位数 | 说明 |
|---|---|---|
| 符号位S | 1位 | 0正1负 |
| 阶码E | 8位 | 移码表示,偏置量127 |
| 尾数M | 23位 | 隐藏最高位1(规格化) |
(-1)^S × 1.M × 2^(E-127)
将-8.25表示为IEEE 754单精度
解:-8.25二进制 = -1000.01
规格化:-1.00001 × 2³
S=1, E=3+127=130(10000010), M=00001
结果:1 10000010 00001000000000000000000
IEEE 754表示为 1 10000010 00001000000000000000000,求真值
解:S=1(负数)
E=10000010 = 130
尾数值 = 1.00001
真值 = -1.00001 × 2^(130-127) = -1.00001 × 8 = -8.25
| 指令类型 | 示例 |
|---|---|
| 数据传送 | mov、load、store |
| 算术运算 | add、sub、mul、div |
| 逻辑运算 | and、or、xor、not |
| 程序控制 | jmp、jz、call、ret |
| 寻址方式 | 说明 | 例题 |
|---|---|---|
| 立即寻址 | 操作数在指令中 | mov r0, #100 |
| 直接寻址 | 指令给出主存地址 | mov r0, [100] |
| 间接寻址 | 地址所在单元存操作数地址 | mov r0, [@ptr] |
| 寄存器寻址 | 操作数在寄存器中 | mov r0, r1 |
| 寄存器间接寻址 | 寄存器存主存地址 | mov r0, [r1] |
| 相对寻址 | PC + 偏移量 | jmp offset |
| 变址寻址 | 变址寄存器 + 偏移量 | - |
R型指令:[op | rs | rt] 例:0000 0001(mov r0, r1)
M型指令:[op | addr] 例:1110 0110(load r0, [6])
op操作码:
0000 mov 0001 add 0010 sub 0011 mul
1110 load 1111 store
取指令 → 译码 → PC增量 → 取操作数并执行 → 送结果
x在5#单元,y在6#单元,z存7#单元
指令 操作 load r0, [6] R[0] ← M[6],取y mov r1, r0 R[1] ← R[0],暂存y load r0, [5] R[0] ← M[5],取x add r0, r1 R[0] ← R[0] + R[1],x+y store [7], r0 M[7] ← R[0],存z
| 类型 | 作用 | 输入 | 输出 |
|---|---|---|---|
| 预处理器 | 处理#开头的命令 | 源程序(.i) | 源程序(.i) |
| 编译器 | 翻译成汇编语言 | 源程序(.i) | 汇编程序(.s) |
| 汇编器 | 翻译成机器语言 | 汇编程序(.s) | 可重定位目标文件(.o) |
| 链接器 | 合并生成可执行文件 | 多个.o文件 | 可执行文件 |
ELF(Executable and Linkable Format)结构:
| 节 | 作用 |
|---|---|
| ELF头 | 文件类型、入口地址、程序头偏移 |
| .text | 代码段(机器指令) |
| .data | 已初始化数据段 |
| .bss | 未初始化数据段 |
| .symtab | 符号表 |
| .rel | 重定位信息 |
| .strtab | 字符串表 |
进程映像:代码段、数据段、堆、栈
链接与加载是高频考点! - 四种翻译程序的作用和输出 - ELF文件各节的作用 - 符号解析过程 - 重定位的概念和类型
| 类型 | 存储原理 | 特点 | 用途 |
|---|---|---|---|
| SRAM | 双稳态触发器 | 速度快、成本高、功耗大 | Cache |
| DRAM | 电容存储电荷 | 速度慢、成本低、需刷新 | 主存 |
刷新方式:集中刷新、分散刷新、异步刷新
容量 = 地址线位数 × 数据线位数 / 8
例:16位数据线,20位地址线
容量 = 2^20 × 16bit = 16Mbit = 2MB
命中率 = Cache命中次数 / 总访问次数
缺失率 = 1 - 命中率
| 方式 | 特点 | 优缺点 |
|---|---|---|
| 直接映像 | 主存块固定对应Cache槽 | 简单但冲突率高 |
| 全相联映像 | 主存块可放任意Cache槽 | 灵活但比较器复杂 |
| 组相联映像 | 组内全相联,组间直接 | 折中方案 |
直接映像Cache,容量16KB,块大小16B,主存地址32位
块内地址位数:log2(16B) = 4位
Cache块数:16KB / 16B = 1024 = 2^10
主存地址格式:[Tag | Index | Offset]
Index = 10位,Offset = 4位
Tag = 32 - 10 - 4 = 18位
页大小4KB,逻辑地址空间4GB
虚拟地址位数:log2(4GB) = 32位
页内偏移位数:log2(4KB) = 12位
虚拟页号:32 - 12 = 20位
页表项数:2^20 项
若每项4字节,页表大小:4MB
| 类型 | 作用 |
|---|---|
| 数据端口 | 存放数据 |
| 状态端口 | 反映设备状态 |
| 控制端口 | 存放控制命令 |
1. 中断请求:设备向CPU发送中断请求信号
2. 中断判优:当多个中断同时发生时,选择优先级最高者
3. 中断响应:CPU保护现场(PC、PSW等),转向中断服务程序
4. 中断服务:执行中断处理程序
5. 中断返回:恢复现场,返回断点继续执行
1. CPU初始化DMA控制器(设置传送参数)
2. DMA请求总线控制权
3. DMA直接与主存交换数据
4. 传送完毕,DMA释放总线
5. CPU恢复控制权
| 方式 | CPU介入 | 数据单位 | 适用场景 |
|---|---|---|---|
| 程序查询 | 全程参与 | 字节/字 | 低速设备 |
| 中断方式 | 初始化和结尾处理 | 字节/字 | 中速设备 |
| DMA方式 | 仅初始化和结束 | 数据块 | 高速设备 |
| 通道方式 | 基本不参与 | 数据块 | 大型设备 |
用8位补码计算:52 - 37
解:52原码 = 00110100
-37补码 = 11011011
相加:00110100 + 11011011 = 100001111
溢出位丢弃,结果 = 00001111 = 15 ✓
IEEE 754表示为 1 10000010 00001000000000000000000,求真值
解:S=1(负数)
E=10000010 = 130
尾数值 = 1.00001
真值 = -1.00001 × 2^(130-127) = -8.25
直接映像Cache,容量8KB,块大小32B,32位地址
解:块内偏移:log2(32B) = 5位
Cache块数:8KB / 32B = 256 = 2^8
Cache索引:8位
Tag位数:32 - 8 - 5 = 19位
页大小4KB,页表项4字节,逻辑地址0x0035A028
解:页内偏移:低12位 = 0xA028
虚拟页号:0x0035A028 >> 12 = 0x0035A
物理地址 = 页框号 × 页大小 + 页内偏移
程序P含3类指令,比例43%:21%:12%:24%,CPI分别为1、2、2、2。优化后A类指令减少50%。求优化前后CPI和MIPS(50MHz)
解:优化前CPI = 0.43×1 + 0.21×2 + 0.12×2 + 0.24×2 = 1.57
优化后:A减少50%,归一化后CPI = 1.726
MIPS优化前 = 50/1.57 ≈ 31.85
MIPS优化后 = 50/1.726 ≈ 28.97
某硬盘用DMA传输4KB数据,说明DMA工作过程
解: 1. CPU设置DMA参数(源地址、目的地址、传输长度) 2. DMA控制器获得总线控制权 3. DMA从源地址读取数据,写入目的地址 4. 每传输一个字,地址加1,计数减1 5. 传输完成后,DMA释放总线,发送中断通知CPU
说明链接器处理多个.o文件的主要步骤
解: 1. 符号解析:将所有符号引用与定义配对 2. 重定位:合并所有节,调整符号引用地址 3. 分配地址:为每个符号分配最终运行地址 4. 修改引用:更新所有重定位入口的地址
| 章节 | 重点内容 |
|---|---|
| 第一章 | 冯·诺依曼结构、CPI/CPU时间计算、MIPS计算 |
| 第二章 | 原码/补码/反码、IEEE 754格式、溢出判断 |
| 第三章 | 七种寻址方式、指令执行过程、模型机指令 |
| 第四章 | 翻译过程(预处理/编译/汇编/链接)、ELF格式、符号解析与重定位 ⭐⭐ |
| 第五章 | SRAM/DRAM区别、Cache三种映像方式、LRU算法、虚拟地址转换 |
| 第六章 | 程序查询/中断/DMA区别、DMA工作过程、中断处理流程 |
1. 补码范围(n位):-2^(n-1) ~ +2^(n-1)-1
2. CPU时间 = 指令数 × CPI × 时钟周期
3. MIPS = 主频 / CPI
4. Cache地址格式:Tag | Index | Offset
5. 页表大小 = 虚拟页数 × 页表项大小
6. 物理地址 = 页框号 × 页大小 + 页内偏移
祝考试顺利!🍀