计算机组成原理(CO)

一、计算机系统概述

我的记录

1
2
3
//机器字长通常和整数计算的存储器相关
//冯·诺依曼五大部件里的存储器特指主存(直接和 CPU 总线连接、按地址被指令访问),
//磁盘 / 光盘 / U 盘从硬件结构上通过 I/O 接口接入,属于外设范畴,归入"输入输出设备"的延伸。

补充内容

冯·诺依曼计算机的五大部件是运算器、控制器、存储器、输入设备和输出设备。现代 CPU 通常包含运算器和控制器,并通过总线与主存及 I/O 接口交换信息。

机器字长通常指 CPU 一次能处理的二进制数据位数,常与通用寄存器、ALU 和数据通路宽度相关。

CPU 执行时间:

1
2
CPU 执行时间 = 指令条数 × CPI × 时钟周期
= 指令条数 × CPI ÷ 主频

主频高不代表程序一定更快,还要同时考虑指令条数和 CPI。MIPS 也不适合直接比较指令系统不同的机器。

二、数据的表示与运算

2.1 进制转换、补码与移码

我的记录

1
2
3
4
//除基取余法从下到上。乘基取余法从上到下
//求变补码,3的补码按位取反,末位加1,得到-3的补码(最小值求不了)
//求移码,2的n次方加上x。(-7的移码等于8+(-7)=1=0001)(适用于IEEE754,要注意偏移值的大小)
//长变短,高位截断。短变长,原数字无符号则零扩展,有符号则符号扩展

补充内容

  • 整数部分转换:除基取余,所得余数逆序排列。
  • 小数部分转换:乘基取整,所得整数顺序排列。
  • n 位补码的表示范围为 -2^(n-1) ~ 2^(n-1)-1
  • 固定字长补码的最小负数取负会溢出,因为对应的正数超出最大正数范围。
  • 一般移码可理解为真值加偏置值;IEEE 754 单精度偏置为 127,双精度偏置为 1023。
  • 扩展前后必须明确源数据是否按有符号数解释。截断后数值可能改变。

2.2 溢出与标志位

我的记录

1
2
//补码溢出判断:(1)正正得负,负负得正 (2)最高位和次高位进位不相同 (3)双符号位:01正溢出,10负溢出
//ZF,SF,CF(无符号,sub异或cout),OF(有符号,Cn异或Cn-1)

补充内容

标志位 含义 常见用途
ZF 结果是否为 0 相等判断
SF 结果最高位 反映结果符号位
CF 最高有效位的进位/借位 无符号运算
OF 有符号运算是否溢出 有符号运算

有符号数大小判断不能只看 SF;在未发生相等时,通常需要结合 SF XOR OF。CF 与 OF 分别服务于无符号数和有符号数,它们可能不同。

2.3 IEEE 754 浮点数

我的记录

1
2
3
4
5
6
7
8
9
10
11
//IEEE754  1 8 23(32) 1 11 52(64)小数点前隐藏一个1
//阶码的真值加127之后,转为二进制数,即为对应的移码
/*
符号 阶码 尾数
0/1 0 0 正负0
0/1 255 0 正负无穷
0/1 255 非0 NaN
0/1 0 f 非规格化正负数 ±(0.f)*2的-126次方
*/
// 对阶(小对大),尾数加减,尾数规格化,舍入(0舍1入,恒1)
// 大小端,大同小异。对齐,struct的长度为最大对齐值的整数倍

补充内容

格式 符号位 阶码位 尾数字段 偏置
单精度 1 8 23 127
双精度 1 11 52 1023

规格化数的值为 (-1)^S × 1.F × 2^(E-bias);非规格化数没有隐藏的最高位 1,实际阶为 1-bias。浮点加减通常经历对阶、尾数运算、规格化、舍入和溢出判断。

大端方式把多字节数据的最高有效字节放在低地址;小端方式把最低有效字节放在低地址。结构体大小通常还要满足末尾补齐,但具体对齐受 ABI、成员类型和编译选项影响。

三、存储系统

3.1 存储器分类

我的记录

1
2
3
4
5
6
//RAM 断电存储信息消失(随机存取)
//ROM (BIOS放在里面)MROM(厂商直接写入),PROM(一次性的编程),EPROM(多次改写,但次数有限),Flash(U盘),SSD(控制单元与存储单元)
//SAM(顺序)磁带
//DAM 磁盘,光盘
//DRAM 电容存储,破坏读出需再生,需刷新,行列地址可复用(通常用于主存)
//SRAM 非破坏性读出,更快(cache,TLB)

补充内容

“随机存取”表示按地址访问任意单元的时间基本相同,并不是随机读取数据。SRAM 通常用触发器存储,速度快、成本高、集成度低;DRAM 用电容存储,需刷新,通常用于主存。

对比项 SRAM DRAM
是否刷新 不需要 需要
读出 非破坏性 破坏性,需要再生
速度 较慢
集成度 较低 较高
典型用途 Cache 主存

3.2 磁盘、SSD 与 RAID

我的记录

1
2
3
4
//磁盘的存取时间 = 寻道时间 + 旋转时间 + 传输时间
//(磁盘组号),柱面号,盘面号,扇区号。磁头移动更耗时间
// RAID1用镜像冗余的方法,加备份。RAID2用海明校验。RAID3用奇偶校验。RAID4用奇偶校验,但条带单元更大。RAID5循环方式放校验方式
//固态硬盘读写以页为单位读取,以块为单位擦除。 (页包含于块之中)

补充内容

  • 平均旋转等待时间通常约为磁盘旋转一周时间的一半。
  • SSD 写入前可能需要擦除,控制器通过磨损均衡、垃圾回收和地址映射管理闪存。
  • RAID 0 只做条带化,没有冗余;RAID 1 使用镜像;RAID 5 将分布式奇偶校验信息轮流存放在各磁盘上。

3.3 Cache

我的记录

1
2
3
4
5
6
7
8
//访问时间,cache命中就是访问cache ,cache不命中就是访问主存,访问cache
//如果是同时启动(同时访问cache和主存)p*Tc+(1-p)*Tm
//先后启动就是p*Tc+(1-p)*(Tc+Tm)
//准备地址传输地址(一个总线周期),准备数据传输数据(一个存取周期,一总线周期)
//命中---直/全写法:写中就直接写cache和主存。写回法:写进cache,当cache被替换时,才写会主存
//未命中---写分配:写主存之后调入cache,非写分配:写入组存后不调入cache。
//直写法和非写分配搭配,写回法和写分配法搭配。
//8路组相联就是每组有8块,比较器比较tag位

补充内容

Cache 地址通常划分为标记 Tag、组号/索引 Index 和块内偏移 Offset。若块大小为 2^b 字节,则块内偏移占 b 位;若共有 2^s 组,则组号占 s 位。

  • 直接映射:每个主存块只能进入一个固定 Cache 行。
  • 全相联:主存块可以进入任意 Cache 行。
  • 组相联:先确定组,再放入该组任意一路。
  • 写回法需要脏位;有效位表示 Cache 行中的内容是否有效。
写策略 行为
写直达 写命中时同时更新 Cache 和主存
写回 写命中时只改 Cache,替换脏块时写回主存
写分配 写不命中时把主存块调入 Cache 后再写
非写分配 写不命中时直接更新下一级存储器

平均访问时间公式必须先看题目对 Tm 的定义,以及 Cache 和主存是同时启动还是先后启动;不要脱离题设机械套用。

3.4 TLB、页表与 MMU

我的记录

1
2
3
4
//TLB缺失,Page缺失,cache缺失。TLB命中与否和Cache命中与否没关系,Page不命中,Cache和TLB都不可能命中。
//cache缺失由硬件处理,缺页异常是软件处理,TLB都可以.
//TLB采用的虚拟地址
//MMU,内存管理单元,VA转位PA

补充内容

MMU 负责地址转换。虚拟地址通常分为虚拟页号和页内偏移;页内偏移在地址转换前后不变。TLB 缓存近期使用的页表项,通常使用虚拟页号查询,并给出物理页框号。

典型流程:

  1. 用虚拟页号查询 TLB。
  2. TLB 命中时直接得到物理页框号。
  3. TLB 未命中时查询内存中的页表。
  4. 页表项有效则回填 TLB;页不在内存则触发缺页异常。
  5. 得到物理地址后再访问物理寻址的 Cache 或主存。
事件 常见处理者
Cache 缺失 硬件
TLB 缺失、页表命中 硬件或软硬件协同,取决于体系结构
缺页异常 操作系统
页面置换 操作系统

四、指令系统

我的记录

