资讯详情

资讯详情

计算机组成原理期末:按题型拆解试卷与计算题得分点

每年六月和十二月的图书馆总有一批人对着《计算机组成原理》的卷子发呆——题目里的每个字都认识连起来就是不知道从哪儿下笔。我见过太多同学把整本书背了两遍考场上还是被一道 Cache 地址划分或者流水线相关性的题卡住。问题不在记忆力在于计组这门课的期末试卷有一套非常稳定的出题骨架而大部分人复习的时候是顺着教材章节走的跟出题人的思路正好错开。这篇内容我打算按题型而不是按章节来拆把计算机组成原理期末考试试卷里反复出现的那几类题挑出来配上真题示例和标准答案的书写格式讲清楚每一分的得分点在哪里。无论你是软件工程专业被这门课折磨的同学还是想在大三之前把底层知识补齐的开发者都能直接拿去用。顺便说一句学软件的要学计算机组成原理这件事等你真正去调一个内存越界或者 cache 友好的循环优化时就知道不是学校在为难你了。1. 把一张卷子拆开看计组期末试卷的题型骨架我第一次系统整理计组试卷的时候把近六年的八套卷子摊在桌上做了个统计结果挺有意思——题型分布几乎是固定的只是知识点在换皮。理解这个骨架比多背二十个名词解释有用得多。1.1 分值分布的稳定规律大多数院校的计组期末卷子是 100 分制两个小时的考试时间。典型分布大概是这样题型分值区间题量主要考查范围选择题15~20 分10~15 题基本概念、数据表示、存储器分类填空题10~15 分10~15 空术语、公式、参数定义简答题15~20 分3~4 题原理性描述如中断、DMA、总线仲裁计算题30~40 分3~5 题补码运算、浮点数、Cache、流水线、总线带宽综合设计题10~20 分1~2 题存储器扩展、数据通路、微操作序列看这张表你就能明白一件事计算题是分数的绝对主力。很多人复习时把大量时间花在选择题和名词解释上觉得计算题反正也不会这是最亏的策略。计算题的特点是套路极其固定一个题型练五道考场上基本就是默写投入产出比比背概念高得多。1.2 从题型倒推复习优先级如果只剩一周我建议的顺序是这样的先把计算题的五大类补码与浮点、Cache、流水线、总线与磁盘、存储器扩展各刷透这几乎能锁定 40 分左右然后用两天时间把简答题的高频题目中断、DMA、三种相关、写策略、替换算法整理成能默写的三段式最后一天再回去看选择题和填空因为这两类题很多是计算题知识点的边角料计算题通了选择题自然顺。反过来说如果你一上来就抱着教材从第一章计算机系统概论开始背等到第四章存储系统的时候考试已经结束了。计组教材的编排逻辑是为了教学完整性不是为了让你们考高分。提示判断一个知识点会不会考看它在课后习题里出现的频次比看老师划的重点更准。课后习题里反复出现的题型八成会原封不动或者换个数字出现在卷子上。1.3 为什么软件方向的同学更该认真对待这门课学软件的要学计算机组成原理这个说法在网上被讨论了很多年我的观点是不是要学是迟早得学。你写 Java 的时候不会关心对象头但你一旦碰到性能调优就要知道缓存行是 64 字节数组按行遍历和按列遍历的性能差可能有好几倍因为前者是顺序访问同一片连续内存后者每次跳一个 stride 把缓存行浪费掉。这些东西你不学计组靠搜索引擎也能拼凑出来但拼出来的是零碎的经验不成体系。从考试角度讲软件方向的同学更容易在数据表示与运算这块栽跟头因为平时不怎么碰二进制、补码和浮点数格式。这块反而是最好拿分的因为它完全不需要理解只需要按流程手算。后面我会专门讲。2. 数据表示与运算补码溢出、IEEE 754、校验码的答题格式这一块是试卷第一道计算题的重灾区也是最能靠训练拿满分的地方。因为它的答案有唯一标准形式阅卷老师几乎是按步骤给分你只要把中间过程写全就算最后结果错了也能拿到一半以上的分。2.1 补码加减与溢出判断的三条判定路径先说清楚一个基础n 位补码能表示的范围是 −2^(n−1) 到 2^(n−1)−1。8 位就是 −128 到 127。补码做减法时统一转成加上减数的相反数即 x − y x [−y]补而求 [−y]补 的方法是连同符号位一起取反加一。溢出判断是阅卷老师最爱设的得分点因为它有三种等价但书写方式不同的判法判法判断依据适用场景双符号位变形补码结果两位符号位为 01 表示正溢出10 表示负溢出00 和 11 正常要求书写过程的题最直观进位异或最高位进位 Cf 与次高位进位 C(n−1) 异或为 1 即溢出已知加法器进位情况时最快同号相加原则同号相加结果符号与被加数不同则溢出异号相加永不溢出选择题和判断题的速判法给一道典型的计算题设机器字长 8 位x 60y −80用补码计算 x − y并判断是否溢出。第一步写出补码。60 00111100−80 的原码是 11010000符号位 1数值 1010000取反加一得 10110000。我们要算的是 x (−y)而 −y 80其补码是 01010000。第二步相加00111100 01010000 10001100。第三步判断。两个加数符号位都是 0正数结果符号位是 1负数同号相加得到异号判定为正溢出。用进位异或验证bit6 向 bit7 的进位 C7 1最高位向外的进位 Cf 0Cf ⊕ C7 1同样判定溢出。数学上 60 − (−80) 140超出 8 位补码上限 127确实溢出。这道题的得分点在哪在于你把先求补码、再相加、再判断三步分开写清楚了并且用两种方法交叉验证。很多同学直接把 140 写出来说溢出过程分全丢。2.2 IEEE 754 浮点数的双向手算流程浮点数在卷子上的考法只有两个方向给实数写出 754 编码或者给十六进制编码反推实数。两个方向都必须练到闭着眼能写。单精度格式是 1 位符号 8 位阶码偏置值 127即移码 23 位尾数隐含最高位 1。写成公式就是值 (−1)^S × 1.M × 2^(E−127)其中 E 是阶码字段的无符号值。正向例题写出 −0.75 的单精度 754 编码。0.75 的二进制是 0.11规格化成 1.1 × 2^(−1)。所以 S 1阶码字段 −1 127 126 01111110尾数字段取小数点后的 1补齐 23 位为 10000000000000000000000。拼接结果1 01111110 10000000000000000000000。写成十六进制四位一组是 1011 1111 0100 0000 ... 即 BF400000。反向例题已知某单精度浮点数的十六进制表示为 C1B00000求其对应的十进制真值。先展开成二进制C1B00000 1100 0001 1011 0000 0000 0000 0000 0000。按 1 8 23 切分符号位 S 1阶码 E 10000011 131尾数 M 011 后面全 0。代入公式指数 131 − 127 4尾数 1.M 1.011二进制 1.011 1 0 0.25 0.125 1.375。所以真值 −1.375 × 2^4 −22。这类题的坑在于尾数补位方向。隐含位永远在小数点左边尾数字段是小数点右边的部分补零补在右边不是左边。我见过有人把 011 补成 01100000... 然后算成别的数就是这里搞反了。注意754 里还有两种特殊值一定要记住——阶码全 0 时是规格化数隐含位为 0用来表示非常接近 0 的数阶码全 1 时尾数为 0 表示正负无穷尾数非 0 表示 NaN。选择题里几乎每套卷子都会出一道。2.3 定点乘除的算法流程怎么答Booth 算法和原码一位乘法、恢复余数除法、加减交替除法这些算法的考题通常要求写出运算过程表。这类题的答案不是结果是表格里的每一步。答题格式我建议统一成三列部分积或余数、乘数或商、操作说明。每步写清楚判断最低两位是什么做加还是减然后算术右移一位。阅卷老师看的是你的判断逻辑对不对最终结果只占很小一部分分。2.4 校验码海明码位数和 CRC 的问答题模板海明码的常考问题只有一个n 位数据需要多少位校验位。公式是 2^k ≥ n k 1。比如 8 位数据试 k 42^4 16 ≥ 8 4 1 13成立所以需要 4 位校验位总共 12 位。答题时一定要把试算过程写出来直接写答案是拿不到全分的。CRC 则通常要求写出生成多项式对应的除法过程注意模 2 除法里减法就是异或借位规则和普通除法完全不同。这一步做错后面全错所以算完记得用余数位数等于生成多项式位数减一来验一下。3. 存储系统大题Cache 地址划分与平均访问时间存储系统在卷子里通常占 15 到 20 分是计算题里分值最高的一块。它的题型比浮点数更集中基本上就是地址划分和平均访问时间这两个动作的排列组合。3.1 三种映射方式的地址字段划分这道题几乎是必考而且换汤不换药。核心是搞清楚主存地址被切成几段每段多少位。假设条件主存地址 32 位Cache 容量 32KB块大小 64B。三种映射方式下地址字段的划分如下映射方式块内地址索引字段标记字段说明直接映射6 位9 位行号17 位行数 32KB / 64B 512 行全相联6 位无26 位任意块可放任意行要全地址比较4 路组相联6 位5 位组号21 位组数 512 / 4 128 组块内地址位数 log2(块大小) log2(64) 6 位这个所有方式都一样。索引字段取决于有多少行或多少组用 log2 算。标记字段就是剩下的部分用总位数减掉前两段。组相联是考试的重点因为它是直接映射和全相联的折中出题人喜欢让你比较三者的优缺点。答题时记住这个逻辑链条全相联命中率最高但比较器成本和查询延迟最高直接映射硬件最简单但冲突缺失最严重组相联在两者之间取平衡实际的处理器里几乎都用组相联比如 4 路或 8 路。3.2 平均访问时间的两种口径这是最容易失分的地方因为有两条公式用哪条取决于题目的描述。第一种CPU 同时访问 Cache 和主存并行访问缺失时直接取主存数据Ta h × tc (1 − h) × tm第二种CPU 先访问 Cache缺失时才去访问主存串行访问此时缺失的访问时间要算上先白跑一趟 Cache的时间Ta h × tc (1 − h) × (tc tm)拿具体数字感受一下设 Cache 命中率 h 95%Cache 访问时间 tc 2ns主存访问时间 tm 20ns。并行口径Ta 0.95 × 2 0.05 × 20 1.9 1 2.9ns。 串行口径Ta 0.95 × 2 0.05 × 22 1.9 1.1 3.0ns。差了 0.1ns看起来不多但卷子上如果你用了错的公式整道题的结果全错。判断方法就是看题干里有没有先访问 Cache不命中再访问主存这句话。还有一个常考的衍生量是 Cache 效率定义为 e tc / Ta上面并行口径下就是 2 / 2.9 ≈ 68.97%。有的卷子还会问加速比那是主存访问时间除以平均访问时间即 20 / 2.9 ≈ 6.9 倍。3.3 写策略和替换算法的问答题答法简答题里最爱问的两个问题写直达和写回的区别以及 LRU 为什么比 FIFO 好。写直达write through的答案是每次写操作同时更新 Cache 和主存一致性容易维护但写操作频繁时总线流量大。写回write back的答案是只写 Cache并设置脏位替换出去的时候才写回主存总线流量小但存在主存与 Cache 暂时不一致的窗口多处理器环境下需要额外的一致性协议。答题时把总线流量和一致性复杂度这两个关键词写进去基本就是标准答案。替换算法方面LRU 比 FIFO 好的理由是它利用了程序的局部性原理——最近被访问过的块很可能马上又被访问所以优先淘汰最久未使用的块符合局部性规律。FIFO 只看进入顺序可能把刚进来但马上要被反复使用的块淘汰掉还会出现 Belady 异常也就是增加 Cache 容量反而导致命中率下降。这个Belady 异常是个加分点写上老师会觉得你真读过书。3.4 存储器扩展的连线题怎么摆这类题通常给一片存储器芯片的参数比如 16K × 8 位要求用若干片组成 64K × 16 位的存储器问需要几片、地址线怎么连、片选怎么产生。算片数总容量 64K × 16 位 1024K bit单片 16K × 8 位 128K bit需要 8 片。这 8 片分成两组每组 4 片做位扩展拼成 16 位宽组间做字扩展拼成 64K 深。地址线方面16K 需要 14 根地址线做片内寻址剩下的高位64K 需要 16 根所以剩 2 根拿去做片选译码。画出译码器的输入和每片的片选连线就是标准答案。这道题的失分点几乎全在地址线从高位开始分配这个细节上——一定要从 A15、A14 往下分低位留给片内。4. 流水线与进位链三种相关、加速比和组间串行进位这一块是计组里理解门槛最高但套路最深的部分。只要你能把一张流水线时空图画出来绝大多数问题都能顺着图回答。4.1 结构相关、数据相关、控制相关的区分三种相关的定义要背到能条件反射相关类型触发条件典型场景解决手段结构相关多条指令在同一周期争用同一硬件资源取指和访存都要用存储器分离指令 Cache 和数据 Cache、插气泡数据相关后续指令需要前面指令尚未写回的结果RAW写后读最常见转发/旁路、编译器调度、插气泡控制相关转移指令导致下一条指令地址不确定条件跳转、调用返回分支预测、延迟槽、预取两条路径数据相关里还细分 RAW、WAR、WAW 三种但在按序流水线里主要关心 RAW也就是写后读。WAR 和 WAW 在乱序执行和多发射的处理器里才成为主要矛盾考试里如果出现通常是为了考你对乱序执行的理解。给一道典型题I1: ADD R1, R2, R3 I2: SUB R4, R1, R5 I3: XOR R6, R1, R7 I4: ADD R1, R8, R9 I5: AND R10, R1, R11分析相关关系I2 和 I3 都要读 I1 写的 R1属于 RAW 相关I4 要写 R1而 I1 也写 R1属于 WAW 相关I5 读 R1 依赖 I4 的结果又是 RAW。解决路径要分层次写I2、I3 与 I1 之间用转发从 EX/MEM 或 MEM/WB 流水寄存器把结果直接送到 ALU 输入端就能解决不需要停顿I4 与 I1 的 WAW 相关在按序流水线里不会造成问题因为按序写回是有序的I5 与 I4 之间的 RAW 相关如果 I4 是 ALU 运算同样可以转发但如果 I4 是访存指令结果要到 MEM 阶段末尾才有就需要插入一个气泡。4.2 加速比、吞吐率和效率的三连算流水线的三个性能指标是所有卷子都会出现的送分题公式必须背熟。设流水线有 k 段每段一个时钟周期执行 n 条指令流水线总时间 T k (n − 1) 个时钟周期吞吐率 TP n / T n / (k n − 1)加速比 S 顺序执行时间 / 流水线时间 nk / (k n − 1)效率 E S / k n / (k n − 1)举例5 段流水线执行 100 条指令。T 5 99 104 周期顺序执行是 500 周期S 500 / 104 ≈ 4.81TP 100 / 104 ≈ 0.96 条/周期E ≈ 96.2%。这里有个反直觉的点值得在简答题里点出来段数越多加速比上限越高但实际加速比永远达不到 k因为流水线有装入和排空的时间。而且段数增加会导致每段的逻辑变少、锁存器开销占比变大时钟周期未必能按比例缩短所以并不是流水级数越多越好。这个观点写进简答题比单纯写公式有说服力得多。4.3 组间串行进位为什么被反复考组间串行进位这个考点看着很硬件其实逻辑很清晰只是很多同学被组内并行、组间串行这八个字绕晕了。背景是这样的做加法器的时候为了加快进位传递通常用 4 位的 ALU 芯片比如 74181拼成 16 位。每片 74181 内部已经做了先行进位也就是片内的 4 位进位是并行产生的不需要一位一位地传。问题出在片与片之间——4 个组之间的进位怎么传。组间串行方案把低位的组进位输出直接接到相邻高位的组进位输入一级一级往上串。这时候最大的进位延迟出现在最低位产生进位、要一直传到最高位的情况延迟大致等于 4 个组进位延迟之和随组数线性增长。16 位是这样64 位就要串 16 级延迟大到没法接受。组间并行方案加一片先行进位部件比如 74182它根据各组的进位产生函数 G和进位传递函数 P直接算出每一组的进位不依赖上一级的输出。这样整个加法器的进位延迟从随组数线性增长降到两级门延迟左右和位数基本无关。考试怎么考最常见的是给你一个位数让你画出两种方案的进位传递路径然后比较最长进位延迟。答题时分三步先算有几个组再画最低位到最高位的进位传播链条最后给出两种方案的延迟量级对比。记住结论是一句话组内并行把 4 位的进位延迟压到常数组间串行让组间延迟随位数线性增长组间并行则把这个线性关系重新压回常数。4.4 总线带宽与磁盘存取时间的计算总线带宽的公式很直接带宽 总线宽度字节× 总线时钟频率。比如 32 位宽、66MHz 的总线理论带宽 4B × 66M 264MB/s。如果题目说每三个时钟周期完成一次数据传送那有效带宽就是 264 / 3 88MB/s。这里的关键词是有效出题人加上这两个字就是要你除以等待周期数。突发传送是个加分点它指的是给一次地址就能连续传多个数据省掉了每次传送的地址周期所以有效带宽会明显高于单次传送。答题时可以用公式表达突发长度 L 时一次传送耗时 1 个地址周期 L 个数据周期平均每个数据的周期数从 2 降到约 1 1/L。磁盘存取时间的计算是寻道时间 旋转延迟 传输时间。旋转延迟取旋转一周时间的一半。比如 7200 转/分的硬盘一周是 60/7200 8.33ms平均旋转延迟约 4.17ms。如果题目给出寻道时间 8ms、传输 512 字节耗时 0.1ms那平均存取时间就是 8 4.17 0.1 ≈ 12.27ms。这道题的坑在于有人忘了除以 2把整个 8.33ms 当成旋转延迟白丢几分。5. 指令系统与 CPU寻址方式、微操作序列与中断简答这部分是背多分和理解分混合的区域。寻址方式靠一张表就能吃下微操作序列靠固定套路中断和 DMA 靠三段式结构。5.1 寻址方式与有效地址计算的对照表先把这张表记住考场上直接查表算寻址方式有效地址 EA访存次数特点立即寻址无操作数在指令中0最快但数值范围受限直接寻址EA A1简单寻址范围受限间接寻址EA (A)2可扩大寻址范围速度慢寄存器寻址EA Ri0快寄存器数量有限寄存器间接EA (Ri)1常用于指针操作相对寻址EA PC A1用于转移指令PC 为下条指令地址基址寻址EA BR A1用于程序重定位变址寻址EA IX A1用于数组遍历堆栈寻址EA SP1用于过程调用和返回最容易错的是相对寻址。题干经常会说某转移指令存放在地址 2000H 处指令长 2 字节位移量为 08H求转移目标地址。很多人直接算 2000H 08H正确答案应该是把 PC 先更新到下一条指令的地址也就是 2002H再加 08H 得 200AH。相对寻址的基准永远是下一条指令的地址不是你当前这条指令的地址。这个细节每年都有人错。5.2 微操作序列怎么写才规范数据通路题的答题方式很固定就是按时钟节拍写出每个周期的微操作。取指周期的标准写法大致如下不同教材符号略有差异但结构一致T0: PC - MAR T1: M(MAR) - MDR, PC 1 - PC T2: MDR - IR T3: OP(IR) - ID书写要点有三个一是每条微操作只写一个数据传送方向不要在一行里写两个箭头二是明确标出节拍因为不同节拍可以并行的操作要合并三是如果题目有间址周期要单独加一段用 IND 标志判断。阅卷时老师主要看你的控制信号有没有遗漏比如读存储器的时候有没有发读命令、写寄存器的时候有没有发写入使能。这些细节在课本的图里都有抄图的时候别跳步。5.3 中断、异常与 DMA 的三段式答法这三类是简答题的常客我建议都用是什么、怎么工作、有什么特点的三段式来组织。中断中断是 CPU 在执行程序过程中遇到外部事件请求时暂停当前程序、转去执行处理程序、处理完再返回的过程。响应中断需要三个条件有中断请求、CPU 允许中断开中断状态、当前指令执行完毕。中断隐指令是硬件自动完成的三个动作关中断、保存断点把 PC 压栈、取出中断服务程序的入口地址送 PC。中断处理完之后要恢复现场、开中断、返回。异常异常是 CPU 内部在执行指令时产生的比如除零、缺页、非法指令。和中断的区别在于异常是同步的、和当前指令相关中断是异步的、和当前指令无关。这个区别写在答案里是个亮点。DMADMA 是直接存储器访问让外部设备不经过 CPU 直接在内存和设备之间传送数据。它的三种传送方式是停止 CPU 访存、周期挪用也叫周期窃取、CPU 和 DMA 交替访存。和中断方式相比DMA 不需要 CPU 逐字节搬运也不打断 CPU 的现场只在传送块结束的时候才发一次中断。有些卷子会问为什么 DMA 传送比中断方式快答案是中断方式每传一个字节都要保存和恢复现场、执行一段服务程序开销远大于传送本身DMA 由硬件控制器直接控制总线数据搬运不占用 CPU 的执行时间。6. 最后两周怎么用试题复习仿真软件、错题分类和卷面知识点讲完了剩下的是执行问题。我见过太多同学知识都懂考场上还是拿七十分问题出在复习方法和答题习惯上。6.1 用组原实验仿真平台反哺笔试很多学校会配一套计算机组成原理与系统结构的实验仿真软件配套的使用手册里通常包含寄存器查看、微指令编辑、时序波形观察这些功能。我的建议是在复习数据通路和微操作序列的时候把仿真软件打开把你写的微操作序列一条条敲进去跑一遍。为什么这么做因为笔试的时候你写的是抽象符号很容易漏掉控制信号或者节拍安排。仿真软件会直接告诉你这个寄存器在这个时刻没有写入使能错误立刻暴露。我当年复习的时候把课本上取指、间址、执行三个周期的微操作抄进仿真器跑了十几遍考试时那道 12 分的数据通路题基本是默写出来的。仿真软件还有个用法是验证进位链路。如果你想不通组间串行和组间并行的区别把两种连接方式的波形拉出来对比一下就能直观看到进位输出的时间差。这比看十遍文字描述管用。6.2 错题按错因分类而不是按章节大部分人的错题本是按教材章节分的第一章错了三道、第二章错了两道。这种分类对复习帮助不大因为它告诉你的是哪里错了不是为什么错。我的做法是按错因分成四类概念混淆比如把 Cache 命中率和命中时间搞混、公式记错平均访问时间的两种口径、过程跳步补码运算没写中间步骤、审题失误相对寻址没更新 PC。四类里前两类靠重读课本解决后两类只能靠限时训练解决。统计下来我发现自己 60% 的失分在过程跳步上就是明明会做但写得不够细。发现这一点之后我强迫自己每道计算题都写满中间过程一个月之后分数直接上了一个台阶。你也去统计一下自己的错因分布会发现规律比你想的明显。提示错题本上每道题旁边写一句话的如果重来一次我会怎么做比抄一遍正确答案有用十倍。抄答案是手在动写反思才是脑子在动。6.3 考场上的时间分配和卷面技巧两小时的考试我建议的时间分配是第一小时拿下所有计算题和综合题第二小时处理选择、填空和简答。原因是计算题的分值密度最高而且思路一旦断了很难接回来趁脑子清醒的时候做最合适。卷面方面有几个具体的技巧。第一每道计算题都写上解和题号中间用横线隔开方便老师找得分点。第二公式先写出来再代数因为公式分是独立给的就算算错也有一两分。第三画图题用铅笔先把坐标和坐标轴标好再画数据很多同学画的时空图没有标周期编号老师根本看不懂。还有一个细节简答题千万别空着。计组的简答题通常是踩点给分你把能想到的关键词写上去比如问写回法的缺点就算你只写了主存与 Cache 不一致和需要脏位也能拿到一部分分。空着是零分写三行可能就有两分。6.4 高频失分点清单最后整理一份我在复习和改卷中见过的最高频失分点考试前一天晚上扫一遍补码溢出判断只写结论不写过程双符号位和进位异或至少写一种。IEEE 754 尾数补零补在左边。Cache 地址划分时把组号和行号搞混组相联的索引是组号不是块号。平均访问时间用错公式没注意题干里的先访问 Cache 再访问主存。流水线加速比忘记减去装入排空时间直接用 n 除以 k。相对寻址没有把 PC 更新到下条指令地址。存储器扩展的地址线从低位开始分配。磁盘旋转延迟忘记除以 2。简答题只写定义不写工作过程导致踩不到给分点。这些坑我基本都踩过写出来就是希望你别重复。计算机组成原理这门课的期末试卷本质上是一场把理解转成标准答案的训练。知识点是死的题型是固定的剩下的只是熟练度。把上面这几类题各刷五道你会发现这张卷子其实没那么可怕。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →