期末成绩出来那天,某位同学对着答题卡反复看了半天,后面两道大型计算题流程、公式、结果全对,填空题却错了七道。我特别能理解这种憋屈:计算机系统结构这门课,计算题考“你会不会”,填空题考“你准不准”,两者完全不是一回事。计算题让你写出推导过程,允许你有思考的余地;填空题要求的是一字不差的精确表达,术语多一个字少一个字,公式里分母到底是“改进后系统时间”还是“未改进系统时间”,直接就判死,没有任何通融。
这篇文章就是冲着这个痛点来的。我会把系统结构课程里最高频的填空知识点、命题套路、易错陷阱按专题拆开讲,每一章都配了典型填空实例和解析,最后还附了一组自测题。不管你是期末备考、考研复习,还是自学系统结构想查缺补漏,这篇都可以直接当复习清单用。
1. 填空题为什么是系统结构考试里最容易白丢分的部分
1.1 填空题的四种命题套路
系统结构的填空题虽然题型小,但出题方式其实高度套路化,总结下来无非四类。
第一类是记忆型填空,考的是专有名词和定义的精确表述。比如“在Flynn分类法中,多指令流多数据流的缩写是______”,或者“RISC的中文全称是______”。这类题目难度不高,但容易在英文缩写、汉字顺序上翻车。第二类是计算型填空,考的是公式运用,比如“某程序共执行10^6条指令,平均CPI为1.5,主频为1.5GHz,则CPU执行时间为______”。第三类是辨析型填空,这是失分重灾区,它不会直接问你定义,而是给一个具体场景,让你判断应该填哪个概念。比如“某Cache采用直接映射,主存块号与Cache行号的对应关系是______来确定”。最后是综合型填空,往往把两三个知识点放在一个空里,比如“某系统可改进部分占比为40%,对该部分加速4倍后,系统加速比为______”,既要你理解Amdahl定律,又要你会算。
我见过很多复习得不错的同学,大题的每个步骤都写得好好的,一遇填空就露馅。原因很简单:大题做对可能靠“思路”,但填空能填对,靠的是每个概念在脑子里没有模糊地带。
1.2 填空题失分的本质:概念精确度不够
举一个最常见的例子。“CPU执行时间”的公式可以写成“CPU时间 = 指令数 × CPI × 时钟周期”,但很多同学做题时把“指令数”填成“程序中静态指令条数”。严格来说,公式里的指令数是动态指令数,也就是程序实际执行过程中被取出并执行的指令总数。循环体回跳十次,同一段静态代码会贡献十次动态指令数。填空题一旦出现“程序含500条指令,其中某循环执行20次”这样的条件,那给你设置的陷阱就是“指令消费次数”和“指令条数”的混淆。
再比如说,选择题里你可以靠排除法蒙对,但填空没法蒙。系统结构这门课的特色恰恰是“每个术语都有精确的使用场景”,Cache的“命中时间”和“命中率”就差了两个字,公式却完全不同。所以填空题的本质,是在逼你把所有概念从“眼熟”升级到“能默写、能套用”的程度。这个坎不迈过去,考试时就会反复出现“这个空我好像见过,但不确定”的纠结状态。
1.3 填空题对复习的隐藏价值
不要只把填空当成考试的配菜。我很建议复习时先用填空题自测,因为填空题能暴露出你知识体系里的“模糊点”。做选择题时,四个选项会提示你正确的范围;做大题时,条件会暗示你该用哪个公式。只有填空题,给你一个空,逼你自己从整个知识树里把正确答案挖出来。一次挖不出来,说明这个知识点你并没有真正掌握,只是“见过”而已。所以这篇文章里的每一个例题,都建议你先独立填,再看解析,把填错的题目标记出来,复习后期重点回填。
2. 性能公式与Amdahl定律:填空里的四个高频陷阱
2.1 CPU性能公式的完整链条
系统结构第一章的核心,就是回答一个问题:怎么判断一台计算机快不快?书上给出的答案是CPU执行时间,公式链条是这样的:
- 基本式:CPU执行时间 = 程序总时钟周期数 × 时钟周期时间
- 展开式:CPU执行时间 = 指令条数(IC) × 平均每条指令时钟周期数(CPI) × 时钟周期时间
- 频率版本:CPU执行时间 = 指令条数(IC) × 平均CPI ÷ 时钟频率
填空题最爱考的地方,是第一式到第二式的“平均”两个字。CPI全称是Cycles Per Instruction,它是所有指令的时钟周期数的平均值。混入CPI、指令数、时钟频率三个量时,单位换算也要小心。主频1.5GHz,时钟周期是1/(1.5×10^9)秒,不是1/1.5ns这种约等于的写法。
我给大家一个典型的填空:某程序动态指令数为2×10^6条,平均CPI为2,处理器主频为2GHz,则CPU执行时间为______。答案是2×10^6×2÷(2×10^9)=2×10^-3秒=2ms。很多同学会填成2×10^3ms,说明他们把主频换算成秒时掐错了量级。记牢一个经验:当主频以GHz为单位时,最终时间的单位通常落在毫秒级。
2.2 MIPS和MFLOPS的准确表述
MIPS是Million Instructions Per Second,每秒执行多少百万条指令。公式是:
MIPS = 指令数 ÷ (执行时间 × 10^6) = 主频 ÷ (平均CPI × 10^6)
这里的坑在于,MIPS用来衡量整机执行速度,和指令集直接挂钩。同样主频的机器,执行简单指令多的程序,MIPS值就高,但它不代表机器“更聪明”。填空题有时会这样出:“某处理器主频为2GHz,平均CPI为4,则其MIPS值为______”。答案就是2×10^9 ÷ (4×10^6) = 500。注意单位,是500MIPS,也就是每秒五亿条指令。
MFLOPS是用来衡量浮点运算能力的,全称Million Floating-point Operations Per Second。它比MIPS更麻烦的地方在于,浮点运算次数的统计方式不同程序差异极大,所以这个指标更常用于科学计算的性能对比,而不是通用处理器性能对比。填FLOPS类指标时,一定要看清是“浮点运算次数”还是“指令条数”,这俩容易在题干里混淆。
2.3 Amdahl定律里最容易填反的变量
Amdahl定律的公式可以写成加速比 S = 1 / [(1 - Fe) + Fe / Se],其中Fe指的是可改进部分占原执行时间的比例,Se是该部分改进后相对于改进前的加速倍数。
我见过最多的错误,是把Fe理解成“改进后所占的比例”。这两个方向完全不同。举个例子:某程序原本执行时间20秒,其中10秒花在浮点运算上,把这部分加速5倍,那么Fe=10/20=0.5,Se=5,加速比=1/(0.5+0.5/5)=1/(0.5+0.1)=1/0.6≈1.67倍。如果你把Fe填成0.1或者把Se放分母里当0.5,结果基本就是错的。
填空还有一种考法:Fe不变,问最大加速比能达到多少。这时Se趋向无穷大,公式变成 1/(1-Fe),也就是加速比的上限只由不可改进部分决定。比如可改进部分占80%,极限加速比就是1/0.2=5倍。这个结论在很多考题里是作为一个空单独出现的,答案本身很好记,但你得知道它是从公式极限推出来的。
2.4 性能公式填空题实操演练
给大家一组快速自测,覆盖本节的三个核心空位:
- 某处理器主频为1.2GHz,执行某程序用时0.5秒,该程序动态指令数为3×10^8条,则其平均CPI = ______。
- 某系统改进前执行某任务耗时50秒,其中输入输出占用20秒。若将输入输出部分加速2倍,系统理论加速比 = ______。
- 程序执行时间公式中,IC表示______,CPI表示______,二者乘积的单位是______。
答案解析:第一问,平均CPI = 执行时间 × 主频 ÷ 指令数 = 0.5 × 1.2×10^9 ÷ (3×10^8) = 2,所以填“2”。第二问,Fe=20/50=0.4,Se=2,加速比=1/[(1-0.4)+0.4/2]=1/(0.6+0.2)=1.25,填“1.25”。第三问顺次填“动态指令条数”“平均每条指令时钟周期数”“时钟周期数”。第三问是典型的概念空,考的就是你对CPI这个缩写的完整理解,很多同学只记得字母,中文意思反而搁浅了。
3. 指令系统与寻址方式:概念辨析型填空的提分区
3.1 七种寻址方式的“一句话记忆法”
寻址方式是系统结构填空的常青树,因为计算机组成原理和系统结构都会考,但它考的角度略有不同。系统结构更关注“地址如何形成、拓展到哪儿”。
七种基本寻址方式可以这样快速填出来:
- 立即寻址:操作数直接在指令中给出,执行最快,地址字段就是操作数本身。
- 直接寻址:指令中给出操作数所在内存单元的地址。
- 间接寻址:指令中给出的是操作数地址的地址,也就是地址字段指向一个内存单元,而该单元的内容才是操作数的地址。
- 寄存器寻址:操作数在寄存器中,指令给出寄存器编号。
- 寄存器间接寻址:指令给出寄存器编号,寄存器内容才是操作数在内存中的地址。
- 变址寻址:有效地址 = 基准地址(由指令或寄存器给出)+ 变址寄存器中的偏移量,常用于数组和循环访问。
- 基址寻址:有效地址 = 基址寄存器内容 + 指令中的偏移量,常用于程序定位。
填空最容易考变址和基址的区别。我教你一个硬记方法:变址的“变”字,意思是地址随着变址寄存器里的值变化,循环里每轮都让变址寄存器加步长,典型用途是数组遍历;基址的“基”字,是地基、基准的意思,基址寄存器里放的是程序的起始位置,加上指令里的偏移量定位到具体数据或语句,裸机环境下常和重定位搭配出现。题目如果出现“用于数组下标访问______寻址”,填变址;如果出现“用于程序起始地址加偏移实现重定位______寻址”,填基址。
3.2 指令格式的关键填空点
指令格式这块,填空喜欢考“定长指令字”和“变长指令字”的取舍。定长指令字让每条指令长度一致,硬件译码简单,流水线容易取指,这是RISC的核心特征之一。变长指令字按需分配长度,能节省存储空间,但译码复杂。如果一个空问“RISC处理器倾向采用______指令格式”,答案就是“定长”。
还有操作码扩展的问题。固定长度的操作码简单,但指令数量有限;可变长操作码设计常用“扩展操作码技术”。常考的一个空是:某处理器指令字长16位,地址码字段4位,用扩展操作码技术设计出15条三地址指令、14条二地址指令、31条一地址指令和16条零地址指令,那么三地址指令操作码占据______位。这个至少要理解,三地址指令已经把16位中的12位分配给了三个地址码,操作码只剩4位,所以答案填“4”。这一问本质是在考“操作码字段位数 = 指令字长 - 地址码总位数”。
3.3 RISC与CISC辨析填空题
RISC和CISC的对比如下表,填空一般直接挖掉其中某格让你补:
| 比较项 | CISC | RISC |
|---|---|---|
| 指令规模 | 多,功能复杂 | 少,功能精简 |
| 指令长度 | 可变 | 固定 |
| 寻址方式 | 多 | 少 |
| 执行方式 | 微程序控制为主 | 硬布线控制为主 |
| 寄存器数量 | 较少 | 多 |
| 流水线支持 | 较难 | 很容易 |
常考的空位包括:“CISC处理器主要采用______控制方式”,答案是微程序;“RISC处理器的指令长度通常是______,便于流水线取指”,答案是固定;“RISC处理器的通用寄存器数量较______,以减少访存次数”,答案是多。还有一道非常经典的辨析题:某个关于CISC特性的说法是“指令功能简单,长度固定”,这个空会问你“该说法是对还是错,若错请改正”。严格说这是改错填空,答案应该写成“错误,指令功能简单、长度固定是RISC的特性”。
3.4 分支延迟槽与指令调度
流水线之外的指令系统考点里,分支延迟槽是很多教材的保留节目。MIPS等典型RISC架构会把分支指令后的一条指令所在的位置称为“分支延迟槽”,无论分支是否跳转,该槽中的指令都会被执行。填空题通常这样考:“为避免流水线分支开销,RISC架构常采用______技术,将分支后一定会执行的指令放到延迟槽中。”答案就是“分支延迟槽”或“延迟槽”。
这里有个需要辨析的概念:放到延迟槽里的指令必须满足“分支成功和失败时都能安全执行”的条件,编译器会通过指令调度把合适的指令移进槽里。如果实在找不到合适指令,就放一条空操作指令NOP。有些填空会进一步问“延迟槽中如果没有合适的指令,应填入______”,答案是NOP。这种题目看起来偏,但在考察指令调度的教科书版本里出现过不止一次。
4. 存储系统填空:Cache映射、替换与虚拟存储的重灾区
4.1 三种Cache映射方式的准确表述
存储系统是系统结构填空的重头戏,Cache和虚拟存储加起来往往能占到十分以上。三种映射方式必须能默写:
- 直接映射:主存中第i块只能映射到Cache中第(i mod C)行,其中C是Cache行数。特点是简单、冲突率高,不需要淘汰算法。
- 全相联映射:主存中任意一块可以存放到Cache的任意一行。冲突率最低,但查找时要和所有行比较,硬件成本高。
- 组相联映射:把Cache分成若干组,每组包含若干行,主存块可以映射到指定组内的任意一行。这是直接映射和全相联的折中方案。
填空常见的考法有三个。第一,问“直接映射下主存地址中的Cache行号占______位”,答案是log2(Cache行数)取整,比如Cache有64行就占6位。第二,问“组相联映射中组号占______位”,答案是log2(组数)取整。第三,问“组相联映射在Cache行数相同时,每组路数越多,冲突率越______”,答案是低。这些其实都是送分题,关键是你要把“行”“组”“块”三个字对应清楚。
4.2 替换算法与写策略的选择场景
替换算法的口诀是“LRU最近最少使用、FIFO先进先出、LFU最不经常使用、Random随机”。填空爱考的是:哪个算法既考虑了最近性又考虑了低频性,答案是LRU;哪个算法实现最简单但可能抖动,答案是FIFO或Random。
写策略的区分也很经典。Cache命中时写操作的处理方式有两种:写直达(Write Through)是同时写Cache和主存,保证一致性但访存次数多;写回(Write Back)是只写Cache,并置脏位,只有当该Cache行被替换时才写回主存,访存次数少但复杂度高。填空题经常这样出:“采用______写策略时,Cache行被替换前必须检查______标志位。”空位答案是“写回”和“脏”。这道题特别能考出你是否理解写回策略的实现机制。
还有两种处理Cache未命中时写操作的策略:写分配(Write Allocate)和写不分配(No-Write Allocate)。写直达常搭配写不分配,写回策略常搭配写分配。填空如果出现“写回策略通常配合______负载策略”,答案是写分配。这块纯靠记,别混淆。
4.3 平均访存时间公式填空
Cache的平均访存时间公式是:平均访存时间 = 命中时间 + 失效率 × 失效开销。由于命中时间里已经包含了Cache访问时间,所以失效率这一项乘的是失效时额外的开销,不是全部主存访问时间。
举个具体填空:某Cache命中时间为2个时钟周期,失效率为5%,失效开销为50个时钟周期,则平均访存时间为______。计算过程是2 + 0.05×50 = 4.5个时钟周期,所以填“4.5”。很多人会把50直接当成主存访问时间,然后在命中时间里再加一次主存时间,这是错的。失效开销的定义就是从发现失效到数据从下一级存储取回并能继续执行之间的所有额外代价,再算一遍就重复计数了。
接下来是两级Cache的平均访问时间,这个公式比上面稍复杂:平均访存时间 = L1命中时间 + L1失效率 × (L2命中时间 + L2失效率 × 主存失效开销)。题目如果只给了一级Cache,就直接套上面的公式。
4.4 虚拟存储与TLB的常考空位
虚拟存储系统里的页式管理,填空爱考古诺的几件事:逻辑地址结构、页表项内容、缺页中断和TLB。
页式虚存中,逻辑地址被拆成页号和页内偏移量。页号用来查页表,页表项里包含物理页号、有效位、保护位、修改位(脏位)、访问位等。一个经典填空:“页表项中的______位用来表示该页是否已被修改,替换时需判断是否写回磁盘。”答案是“修改位”或“脏位”。另一个填空:“缺页时CPU需要执行______,由操作系统负责在磁盘与主存之间交换页面。”答案是“缺页中断”或“页故障处理”。
TLB是最容易被填空绕晕的点。TLB的全称是Translation Lookaside Buffer,可以理解为页表项的Cache。它容量小、速度快,通常采用全相联或组相联映射。填空直接问“TLB常采用______映射方式”,填“全相联”或“组相联”都可以算对,取决于教材具体实现,但如果你填“直接映射”,多半会被认为是错误选项。原因在于TLB需要快速并行比较,全相联或组相联在硬件上更合适。
4.5 存储结构填空题实操演练
- Cache共4行,采用直接映射,主存块号8应映射到Cache第______行。
- 某程序访存5000次,其中Cache失效200次,则Cache命中率为______,若每次失效需要从主存读取数据,则Cache失效率为______。
- 页式虚存中,一个虚拟页被访问时发现页表项中的有效位为0,此时应产生______。
第一问答案:8 mod 4 = 0,填“0”。第二问答案顺次为“96%”和“4%”,注意命中率和失效率相加等于1,有的题目故意一个填成90%,另一个填成4%,逻辑上出错率很高。第三问关键是“有效位为0”意味着该页不在主存中,访问它必然触发缺页,填“缺页中断”。这种题看起来基础,但很多复习到后期的人反而因为过于自信而出错。
5. 流水线与并行处理:五组必须背下来的填空考点
5.1 流水线基本公式与加速比
流水线部分系统结构填空题相对稳定,考来考去就是基本公式、冒险、分支预测、超标量四个方向。
先记一个最常用的公式:一条有k段的流水线处理n条指令,理想情况下执行时间为(k+n-1)个时钟周期。当n远大于k时,吞吐率趋近于每个周期完成一条指令。填空题目比如:“某4段流水线连续执行100条指令,理想执行时间为______个周期。”答案就是4+100-1=103。如果把“理想”两个字去掉,题目就得考虑流水线停顿,没有额外条件没法算,所以考试时“理想”这两个字是给分点。
加速比的计算公式是:加速比 = 顺序执行时间 ÷ 流水线执行时间。如果某流水线有k段,执行n条指令,理想加速比 = (k×n) ÷ (k+n-1)。当n→∞时加速比趋近k,也就是理论最大加速比等于段数。填空问“流水线的最大理论加速比等于______”,答案是流水线段数。
5.2 三类冒险的精确配对
流水线冒险分为结构冒险、数据冒险、控制冒险三类。
结构冒险指的是硬件资源冲突,比如只有一个存储器时,取指和访存同时请求就会冲突。最经典的解决方案是哈佛结构,让指令存储器和数据存储器分开,或者把Cache分成指令Cache和数据Cache。填空问“解决取指和访存资源冲突,通常将Cache分成______和______”,答案是“指令Cache”和“数据Cache”,很多教材直接写成I-Cache和D-Cache。
数据冒险中必背的是三种相关:写后读(RAW)、写后写(WAW)、读后写(WAR)。RAW发生在后一条指令需要读前一条指令还未写回的数据时,这是最常见、必须解决的;WAW和WAR在有序的经典流水线中不会出现,主要在乱序执行或某些特殊流水线中有意义。填空如果问“典型五级流水线中,主要需要解决的数据冒险类型是______”,填“写后读(RAW)”。如果给出具体指令序列判断冒险类型,比如“R1 = R2 + R3;R4 = R1 + R5”,第二条指令对第一条指令的R1构成什么冒险,答案就是“写后读冒险(RAW)”。
控制冒险源于分支指令改变指令流向。解决思路包括:冻结流水线、预测分支、延迟槽等。填空问“分支指令在______阶段产生分支目标地址,在______阶段决定是否跳转”时,要看参考教材的是哪条流水线。常见五级流水线中,指令译码阶段已经能算出目标地址,执行阶段才能判断分支条件。这类题比较依赖教材版本,复习时最好以你的指定教材表述为准。
5.3 超标量、超流水线和VLIW
并行处理的名词辨析也是填空常客。
- 超标量(Superscalar):在一个时钟周期内发射多条指令,硬件动态调度。
- 超流水线(Superpipeline):把每个流水段再细分,以更高的频率执行,但每个周期仍然只能发射一条指令。
- VLIW(Very Long Instruction Word,超长指令字):由编译器在编译期把多条可并行执行的操作打包进一条超长指令,硬件复杂度低,但非常依赖编译器能力。
填空题常这样出:“每个时钟周期可发射多条指令的处理器称为______处理器”,答案是“超标量”;“VLIW的主要特点是把指令的并行性由______负责挖掘,而不是由硬件动态调度”,答案是“编译器”。前者考硬件调度,后者考软件调度,这两个空在历年试卷里出现频率很高。
5.4 分支预测与预测准确率填空
分支预测的两种方式是静态预测和动态预测。静态预测每次遇到分支指令都采用同一种预测方向,比如“总是预测不发生分支”,实现简单但准确率有限。动态预测根据分支指令的历史行为动态调整预测方向,准确率更高,典型实现是分支历史表,用分支历史模式去查表。填空如果问“现代高性能处理器为了提高分支预测准确率,通常采用______预测方式”,答案是“动态”。
还有一个容易考的计算空:如果分支预测准确率为95%,处理器共有100万条分支指令,预测错误是多少?答案是5万条。这个基本就是百分比应用题,但系统结构喜欢把它和“每条预测错误导致流水线停顿开销”结合起来考,所以不要只算比例,要看错误次数乘每次惩罚周期。
6. 12道综合自测填空题:覆盖全章高频考点
这一组题我没有按章节拆分,而是打乱混合,模拟真实考试的感觉。建议先独立做一遍,再看后面的答案与解析。
- 在Flynn分类法中,单指令流多数据流的缩写是______。
- 改进前某程序执行时间为100秒,可改进部分占60%,对该部分加速3倍后系统加速比为______。
- 某处理器主频为2.5GHz,平均CPI为1.25,则该处理器的MIPS值为______。
- 基址寻址的有效地址等于______加上指令中的偏移量。
- RISC通常采用______指令格式,指令长度固定,有利于流水线取指。
- Cache采用4路组相联映射,共有64行,则Cache分为______组,组号需______位二进制数表示。
- 采用写回策略的Cache中,每个Cache行通常设置一个______位,用于标记本行是否被修改过。
- 某Cache命中时间为1个周期,失效率为4%,失效开销为40个周期,则平均访存时间为______个时钟周期。
- 页式虚拟存储器中,TLB存放的是最近使用的______,用于加快地址转换过程。
- 某5段流水线执行100条指令,理想情况下所需时钟周期数为______。
- 在某条指令的译码阶段,把计算结果寄存器提前转发给后续指令需要的功能部件,以解决数据冒险的技术称为______。
- VLIW处理器由______负责挖掘指令级并行性。
答案与点评:
- 答案“SIMD”,全称Single Instruction Multiple Data。对应四类计算机体系结构中的第二类。
- 答案“1.67”。Fe=0.6,Se=3,加速比=1/[(1-0.6)+0.6/3]=1/(0.4+0.2)=1.67。注意这里的计算是保留两位小数即可。
- 答案“2000”。MIPS=2.5×10^9÷(1.25×10^6)=2000。填“2000MIPS”也可以,格式要看清题目的空位要求。
- 答案“基址寄存器内容”。这是基址寻址的定义式,不要填成“变址寄存器内容”。
- 答案“定长”。CISC用变长指令、RISC用定长指令,这是对比型填空的高频空位。
- 答案“16组”“4位”。64行分成4路一组,组数=64÷4=16,log2(16)=4位。
- 答案“脏”。脏位在行被替换时决定是否写回主存。
- 答案“2.6”。1+0.04×40=2.6个周期。记住公式:命中时间 + 失效率×失效开销。
- 答案“页表项”。TLB可以理解为页表项的Cache,里面存的是虚拟页号到物理页号的映射。
- 答案“104”。k+n-1=5+100-1=104个周期,这是理想流水线执行时间的核心公式。
- 答案“转发”或“旁路”(Data Forwarding / Bypassing)。它解决的是写后读冒险,不需要等待指令写回寄存器。
- 答案“编译器”。VLIW把并行性挖掘工作前移到编译期,硬件执行时不做动态调度。
7. 备考填空题的三条实用经验:关键词法、清单法、回填法
7.1 关键词记忆法:把长定义压缩成三四个词
系统结构里很多定义是“大长句”,比如“Cache是位于CPU与主存之间的小容量高速存储器,用于保存主存中被频繁访问内容的副本”。靠死背很容易混。我的做法是拆关键词:小容量、高速、位于CPU与主存之间、副本,四个词记住,剩下的表达可以在考场上自己组织。填空答案一般也只认核心术语,不太在意修饰语。
这个方法尤其适合处理那些容易丢分的“纯概念空”。比如问“虚拟存储器的作用是什么”,你只要填出“扩大主存容量”和“使编址空间不受物理内存限制”两个核心点,就能拿到大部分分数。关键词法还能帮你在考前快速过一遍所有名词——把每章的核心名词列出来,每个名词只写三四个关键词,一页纸就能覆盖整本书。
7.2 易错点清单法:把“填错过的空”收集起来
复习后期最重要的不是再看一遍书,而是把你错过的填空集中起来,做成一张易错清单。我当年复习时专门留了一个文档,记录那种“一看答案就恍然大悟、一做原题又错”的题。比如“变址寻址的变址寄存器内容由用户设定,基址寻址的基址寄存器内容由系统设定”“MIPS公式里分母的10^6”“Amdahl定律中Fe是改进前比例”……这些错点汇总在一起,考前翻一遍非常有冲击力。
清单不用写太多解释,就写“题干关键词→正确填空”,比如:看到“Cache行数64→地址字段6位”“看到‘脏’字→写回策略”“看到‘数组循环’→变址寻址”。形成这种条件反射,考场上做题速度会明显加快。
7.3 回填法与答题规范细节
最后一个经验叫“回填法”,专门用来对付综合型的填空。很多填空设计成一句话里挖三四个空,如果你只单个空去想,很容易被绕进去。我的做法是先把整句话读完,再用自己的话把整句意思复述一遍,心里把上下文补成一个完整句子,然后确定每个空位的词性。比如“某Cache采用______映射,主存块i映射到组号为i mod ______的组内任意一行”,读完整句你就能判断第一个空填“组相联”,第二个空填“组数”。如果只盯着第一个空,你可能会纠结到底是全相联还是组相联。
答题规范上也别忽视细节。填数字时注意题目有没有给出单位要求,如果问“时间”而题目明确说“以毫秒为单位”,你就把计算结果换算成毫秒再填,不要直接扔一个秒的数字进去。填英文缩写时注意大写,SIMD、MIMD、CPI、MIPS这类缩写全大写是最稳妥的。填术语名称时尽量写全称,不要写“href”这类不规范的简写。
我在实际复习中还有一个个人习惯:每次模考完,我会花十分钟把填空题的错题按“计算错误、概念混淆、单词拼写、审题失误”四类归类,然后统计哪一类最多。多数人最后都会发现概念混淆占大头,这时候就说明知识点还是不够精确,需要回到教材原句去把定义抠清楚。题量不在多,每做一遍都搞清楚为什么填这个、为什么不能填那个,比囫囵吞枣做一百道题有用得多。
系统结构的填空题,说到底就是把“听过、看过、算过”升级成“能精确默写、能辨析边界、能稳定输出”的过程。这个过程没有捷径,但有方法。上面这些考点和自测题,都是我实际刷题过程中反复遇到的真实高频点,你可以直接拿来当复习材料,也可以按我最后说的三条经验,把自己最容易错的填空整理成一份专属清单。祝这学期的考试和备考都顺顺利利,少在填空上丢不该丢的分。