1
2
3
4
5
6
7
8
9
10
11
12
//立即寻址 A为操作数
//直接寻址 EA = A (EA为有效数)
//间接寻址 EA = (A)
//寄存器寻址 EA = Ri
//寄存器间接寻址 EA = (Ri)
//相对寻址 EA = (PC)+A
//基址寻址 EA = (BR)+A
//变址寻址 EA = (IX)+A
// mov EAX,EBX:把EBX的内容移动到EAX中
// sub ECX,EDX:ECX-EDX的值存回ECX
//CISC 比较大,指令多,通过微程序控制
//RISC 指令简短,只能通过LOAD/STORE指令访存,寄存器多(MIPS),组合逻辑控制

补充内容

寻址方式 含义/有效地址
立即寻址 地址字段本身是操作数
直接寻址 EA=A
间接寻址 EA=(A)
寄存器寻址 操作数位于寄存器中
寄存器间接寻址 EA=(Ri)
相对寻址 EA=(PC)+A
基址寻址 EA=(BR)+A
变址寻址 EA=(IX)+A

基址寻址常用于程序重定位和存储保护,基址寄存器通常由系统管理;变址寻址常用于数组和循环,变址寄存器通常由程序修改。

对比项 CISC RISC
指令数量 较多 较少
指令长度 常为变长 常为定长
访存方式 多种指令可访存 通常 Load/Store 访存
寄存器 相对较少 通常较多
控制方式 常见微程序控制 常见硬布线控制
流水线 相对复杂 更便于流水化

五、CPU、流水线、总线与 I/O

CPU 与指令周期

一条指令通常经历取指、间址(若需要)、执行和中断等阶段。PC 给出下一条指令地址,IR 保存当前指令,MAR 保存访存地址,MDR 保存从存储器读出或准备写入的数据。

流水线

理想情况下,k 级流水线执行 n 条指令所需时间为:

1
T = (k + n - 1) × 时钟周期

主要冒险包括结构冒险、数据冒险和控制冒险。可通过资源重复、转发、暂停、分支预测等方式处理。

总线

  • 地址总线通常决定可寻址范围。
  • 数据总线宽度影响一次能够传输的数据位数。
  • 控制总线传送读写、中断、总线请求等控制信号。
  • 总线带宽需要结合总线宽度、时钟频率以及每次传输占用的周期数计算。

I/O

方式 CPU 参与程度 特点
程序查询 CPU 轮询设备状态
中断驱动 设备就绪后通知 CPU
DMA DMA 控制器负责主存与设备间批量传输

DMA 传输前后的初始化和收尾通常仍由 CPU 完成;DMA 适合高速、批量数据传送。

六、性能指标与数据校验

补充内容:本节及后续章节补齐计算机组成原理常见统考考点。

6.1 容量、带宽与性能

  • 字长:CPU 一次处理数据的基本位数,不等同于存储字长或地址总线宽度。
  • 主频:时钟频率;时钟周期是其倒数。
  • CPI:执行一条指令平均所需时钟周期数;IPC 约为 CPI 的倒数,但超标量处理器需按实际定义分析。
  • 吞吐率表示单位时间完成的任务数;响应时间表示完成单个任务的总时间。
  • 加速比 S = 改进前执行时间 / 改进后执行时间

Amdahl 定律:若可改进部分比例为 f,该部分加速 s 倍,则总体加速比:

1
S = 1 / [(1-f) + f/s]

存储容量题必须区分按字编址与按字节编址。地址线 n 根可表示 2^n 个地址;芯片扩展中,位扩展增加每字位数,字扩展增加字数,字位同时扩展两者兼有。

6.2 校验码

奇偶校验只能保证检测奇数位错误,不能定位并纠正错误。海明码通过多个校验位定位一位错误;若数据位 k、校验位 r,通常需满足:

1
2^r >= k + r + 1

校验位一般放在编号为 1,2,4,8... 的位置,每个校验位覆盖编号二进制中对应位为 1 的位置。增加一位全局奇偶校验可形成 SEC-DED:纠正一位错误、检测两位错误。CRC 将比特串视为多项式,以生成多项式做模 2 除法,余数作为校验码。

七、定点数运算

7.1 加减与移位

补码加减统一由加法器完成:A-B = A + [-B]补。符号扩展保持补码真值;逻辑移位补 0,算术右移补符号位,算术左移通常低位补 0,但可能溢出。

无符号加法溢出由最高位进位判断;无符号减法的借位标志具体编码依体系结构。补码有符号溢出可用“两同号数相加得到异号结果”或符号位进位与最高数值位进位异或判断。

7.2 乘除法

原码一位乘法通常符号位单独处理,数值位按乘数最低位决定是否加被乘数,并逐次右移。补码乘法可使用 Booth 算法,根据相邻乘数位组合决定加、减或不操作。

恢复余数除法中,若试减后余数为负需恢复;不恢复余数法根据余数符号决定下一步加或减除数。除法需重点判断:除数为 0、商是否溢出、余数符号和范围。n 位数相乘一般需要 2n 位保存完整乘积。

7.3 ALU 与加法器

串行进位加法器结构简单但进位逐级传播,延迟随位数增加。并行进位利用产生函数 G_i=A_iB_i 与传递函数 P_i=A_i⊕B_i(也有教材用或定义)提前计算进位,速度更快。ALU 完成算术、逻辑和移位等操作,状态标志通常写入程序状态字寄存器。

八、主存储器组织

8.1 存储芯片扩展

芯片标记 2^n × m 表示有 2^n 个存储字,每字 m 位,需要 n 根片内地址线和 m 根数据线。组成 2^N × M 存储器:

1
2
3
位扩展片数 = M / m
字扩展组数 = 2^N / 2^n
总片数 = 两者乘积

字扩展时高位地址常经译码器形成片选信号;低位地址并联到各芯片。需结合片选有效电平和地址范围判断芯片映射。

8.2 DRAM 刷新

DRAM 行列地址分时复用可减少地址引脚。刷新按行进行,刷新周期内所有行都要被刷新:

  • 集中刷新:在一段时间集中刷新,会出现较长“死区”。
  • 分散刷新:每个存取周期后安排刷新,周期变长但无集中死区。
  • 异步刷新:把各行刷新均匀分散到刷新周期内,兼顾二者。

刷新由存储器内部或硬件控制,不需要 CPU 逐单元执行普通读写指令。刷新通常只提供行地址。

8.3 多模块存储器

单体多字存储器一次并行读出多个连续字;多体并行存储器由多个模块组成。低位交叉编址使连续地址分布到不同模块,可流水访问,提高带宽;高位交叉使连续地址集中在同一模块,更适合并行访问不同地址段。

若有 m 个模块、模块存取周期 T、总线传送周期 r,为无冲突连续流水访问通常需满足 m ≥ T/r。首个字仍需等待存取周期,后续可每隔 r 输出一个字。

九、Cache 深入

9.1 地址映射

设主存按字节编址,Cache 共 C 字节,块大小 B 字节,每组 E 行:

1
2
3
4
块内偏移位数 = log2 B
组数 S = C / (B×E)
组索引位数 = log2 S
标记位数 = 主存地址位数 - 组索引位数 - 块内偏移位数
  • 直接映射:每组 1 行,定位快、冲突多。
  • 全相联:任意块可放任意行,无组索引,比较器多。
  • 组相联:每个主存块映射到固定组,可放组内任一行。

Cache 行还常含有效位;写回法需要脏位。替换算法只在一个组内选择,直接映射无需替换算法。常见算法有 LRU、FIFO、随机;LRU 位数和实现方式应按组相联度分析。

9.2 写策略更正与一致性

易错点:正确搭配通常是:

1
2
写直达(Write Through) + 非写分配(No Write Allocate)
写回(Write Back) + 写分配(Write Allocate)

写直达每次写命中同时更新 Cache 和下一级存储器,常配写缓冲;写回仅修改 Cache,替换脏块时写回。写未命中时,写分配先把块调入 Cache 再写,非写分配直接写下一级。

题目若给出多级 Cache,平均访问时间应按“未命中惩罚”逐层展开,且先确认各级命中率是局部命中率还是全局命中率。

十、虚拟存储器与地址转换

虚拟地址一般分为虚页号和页内偏移;页内偏移在地址转换中不变。TLB 缓存页表项,Cache 缓存数据块,两者功能不同。典型访问流程:

  1. CPU 产生虚拟地址,先查 TLB。
  2. TLB 命中得到页框号;未命中则访问页表。
  3. 页表有效则回填 TLB;无效触发缺页异常,由操作系统调页。
  4. 得到物理地址后访问 Cache;Cache 未命中再访问主存。

