计算机组成与体系结构期末复习指南:从补码到流水线的核心考点与避坑
简介这份《西安电子科技大学-计算机组成与体系结构-期末总结》PDF面向正在备考该课程的本科生与考研复习者帮助梳理课程核心考点、建立章节知识框架。内容覆盖计算机系统分类、冯·诺依曼结构、软硬件分类与逻辑等价性、七层层次结构、体系结构定义、Amdahl定律及机器字长、MIPS等主要技术指标并延伸至定点与浮点表示、原码补码反码移码等数据表示重点适合期末冲刺与知识点查漏补缺。资源包共1个PDF文件约6.2MB单文件结构便于通读与打印。目前已有2165人学习下载说明其内容对课程复习具有一定参考价值。读者可借此快速回顾各章要点对照课堂笔记整理出题方向尤其适合需要系统串联硬件结构与数据表示、在有限时间内完成多轮复习的学生使用。1. 从一份期末总结PDF说起计算机组成与体系结构到底该复习什么每年期末前总有人把整本教材翻了三遍结果拿到卷子还是懵——因为计算机组成与体系结构这门课知识点不是线性的而是层层嵌套的。你背了Cache映射方式却不知道它和主存地址划分怎么联动你记住了流水线五级结构却算不对数据冒险需要插入几个气泡。这份“期末总结.pdf”之所以被反复传阅核心价值不在于它覆盖了多少页而在于它把散落在各章的硬件逻辑串成了一条线数据通路怎么走、控制器怎么发信号、存储层次怎么兜底、I/O怎么收尾。适合正在备考的本科生也适合工作后想回头补体系结构底子的开发者。接下来我不复述PDF内容而是按我自己的复习路径把每个模块拆成能动手推演、能自检对错的步骤。2. 数据表示与运算从补码到浮点数的三个必算环节2.1 为什么补码能统一加减法从模运算推一遍很多人背了“正数原码不变负数取反加一”就上考场遇到溢出判断又卡住。根子在于没理解补码本质是模运算。以8位为例模是 (2^8256)。一个负数 (-x) 的补码就是 (256 - x)。比如 (-3) 的补码是 (253)二进制 (11111101)。这样 (5 (-3)) 就变成 (5 253 258)超过256自动丢弃得到 (2)结果正确。这个推导直接决定了溢出判断规则两个同号数相加结果符号变了就是溢出。因为模运算下正正如果超过最大值会“绕回”负数区间。考试里常考的是给你两个补码数让你判断是否溢出并说明原因。我一般会让学生先算十进制真值再看是否超出 ([-128, 127])最后用二进制验证符号位。注意溢出和进位是两回事。进位是最高位向更高位的 carry溢出是符号位逻辑错误。选择题里经常把这两个混在一起考。2.2 IEEE 754单精度浮点数手算转换的固定流程浮点数是期末必考大题通常要求把十进制小数转成32位IEEE 754格式或者反过来。我总结了一个五步法每次按顺序做就不会乱第一步把十进制数写成二进制科学计数法比如 (12.375 1100.011 \times 2^0)再规格化为 (1.100011 \times 2^3)。 第二步提取符号位正数为0负数为1。 第三步计算阶码指数 (3) 加上偏置值 (127)得到 (130)转成8位二进制 (10000010)。 第四步提取尾数规格化后小数点后的 (100011)补零到23位。 第五步拼接符号位 阶码 尾数。反过来给一个32位十六进制先拆三段阶码减127得真实指数尾数前补1再移位。这里最常见的坑是忘记隐藏的整数位1以及阶码全0和全1的特殊情况非规格化数、无穷大、NaN。期末通常不考特殊值但选择题会问“阶码为0时表示什么”答案是非规格化数此时尾数不补1。2.3 定点乘法与除法用Booth算法和恢复余数法手推Booth算法是补码乘法的标准考点。它的核心是看乘数最低位和附加位的变化00或11不变01加被乘数10减被乘数然后算术右移。我建议考试时直接列部分积表格每一步写清楚操作和移位后的结果。比如计算 ((-3) \times 5)先转成补码被乘数 (-3) 的8位补码是 (11111101)乘数 (5) 是 (00000101)附加位初始0。按Booth规则走8轮最后取高8位和低8位拼接。除法用恢复余数法更直观每次试减被除数如果余数为负就恢复并商0否则商1。手算时注意余数左移时补0以及最后余数的符号修正。这部分期末通常给6到8分步骤分很重哪怕结果算错过程对也能拿大半。3. 存储层次Cache映射、替换与写策略的完整推演3.1 直接映射Cache地址划分与命中判断直接映射是最常考的结构。假设Cache有16行每行32字节主存地址32位。那么块内偏移占5位(2^532)行号占4位(2^416)剩下的23位是标记。给你一个地址 (0x12345678)先转二进制取低5位得偏移再取接下来4位得行号剩下的就是标记。判断是否命中就看该行当前标记是否等于地址标记且有效位为1。这里有个高频陷阱题目说“按字节编址”还是“按字编址”。按字编址时地址最低位不是字节偏移需要先除以字长。我见过太多人在这里翻车明明映射方式写对了地址划分却错了。3.2 组相联与全相联替换算法的手工模拟组相联是直接映射和全相联的折中。假设Cache有8组每组2行块大小16字节。地址划分变成偏移4位组号3位标记25位。访问一个地址时先定位到组然后在该组的2行里比较标记。如果都不命中就要替换。LRU算法需要记录每行的最近访问时间FIFO只看进入顺序随机替换则没有规律。期末常考的是给一个访问序列让你画出每步Cache内容的变化。我一般建议用表格列头写“访问地址、组号、命中/缺失、替换前该组内容、替换后该组内容”。这样即使算错老师也能看到你的思路。全相联的替换更复杂因为要比较所有行但考试通常只考LRU且访问序列不会太长。3.3 写回法与写直达什么时候写主存写策略是选择题和大题都可能涉及的点。写直达write-through每次写Cache都同时写主存实现简单但带宽消耗大。写回write-back只写Cache并设置脏位直到该行被替换时才写回主存。考试里常问写回法下替换时如果脏位为0需要写主存吗答案是不需要。还有一个细节写不命中时写直达通常采用“不按写分配”直接写主存不调块写回通常采用“按写分配”先把块调入Cache再写。这个区别在选择题里反复出现记住“写回配按写分配写直达配不按写分配”基本能应付。4. 指令系统与流水线从数据冒险到流水线冲突的排查4.1 指令格式与寻址方式操作数在哪里指令系统这章看似零散其实就两条线指令格式和寻址方式。指令格式考的是定长/变长、操作码扩展。比如给你一个指令字长16位要求支持64条指令和8个通用寄存器问操作码至少几位。先算寄存器编号占3位两个操作数就是6位剩下10位给操作码最多1024条满足64条。如果还要支持立即数就要重新分配位数。寻址方式常考立即寻址、直接寻址、间接寻址、寄存器寻址、寄存器间接寻址、相对寻址。相对寻址的偏移量是相对于PC的计算有效地址时是PC当前值加偏移。这里有个坑PC当前值是指令执行时的PC还是取指后的PC不同教材定义不同考试时看题目给的说明如果没说明默认是取指后PC即当前指令地址加指令长度。4.2 五级流水线理想加速比与三种冒险五级流水线取指、译码、执行、访存、写回是体系结构的核心考点。理想情况下k级流水线处理n条指令的时间是 (k (n-1)) 个周期加速比接近k。但实际有冒险。结构冒险硬件资源冲突比如指令和数据同时访存。解决方法是分离指令Cache和数据Cache。 数据冒险后一条指令需要前一条的结果。解决方法是转发forwarding和插入气泡stall。转发能把ALU结果直接送给下一条指令但load-use冒险必须插一个气泡因为数据在访存后才可用。 控制冒险分支指令导致下一条取指地址不确定。解决方法是分支预测静态预测如总是预测不跳转或动态预测如两位饱和计数器。期末大题通常给一段汇编代码让你画出流水线时空图标出哪些周期需要停顿。我一般会先列出每条指令的五个阶段然后逐周期检查数据依赖。比如I1: LW R1, 0(R2) I2: ADD R3, R1, R4 I3: SUB R5, R3, R6I1在周期5写回R1I2在周期3需要R1所以I2必须等到周期5之后才能执行中间插入两个气泡。如果用了转发I1在周期4访存结束就能把数据给I2只需插一个气泡。这个分析过程必须写清楚否则老师不知道你是真懂还是蒙的。4.3 流水线冲突排查从时空图反推停顿原因很多同学画完时空图发现某条指令莫名其妙停了一个周期却说不清原因。我教一个排查顺序先看结构冲突检查同一周期是否有两条指令抢同一个部件再看数据冒险检查RAW、WAR、WAW五级流水线只可能RAW最后看控制冒险检查分支指令后是否取错了地址。如果题目给了转发和分支预测的条件一定要在时空图旁边标注“转发生效”“预测正确”等字样。期末阅卷时这些标注就是得分点。另外流水线寄存器的作用是锁存中间结果画图时不要漏掉每个阶段之间的寄存器。5. 总线与I/O中断、DMA与总线仲裁的避坑清单5.1 中断处理全流程从请求到返回的六个步骤中断是I/O部分的必考内容。完整流程是中断请求、中断判优、中断响应、保护现场、中断服务、恢复现场、中断返回。考试常问“中断响应发生在哪条指令执行完后”答案是当前指令执行结束后CPU检查中断请求线。保护现场时PC由硬件自动压栈通用寄存器由中断服务程序负责保存。中断屏蔽字用来调整优先级比如屏蔽掉低优先级中断。这里有个易错点中断隐指令不是真正的指令是硬件自动执行的包括关中断、保存断点、引出中断服务程序。5.2 DMA与中断的区别数据传送谁做主DMA和中断最本质的区别是中断方式下数据传送由CPU执行程序完成DMA方式下数据传送由DMA控制器直接完成CPU只负责初始化和后处理。DMA请求的是总线使用权不是CPU。周期挪用cycle stealing是DMA常用的方式每次挪用一两个总线周期不影响CPU访存。考试里常给一个场景问该用中断还是DMA。判断标准是数据量大小和传输速率。大量高速数据用DMA少量低速用中断。另外DMA的优先级高于中断因为DMA不处理就会丢数据。5.3 总线仲裁链式查询与计数器定时查询的取舍总线仲裁考得不多但选择题会出现。链式查询简单但优先级固定离控制器近的设备优先。计数器定时查询灵活优先级可以轮转但需要更多控制线。独立请求方式最快但线最多。期末通常只考概念记住每种方式的优缺点即可。注意总线带宽计算是送分题公式是总线宽度乘以总线频率。比如32位总线频率100MHz带宽就是 (32/8 \times 100M 400MB/s)。别把位和字节搞混。6. 期末复习的避坑与排查五个血泪教训6.1 坑一Cache地址划分时忘记块内偏移单位现象算出来的标记位和行号总是对不上答案。 原因题目说“按字节编址”块大小32字节偏移应该是5位但如果按字编址字长4字节偏移就要先除以4再取位。 解决读题时先圈出“编址单位”和“块大小单位”统一换算成字节再算位数。6.2 坑二流水线时空图漏画流水线寄存器现象时空图看起来对但老师扣分说“缺少寄存器”。 原因五级流水线每级之间都有寄存器画图时要用竖线隔开并标注IF/ID、ID/EX等。 解决画图前先画六条竖线代表五个阶段和四个寄存器再填指令。6.3 坑三浮点数阶码计算忘记加偏置现象阶码写成指数的二进制结果全错。 原因IEEE 754单精度偏置是127双精度是1023必须加上偏置再转二进制。 解决手算时先写“指数偏置阶码真值”再转二进制养成习惯。6.4 坑四中断优先级判断时忽略屏蔽字现象明明高优先级中断来了却判断为不响应。 原因当前中断服务程序的屏蔽字可能屏蔽了该中断。 解决做中断题时先画出当前屏蔽字再逐位判断哪些中断被允许。6.5 坑五总线带宽计算混淆MHz和MT/s现象带宽算出来差8倍。 原因总线频率有时给的是时钟频率有时给的是数据传输率。DDR总线一个时钟周期传两次。 解决看清题目给的是“总线频率”还是“数据传输率”前者要乘以2如果是DDR后者直接用。7. 用一张自检表把整本书串起来复习到最后最怕的是知识点都会但一做综合题就乱。我的习惯是考前三天拿出一张A4纸画一个自检表每一行是一个模块每一列是“核心公式”“常考题型”“易错点”“手算验证”。比如数据表示这行核心公式是补码转换和IEEE 754五步法常考题型是十进制转浮点、补码溢出判断易错点是偏置和隐藏位手算验证就自己出两个数转一遍。存储层次这行核心公式是地址划分位数计算和平均访问时间 (T h \times T_c (1-h) \times T_m)常考题型是给访问序列画Cache变化易错点是写策略和替换算法的组合。流水线这行核心公式是加速比和吞吐率常考题型是画时空图并计算停顿易错点是load-use冒险必须插气泡。I/O这行核心是中断流程和DMA区别常考题型是判断该用哪种方式易错点是中断隐指令和屏蔽字。这张表不用写满每个模块写三五行就行。写完后拿一套往年题不看答案按表里的易错点逐题检查。如果某道题卡住了立刻回到对应章节的推导过程而不是直接看答案。我当年期末就是靠这个方法从模考60多分提到卷面90。后来工作里遇到体系结构相关的问题比如性能调优时分析Cache命中率、排查流水线停顿这套自检习惯依然管用——先定位模块再套公式最后手算验证。希望帮到你。本文还有配套的精品资源点击获取