期末周前一礼拜班级群里最常刷屏的一句话就是第5章课后题答案谁有。我手上那本《计算机组成原理微课版》的第5章前后做过三遍第一遍对着答案抄第二遍逼自己推第三遍才发现真正值钱的不是那几行结果而是每类题背后那套几乎固定的推导动作。计算机组成原理这门课的分水岭基本就在第5章——前面几章还能靠背概念混过去从第5章开始指令周期、数据通路、控制器设计、流水线相关一股脑压过来题目往往只有两三行但中间的假设和顺序一步错后面全废。这篇东西按知识点把第5章课后题拆开讲题型怎么归类、答案是怎么一步步推出来的、哪几个地方最容易丢分。适合正在赶作业的、期末冲刺的以及二轮复习想把整章重新捋顺的人。提前说清楚一件事——不同版本教材的“第5章”差别很大题号、题量、顺序对不上太正常所以我按题型给解法你拿着自己书上那道题找同类即可。另外下面的计算题里出现的数字是完整的推导示例条件我都写明了看着不一样就把自己的数据代进去。1. 第5章的题型地图与版本对照1.1 先对号入座你手上那本书的第5章到底讲什么这件事必须先做不然看别人整理的答案会一脸茫然。教材版本不同第5章的主题能差出十万八千里。常见版本第5章主题课后题主要考什么偏传统体系结构的教材输入输出系统中断处理流程、DMA、接口编址、三种传送方式对比偏硬件设计路线的教材中央处理器指令周期、微操作序列、数据通路、控制器、流水线多数“微课版”与院校自编教材中央处理器与流水线微程序格式、相关与冲突判别、性能计算部分院校存储系统Cache 映射与地址划分、平均访问时间、虚拟存储从近几年学生问得最多的内容看“中央处理器 流水线”这一套占比最高所以我把它放在最前面讲透Cache 计算和 I/O 对比另开一节兜底那两类题的解法套路其实更死板照着模板做基本不会错。1.2 五类高频题型与大致分值同样一章内容出题人的偏好其实很集中。我把自己做过的、以及帮同学看过的卷子汇总了一下大致是这么个分布题型出现频率常见分值拿分难度微操作序列、指令周期划分几乎必考6 到 10 分中等靠规则推微程序控制器、控制存储器计算高频8 到 12 分中等偏难位宽易算错流水线相关判别几乎必考4 到 8 分低会判就是送分流水线性能计算高频6 到 10 分中等公式记混就废填空、判断、名词解释、简答必考15 到 25 分低但最容易被轻视很多人复习时把精力全砸在两道大题上结果填空判断错一堆最后总分反而吃亏。这一章的小分题覆盖面特别宽而且几乎全部来自课本原话的变形性价比其实比大题高。1.3 开做之前先画三张底稿第5章所有大题本质上都是在三张图上“填空”图不熟答案就只能靠背题目一改参数就崩。指令周期状态图取指、间址、执行、中断四个阶段怎么连哪条路径是什么意思。间址和中断是可选的这一点判断题年年考。单总线数据通路图CPU 内部各寄存器、ALU、MAR、MDR 之间怎么走。做题时每写一条微操作都要问自己这条数据通路存在吗是不是要经过暂存器。流水线时空图横轴是时间纵轴是流水段先画空表格。凡是算吞吐率、加速比、效率的题画完图数格子比套公式稳得多。底稿画完之后你会发现那些看起来很长的大题其实就是在图上按顺序报出每一步的信号报错顺序或者漏掉一条读写命令分数就没了。2. 指令周期与数据通路微操作序列题的标准解法2.1 四条基本规律记住就能推微操作序列题之所以让人头大是因为答案看起来千变万化。但只要抓住四条规律绝大部分题都能自己推出来。第一只要和主存打交道就必须经过 MAR 和 MDR。单总线结构里地址先进 MAR数据出在 MDR中间没有别的通道可走。第二微操作序列和寻址方式是一一对应的。改成寄存器间接寻址就一定会多出“把寄存器内容送 MAR 再访存”的一步改成变址就一定会多出一次加法。第三读命令和写命令不能省。阅卷时控制信号也占分“1→R”“1→W”这种看着不起眼的一行漏了就是白丢。第四时序上先送地址再发命令最后才取数据。这个顺序错了逻辑上就不成立。2.2 例题写出 ADD (R0), R1 的完整微操作序列设机器为单总线结构指令含义是源操作数存放在 R0 所指向的主存单元里寄存器间接寻址另一个操作数在 R1结果写回 R1。取指周期(PC) → MAR 1 → R M(MAR) → MDR (MDR) → IR (PC) 1 → PC执行周期(R0) → MAR 1 → R M(MAR) → MDR (MDR) (R1) → R1这里有两个高频错误点。一个常见错误是把第一步写成(R0) → MDRR0 里存的是地址而不是数据地址必须先进 MAR这一步错后面全错。另一个是最后一行如果 ALU 只有一个输入端接总线另一个输入端需要暂存器 Y那么严格写法应该是(MDR) Y → R1中间还要有一步(R1) → Y。答题时最好先把机器结构假设写一句再写序列这样即使和标准答案的写法略有出入逻辑上也站得住。2.3 时钟周期、机器周期、指令周期的计数题这类题看着是算数其实还是考结构关系。举个完整的例子某机主频 100MHz也就是时钟周期 T 10ns。取指周期占 2 个机器周期执行周期占 4 个机器周期间址周期占 1 个机器周期每个机器周期包含 3 个时钟周期。不带间址的指令周期2×3 4×3 18 个时钟周期180ns。 带间址的指令周期2×3 1×3 4×3 21 个时钟周期210ns。 若统计下来有 30% 的指令需要间址那么平均指令周期 0.7×180 0.3×210 189ns。写成通式就是平均指令周期 各类情况出现概率乘以对应时钟周期数再求和最后乘时钟周期。需要注意的是题目如果给的是主频而不是周期先取倒数得到周期再开始算很多人直接拿主频去乘量纲就错了。2.4 这一步最容易错的地方除了上面说的顺序问题还有几个坑值得单独点出来。忘了 PC 加一。取指周期的最后一步(PC) 1 → PC经常被漏尤其是题目只问“取指周期需要哪些微操作”的时候。间址和执行顺序写反。间址周期一定在执行周期之前它的作用是把有效地址取回 IR 的地址字段。中断周期的隐指令写不完整。典型写法是0 → MAR把断点存到某个固定单元、1 → W、(PC) → MDR、(MDR) → M(MAR)然后把中断服务程序入口地址送 PC。不同教材对断点存放位置的约定不一样考试按自己课本的写法来。把“机器周期”当成“指令周期”。机器周期是完成一个基本操作的时间指令周期由若干机器周期组成这个包含关系判断题年年出现。3. 控制器设计题微程序容量计算与硬布线表达式3.1 微指令的三种水平编码怎么选微指令格式题的核心考点只有一个互斥的微命令才能放在同一个字段里。理解这一点后面的计算就都是顺水推舟。编码方式特点代价直接编码一个微命令对应一位译码最快字长最长控制存储器浪费大字段直接编码互斥微命令放进同一字段字段内再译码需要额外译码逻辑字长明显缩短字段间接编码字段含义再由解释字段决定省位最多控制逻辑最复杂判断两个微命令是否互斥就看它们能不能在同一时刻同时发出。比如“1→R”和“1→W”显然不能同时来属于互斥可以塞进一个字段“(PC)→MAR”和“(R0)→MAR”也都往 MAR 送数同样互斥。3.2 控制存储器容量的完整计算例题目某机共有 32 个微命令按互斥关系划分为 5 个字段各字段微命令数分别为 8、6、5、4、3另有判别字段 3 位、下地址字段 8 位。若共有 128 条微指令求微指令字长和控制存储器容量。第一步算每个字段需要几位。这里有个必须记住的规则每个字段都要留出一个“不操作”状态因为一个字段里的微命令虽然是互斥的但完全可以一个都不发。8 个微命令8 1 9 种状态取 2 的幂需要 4 位6 个微命令7 种状态需要 3 位5 个微命令6 种状态需要 3 位4 个微命令5 种状态需要 3 位3 个微命令4 种状态需要 2 位五个字段合计 4 3 3 3 2 15 位。微指令字长 15 3 8 26 位。控制存储器容量 128 × 26 3328 位也就是 416 字节。这一步最容易翻车的地方就是那个“加一”。少了它8 个微命令会被算成 3 位5 个会被算成 3 位这个恰好对后面整道题的数字全偏。另外还要注意题目问的是“位”还是“字节”容量单位换算错前面算得再对也没用。3.3 硬布线控制器把条件翻译成布尔式硬布线题的正确姿势是先把每个微操作写出来然后逐条问它在什么情况下发生。条件通常由三部分组成——指令译码信号、机器周期状态、时序节拍。举个例子某机中(PC) 1 FE M(MAR) → MDR FE IND EX·LAD 1 → R FE IND EX·LAD (MDR) → R1 EX·ADD其中 FE 表示取指周期IND 表示间址周期EX 表示执行周期LAD 表示取数指令的译码信号ADD 表示加法指令的译码信号。第一行的意思是PC 加一这个动作只在取指周期发生所以表达式就是 FE。第二行说明访存读数据这件事在取指、间址、以及“取数”类指令的执行周期都会发生所以是三者的逻辑或。写完之后能化简就化简但答题时不化简一般不扣分漏项一定会扣。写表达式的时候建议顺手在每个微操作后面标注它属于哪个周期阅卷老师看得清楚你自己也不容易漏。3.4 微程序与硬布线的对照以及选谁对比项微程序控制器硬布线控制器速度较慢每条微指令都要访问控制存储器快纯组合逻辑灵活性好改微程序即可修改功能差改功能往往要改电路规整性规整易于扩充不规整设计工作量大适用场合指令系统复杂、功能常变的机型指令系统简单、追求速度的机型遇到“该机宜采用哪种控制器”这类主观题答题逻辑是先看指令条数的多少再看对速度的要求。指令多且经常扩充选微程序指令少、时序要求苛刻选硬布线。把这层因果说出来比只写一个结论得分高得多。4. 流水线结构相关、数据相关、控制相关的判别与计算4.1 三种相关的快速判别法这三类相关名字听着抽象其实判断标准很接地气就看两条指令在“抢”什么。结构相关抢硬件部件。两条指令同一时刻都要访存或者都要用乘法器硬件只有一套那就冲突。数据相关抢数据。后一条指令要用前一条还没产生的结果按序流水线里主要表现为写后读也就是后一条读的寄存器是前一条将要写的。控制相关抢方向。遇到转移指令取指阶段还不知道该往哪取取错了就白取。一句话口诀抢部件的叫结构相关抢数据的叫数据相关抢方向的叫控制相关。判断题里经常给出一个具体场景让你判别用这个标准套基本不会错。4.2 性能计算把时空图画出来再套公式题目一条 5 段流水线每段时间均为 10ns连续执行 100 条指令且不考虑任何相关。完成时间T (k n - 1) × Δt (5 100 - 1) × 10 1040ns。 顺序执行时间100 × 5 × 10 5000ns。 加速比S 5000 / 1040 ≈ 4.81。 吞吐率TP 100 / 1040 ≈ 0.0962 条每纳秒也就是约 9.62 × 10 的七次方条每秒。 效率E S / k ≈ 4.81 / 5 ≈ 96.2%。当指令条数趋于无穷时加速比趋近于流水段数 5效率趋近于 100%吞吐率趋近于 1/Δt也就是每秒一亿条。这个极限结论必须记住填空题很爱考。现在加一点现实条件如果每两条相邻指令之间都要插入 1 个气泡100 条指令共插入 99 次完成时间变成 1040 99 × 10 2030ns加速比掉到约 2.46。这个对比特别能说明一件事流水线的性能上限是段数但实际值完全被相关拖累。4.3 数据旁路和气泡答案里必须写清楚很多同学写“插入气泡解决数据相关”其实只答了一半。完整的答案应该区分三种手段并说明各自适用场景数据旁路转发把 ALU 已经算出的结果直接送到下一条指令的 ALU 输入端省掉“写回寄存器再读出”这一轮等待。它能消除大部分相邻的数据相关。插入气泡硬件上无法通过旁路解决时让流水线停顿一个或两个周期插入空操作。代价是牺牲性能。编译调度由编译器把不相关的指令挪到相关指令之间用有用的指令填满空档。这是软件层面的办法硬件不加成本。答题时如果能补一句“旁路解决的是结果已产生但尚未写回的情况若前一条指令的结果迟迟算不出来就只能停顿”得分会更稳。4.4 超标量与超流水线题目的解题要点这两类题在时空图上的表现完全不同混起来就全错。超标量是把“发射宽度”加大一个时钟周期并行发射 m 条指令时空图上表现为同一时刻纵向排着 m 条指令硬件上要复制执行部件。理想情况下加速比约为 m。超流水线是把“时间片”切细一个时钟周期再分成 p 个更小的时间片流水段数增加同一条指令需要更多个时钟周期才能走完但指令之间的间隔缩短。时空图上表现为指令在时间轴上排得更密。理想加速比约为 p。两者都会受相关和资源限制实际加速比远达不到理论值这句话写进答案里通常算一个加分点。5. 填空、判断、简答小分题反而最容易丢分5.1 判断题的六个高频陷阱题目表述判断理由流水线技术可以提高单条指令的执行速度错提高的是吞吐率单条指令执行时间不会缩短甚至略有增加指令周期一定包含取指、间址、执行、中断四个阶段错间址和中断阶段是可选的不一定出现MAR 和 MDR 是用户可见寄存器错它们对用户不可见属于 CPU 内部使用的寄存器在微程序控制器中一条机器指令对应一段微程序对这正是微程序控制器的基本思想寄存器间接寻址比直接寻址访存次数少错间接寻址要多访存一次用来取有效地址硬布线控制器比微程序控制器更容易修改功能错结论正好相反做判断题的诀窍是找绝对化词语。“一定”“必然”“只要就”这类词出现时先想一想有没有反例出题人特别喜欢在可选项上做文章。5.2 简答题的分点模板简答题是踩点给分点齐比写长重要。几个高频题的答点如下。“简述 CPU 的基本功能”指令控制、操作控制、时间控制、数据加工、中断处理。五个点缺一个扣一分写成一段长句子反而容易漏。“简述微程序控制器的工作原理”把机器指令的操作分解成微操作序列编成微程序事先存入控制存储器执行时按地址逐条取出微指令产生所需的微命令由下地址字段决定下一条微指令的位置。“比较指令周期、机器周期、时钟周期”先给定义再说明包含关系最后各举一个例子。三层结构写清楚基本满分。5.3 名词解释的“三要素”写法名词解释不要只写一句定义按“定义 组成或结构 作用”三要素来写字数不多但很完整。比如微指令在微程序控制器中由若干微命令组成、存放于控制存储器中的一条指令用于产生完成某个微操作序列所需的全部控制信号。再比如指令周期取出并执行一条指令所需的全部时间通常由若干个机器周期组成是衡量机器速度的重要指标之一。6. 跨版本补充题型Cache 计算、I/O 传送方式与组间进位6.1 Cache 的两类计算题套路极其固定如果你们第5章讲的是存储系统课后题基本逃不出两类。第一类是平均访问时间。设 Cache 访问时间 10ns主存访问时间 100ns命中率 95%则平均访问时间 0.95 × 10 0.05 × 100 14.5ns相对只用主存的加速比约为 100 / 14.5 ≈ 6.9。这类题的唯一陷阱是“未命中时要先访问主存再访问 Cache”还是“直接访问主存”两种模型算出来的结果不同按课本约定来。第二类是地址划分。设主存容量 4MBCache 数据区 32KB块大小 32B采用 4 路组相联。块数 32KB / 32B 1024 块组数 1024 / 4 256 组因此组号占 8 位块内地址占 5 位主存地址共 22 位标记占 22 - 8 - 5 9 位。字段位数说明标记9 位用于判断是否命中组号8 位256 组决定放到哪一组块内地址5 位32B 块寻址块内字节算这类题一定要先把“块数—组数—位数”这条链走一遍中间任何一步取整错了后面全崩。另外别忘了写策略这道附加题写直达配合非写分配写回配合写分配理由分别是实现简单和减少访存次数。6.2 若第5章是输入输出系统三种传送方式对比对比项程序查询中断方式DMA 方式CPU 参与程度全程等待利用率最低传输时 CPU 可做别的事只在开始和结束时干预数据通路经 CPU 中转经 CPU 中转直接在主存与外设间传适用场合简单低速设备随机出现的低速设备高速大批量数据响应时机无一条指令执行结束后每个存储周期结束后可窃取中断响应必须满足的条件是有中断请求、当前指令已执行完毕、系统处于开中断状态。这三个条件几乎每年都会以填空或判断的形式出现。6.3 顺带说一道进位题组内并行、组间串行加法器那块内容虽然不总在第5章但搜索量一直很高。核心结论是组内可以并行先行进位组间如果采用串行进位速度提升就有限。设每 4 位一组共 4 组每组内部的进位采用先行进位组进位产生信号 G 和传递信号 P 各需 1 个门延迟。组间串行时最高位所在的组要等低位三组的进位依次传上来大致需要 3 级传递延迟若改为组间也并行也就是常说的双重分组跳跃进位所有组进位可以一次产生延迟能压到 2 级左右。数值会随教材给的延迟模型变化但结论是一致的串行进位把并行性的收益吃掉了一大截这也是为什么高性能加法器最终都走组间先行进位的路子。7. 配套实验与答案自检把课后题真正用起来7.1 微程序实验和控制存储器计算是同一件事组原实验里最常见的就是微程序控制器实验自己设计几条微指令填进控制存储器再跑一条机器指令看结果对不对。做过这个实验之后你会发现3.2 节那道容量计算题突然变得特别好懂——字段怎么划、为什么要留不操作状态、下地址字段为什么要留够位宽全都是实验里被卡过的地方。所以我的建议是先把实验做一遍再回头做题效率能高不少。7.2 流水线实验和时空图互相印证流水线实验里能看到波形每一拍的信号变化都摆在那里。做题时画的时空图本质上就是把波形图抽象成格子。如果算出来的完成时间和波形上数出来的周期数对不上先检查是不是漏算了相关的停顿周期一般问题都出在这。7.3 三种自检方法比反复对答案有用第一量纲和数量级验算。时间以纳秒为单位容量分清楚位和字节加速比不可能小于 1效率不可能超过 100%。不符合这些常识一定算错了。第二用极端情况验算公式。令 n 1流水线完成时间应等于 k × Δt把 1 代进公式看对不对能迅速判断公式是否记错。第三用时空图反推。把算出的时间画成格子数一遍数和式子对不上以图为准公式多半套错了。7.4 关于答案本身说几句实话我见过好几个印次的答案页出现过题号错位、参数抄错、甚至和课本例题结论矛盾的情况。所以遇到“答案和推导不一致”时正确的处理顺序是先检查自己的假设比如总线结构、寻址方式、数据位宽有没有和题目一致再检查计算过程最后才怀疑答案。把每一步的条件和推导写在旁边考场上即使结果和标准答案有出入中间过程分也拿得到。我自己最大的体会是第5章的题不能靠背它更像一套手工流程先认题型再认假设然后按固定动作往下推。推得多了看到题目里的“单总线”“4 路组相联”“5 段流水线”这些词脑子里会自动跳出该走哪条路。真要说有什么捷径大概就是把同一类题连着做三道把参数换掉再做两道比抄十页答案管用得多。