页大小为 2^p 字节时,低 p 位是页内偏移。多级页表只需为实际使用的虚拟地址区域建立下级页表,节约页表占用,但 TLB 未命中时可能增加访存次数。页表项常含有效位、访问权限、修改位、访问位和物理页框号。

Cache 若采用虚拟索引/物理标记,应注意地址转换与 Cache 查询的并行条件;408 常见题以题设结构为准,不应默认所有实现相同。

十一、指令系统深化

11.1 指令格式

指令通常由操作码和地址码组成。定长操作码译码简单;扩展操作码让短地址指令把未使用的地址字段编码空间用于更长操作码,但必须保证不同指令编码不能互为前缀。

若地址字段 n 位,则可直接表示 2^n 个地址。零地址指令常用于栈式机器,一地址指令可能同时隐含累加器或原操作数地址,二地址与三地址指令的数据流按题目语义判断。

11.2 寻址方式补充

方式 有效地址/操作数 特点
立即 A 是操作数 取指后无需再取操作数
直接 EA=A 地址范围受地址字段限制
间接 EA=(A) 扩大范围但增加访存
寄存器 操作数在 R_i 快、字段短
寄存器间接 EA=(R_i) 便于指针访问
相对 EA=(PC)+A 便于位置无关代码和转移
基址 EA=(BR)+A 面向系统,利于重定位
变址 EA=(IX)+A 面向用户,适合数组
堆栈 栈顶隐含 指令短

PC 相对寻址中的 PC 值通常是取完当前指令后所指的下一条指令地址。偏移量常按补码解释并可能按指令字长缩放,必须看题设。

11.3 CISC 与 RISC

RISC 倾向于定长指令、少而规整的寻址方式、大量通用寄存器、Load/Store 架构和硬布线控制,便于流水;CISC 指令复杂、寻址方式多、长度可能不固定,常使用微程序控制。二者是设计倾向,不意味着现代处理器完全属于某一极端。

11.4 高级语言与机器级表示

  • 数组元素地址由首地址、下标和元素宽度计算。
  • 结构体成员按声明顺序存放,成员间和末尾可能填充;联合体成员共享同一起始地址。
  • 过程调用通常涉及参数传递、返回地址、保存寄存器、局部变量和栈帧。
  • 调用者保存与被调用者保存寄存器的划分由调用约定决定。
  • call 保存返回地址并转移,ret 恢复返回位置;具体实现依 ISA。

机器级题必须区分数据宽度、有/无符号解释、大小端、对齐以及地址计算。比较指令常通过减法设置标志但不保存结果,条件转移根据标志组合判断。

十二、CPU 数据通路与控制器

12.1 指令周期

典型阶段包括取指、间址(若需要)、执行和中断。取指常见微操作:

1
2
3
MAR <- PC
MDR <- M[MAR],PC <- PC + 指令长度
IR <- MDR

实际微操作能否并行取决于数据通路是否冲突以及控制信号是否允许。指令周期由若干机器周期组成,机器周期又含若干时钟周期;具体术语边界依教材和题设。

12.2 数据通路

单总线 CPU 同一时刻通常只能有一个部件向总线输出,需要暂存寄存器配合 ALU;多总线结构能并行传输更多数据,但硬件复杂。专用数据通路性能高、连线多;通用总线数据通路灵活、成本低。

常见寄存器:PC 保存下一条指令地址,IR 保存当前指令,MAR 保存访存地址,MDR 保存读写数据,通用寄存器保存操作数,PSW 保存状态和控制信息。MAR、MDR 位数通常分别与地址空间和存储字长/数据通路相关,仍应以题设为准。

12.3 硬布线与微程序控制

硬布线控制器由组合/时序逻辑直接产生控制信号,速度快但修改扩展困难,常与 RISC 倾向结合。微程序控制器把微命令编码在控制存储器中,设计规整、易扩展但速度相对慢。

  • 微命令:最基本控制操作。
  • 微指令:一个微周期内执行的一组微命令。
  • 微程序:实现一条机器指令的一组微指令。
  • 水平型微指令并行能力强、字长长;垂直型编码程度高、字长短、并行性弱。

微地址形成可由顺序增量、操作码映射、微指令下地址字段和条件转移等方式完成。

十三、指令流水线

13.1 性能计算

理想 k 段流水线,各段时间均为 Δt,连续执行 n 条指令:

1
2
3
4
5
总时间 = (k+n-1)Δt
吞吐率 = n / [(k+n-1)Δt]
最大吞吐率趋近 1/Δt
加速比 = 非流水时间 / 流水时间
效率 = 加速比 / k

各段时间不等时,时钟周期至少取最长阶段延迟并考虑流水寄存器开销。流水线提高吞吐率,单条指令延迟未必降低。

13.2 流水线冒险

  • 结构冒险:多条指令争用同一硬件资源;可增加资源或停顿。
  • 数据冒险:后一指令依赖前一指令结果,主要有 RAW、WAR、WAW;顺序五段流水常见 RAW。
  • 控制冒险:分支、异常改变 PC;可停顿、预测、延迟分支或提前判定。

数据转发可把后续阶段结果直接送到前级输入,减少停顿,但典型 Load-Use 冒险即使转发也可能需要一个气泡。分支预测错误时需清空错误路径指令。

13.3 超标量与动态流水

超标量每周期可发射多条指令,需要多套功能部件和相关性检查;超流水通过细分阶段提高时钟频率;乱序执行允许就绪指令越过未就绪指令,但通常按程序顺序提交以保持精确异常。408 题目以概念与给定流水时序计算为主。

十四、总线

14.1 分类与性能

按功能可分片内总线、系统总线和 I/O 总线;系统总线常分地址、数据、控制总线。地址总线通常单向,数据总线双向,控制线方向依信号而定。

1
总线带宽 = 每次传送数据量 × 每秒传送次数

若一个总线周期传多个数据,则应乘突发长度;若时钟周期中有多个传输沿,也要按题设计算。总线复用可减少引脚,但需要分时和锁存,可能降低性能。

14.2 仲裁与定时

集中仲裁:

  • 链式查询:线路少、优先级固定,对电路故障敏感。
  • 计数器定时查询:可循环优先,线路较少。
  • 独立请求:响应快、优先级灵活,但控制线多。

同步定时由统一时钟控制,适合速度接近的部件;异步定时用请求/回答握手,适合速度差异大的部件。异步可分不互锁、半互锁和全互锁。总线事务通常包括申请/仲裁、寻址、传输和结束。

十五、I/O 系统

15.1 I/O 接口

I/O 接口负责地址译码、数据缓冲、状态与控制、格式转换和与设备联络。接口寄存器常有数据寄存器、状态寄存器和控制寄存器。

统一编址把 I/O 端口作为存储地址的一部分,可用普通访存指令,地址空间被占用;独立编址有独立 I/O 空间和专用指令。

15.2 程序查询、中断与 DMA

方式 数据传送控制 CPU 参与程度 适用
程序查询 CPU 轮询状态 高,忙等 简单低速设备
中断 设备就绪时请求 CPU 每次传送仍经 CPU 中低速、随机事件
DMA DMA 控制器直接在设备与主存间传送 块开始/结束参与 高速块设备
通道 通道程序控制 I/O 更低 大型系统多设备

程序中断过程包括请求、判优、响应、保护现场、执行服务程序和恢复。关中断常用于保护断点和关键现场;中断隐指令由硬件完成部分响应操作。中断向量提供服务程序入口或入口地址索引。

DMA 方式有停止 CPU 访存、周期挪用和交替访存。DMA 传输单位通常是数据块,但每次总线占用可传一个字或突发数据;DMA 不执行普通程序指令,传送前后由 CPU 配置和处理。

15.3 中断优先级

中断响应优先级决定同时请求时先响应谁,通常由硬件排队电路决定;中断处理优先级决定服务程序能否被其他中断打断,可由屏蔽字调整。若允许嵌套,高处理优先级中断可打断低处理优先级服务程序。屏蔽期间的新请求是否被锁存取决于硬件设计和题设。

十五-A、补充专题:机器级程序、多处理器与 I/O 接口

补充说明:本节补全机器级函数调用、字节序与对齐、多处理器和硬件多线程,并细化 I/O 接口中 CPU 可见寄存器及握手机制。

15-A.1 大小端、对齐与结构体

大小端只决定一个多字节对象内部各字节的地址次序,不改变每个字节内部的位序。设 0x12345678 从地址 A 开始存放:小端在 A0x78,大端在 A0x12

对齐要求对象首地址通常是其对齐值的整数倍。结构体成员按声明顺序排列,编译器可能在成员之间插入填充;结构体总长度还要补齐为其最大对齐值的整数倍。题目给定打包规则或 ABI 时,以题设为准。

15-A.2 机器级函数调用

一次典型过程调用可分为:准备参数 → 保存返回地址 → 建立栈帧 → 保存必要寄存器 → 分配局部变量 → 执行函数体 → 恢复现场 → 返回。

  • 参数优先放寄存器还是栈、栈向高地址还是低地址增长,均由 ISA/ABI 决定;
  • 调用者保存寄存器:调用者若仍需其值,应在调用前保存;
  • 被调用者保存寄存器:被调用函数使用前保存,返回前恢复;
  • 递归调用每一层都有独立活动记录,通常包含参数、局部变量、保存的寄存器和返回信息;
  • 叶子函数不再调用其他函数,可能省略部分保存和栈帧操作。
做题原则:不要把某一架构的寄存器名称和调用约定当作普遍规律。先读取题目给出的指令语义、栈指针变化和参数位置。

15-A.3 多处理器与硬件多线程

  • SISD:单指令流、单数据流,传统单处理器模型;
  • SIMD:一条指令同时处理多个数据,适合向量/数据并行;
  • MIMD:多个处理器执行不同指令流,包括共享存储多处理器和分布式系统;
  • 多核:一个芯片集成多个处理核心,可并行执行多个线程;
  • 粗粒度多线程:当前线程遇到较长停顿时切换线程;
  • 细粒度多线程:按周期交错发射不同线程指令;
  • 同时多线程(SMT):同一周期可从多个线程发射指令,共享核心执行资源。

共享存储多处理器中,各核心私有 Cache 可能保存同一地址的副本,因此需要 Cache 一致性协议;它解决的是副本一致性问题,不等同于程序层面的互斥与同步。

15-A.4 I/O 接口细节

CPU 通常通过接口中的数据、状态、控制寄存器访问设备:数据寄存器暂存交换数据,状态寄存器反映就绪/忙/错误/中断请求,控制寄存器接收启动、读写模式和中断允许等命令。

接口与设备之间可采用异步握手:发送方给出数据和有效信号,接收方就绪后返回应答。端口编址只回答“CPU 如何给接口寄存器寻址”,程序查询、中断和 DMA 则回答“数据传送由谁控制”,两组概念不能混为一谈。

中断驱动 I/O 中,CPU 执行中断服务程序搬运数据;DMA 中,DMA 控制器取得总线控制权,在主存和设备接口间直接传送。DMA 完成一个数据块后通常以中断通知 CPU,但该中断不是用来逐字搬运数据。

十六、应试导航与教材口径

教材口径:组成原理部分以袁春风《计算机组成与系统结构》和唐朔飞《计算机组成原理》的共同基础概念为主。两书在符号、位序或具体机器模型不一致时,以题设为最高优先级,并在笔记中写明条件;下列内容不是逐字引文,不标注虚构页码。
模块 优先级 常见题型 掌握目标
数据表示与运算 S 选择、计算 补码、溢出、IEEE 754、ALU 标志位
存储层次 S 选择、计算、综合 主存扩展、Cache、页表、TLB、地址转换
指令系统 S 选择、综合 指令字段、寻址、机器级程序语义
CPU与数据通路 S 选择、综合 指令周期、控制信号、异常和中断
流水线 S 选择、计算 时钟周期、吞吐率、冒险、转发和停顿
I/O系统 A 选择、综合 程序查询、中断、DMA及总线竞争
总线与性能 A 选择、计算 CPU时间、带宽、同步/异步通信

16.1 必会计算模板

  • 补码:先确定位数和范围,再编码;加减运算统一为补码加法,最后结合 OF/CF 判断。
  • IEEE 754:确定符号 → 规格化 → 求真实阶码 → 加偏置 → 截取并舍入尾数;零、非规格数、无穷和 NaN 单独处理。
  • 存储器扩展:先算位扩展,再算字扩展;列出片选地址线和片内地址线。
  • Cache:块内偏移位数 log₂B;组号位数 log₂S;标记位数为物理地址位数减去二者。再判断命中、替换和写策略。
  • 页表/TLB/Cache:先完成虚拟地址翻译,再用物理地址访问物理 Cache(题设另有说明除外)。
  • 流水线:时钟周期取最慢流水段时间并计入题设寄存器开销;无停顿时 nk 段指令约需 (k+n-1)T

16.2 地址访问全链路

1
2
3
4
5
6
7
8
9
10
11
CPU产生虚拟地址 VA
→ 拆为虚拟页号 VPN + 页内偏移
→ 查 TLB
命中:获得物理页框号
未命中:查页表
有效:得到页框号并按策略回填 TLB
无效:产生缺页异常,由操作系统调页
→ 形成物理地址 PA
→ 按题设访问 Cache
命中:返回数据
未命中:访问主存并按策略回填
条件提醒:TLB 未命中不等于缺页;Cache 未命中也不等于缺页。TLB 与 Cache 的命中在一般题目中没有简单的必然对应关系。发生缺页时,本次地址翻译不能直接得到有效物理页框,需先由操作系统处理。

16.3 写策略勘误

典型组合是:

  • 写直达(Write Through)常配非写分配(No Write Allocate);
  • 写回(Write Back)常配写分配(Write Allocate)。

这只是常见搭配,不是逻辑上唯一可实现的组合。写回块被替换时,只有脏位为 1 才需要写回下一级。

16.4 易错条件表

说法 严谨表述
IEEE 754 尾数总隐藏 1 仅规格化有限数使用隐含首位 1;非规格数不是
RAM 等于易失存储器 RAM描述随机访问方式;常见 SRAM/DRAM 易失,但概念不能完全等同
Cache 不命中时间就是主存时间 串行查找通常还包含已发生的 Cache 查询时间,具体按题设
DMA 完全不需要 CPU CPU负责初始化和完成后的处理;数据块传送主要由 DMA 控制器完成
CISC 一定使用微程序 这是常见实现倾向,不是定义上的绝对条件

16.5 真题登记字段

年份/题号|机器模型|地址位数|数据通路假设|解题步骤|错误原因|一句话结论

十七、2009—2025 真题融合复习地图

本节按历年常见命题模型组织复习。频率标签是复习优先级;年份、题号和答案须以原卷及解析逐题核验后再填写。

17.1 数据表示与运算

高频 补码加减、溢出与标志位、类型转换、IEEE 754、乘除法与校验码。

  • 有符号溢出:同号相加结果异号;也可用最高位与次高位进位异或判断。
  • 无符号减法的 CF 含义要以具体机器定义为准,不能把借位与进位机械混用。
  • IEEE 754 规格化数有隐含首位 1;阶码全 0 或全 1 时必须单独分类。
  • 长类型变短类型会截断高位;短变长时,无符号零扩展,有符号通常符号扩展。

17.2 存储层次

高频 Cache 映射与替换、写策略、主存芯片扩展、DRAM 刷新、TLB/页表/Cache 联合访问。

1
VA → 虚页号+页内偏移 → TLB/页表 → PA → Cache组号/标记/块内地址 → 数据
真题条件:先确认 Cache 是物理寻址还是虚拟寻址、TLB 与 Cache 是否并行、一次主存访问是否包含取页表项。未经题设确认,不直接套有效访问时间公式。

常见写策略组合:写直达常配非写分配,写回常配写分配;这是典型组合而非逻辑上的唯一组合。

17.3 指令系统、数据通路与流水线

高频 寻址方式、指令编码、数据通路、控制信号、流水线冒险与性能计算。

  • 相对寻址:EA=(PC)+A,但 PC 是当前指令地址还是下一条指令地址按机器约定。
  • Load/Store 体系通常只有访存指令访问存储器,算术逻辑运算主要在寄存器间进行。
  • 流水线总时间先画时空图,再判断结构、数据、控制冒险及停顿/转发策略。

17.4 总线与 I/O

高频 总线带宽、中断响应、DMA、程序查询与磁盘访问时间。

  • DMA 由 CPU 初始化,块传送主要由 DMA 控制器完成,结束时通常用中断通知 CPU。
  • 中断响应点、现场保存内容、是否允许嵌套必须服从题设机器模型。
  • 磁盘访问时间通常为寻道时间、旋转延迟和传输时间之和。

17.5 组成原理综合题检查表

1
2
机器字长与地址位数 → 数据格式 → 指令格式 → 寻址与数据通路
→ 存储层次 → 异常/中断 → I/O传送 → 单位与并行关系

17.6 经核验真题登记表

年份 题号 主考点 机器模型/关键条件 答案/结论 解析位置
待逐卷核验

历年真题跳转

计算机组成原理在统考卷中通常对应 第 12—22、43—44 题。以下链接可直接进入各年试卷的本科目区域: