# 🚀 02325《计算机系统结构》大题/应用题通关全解宝典(笑傲考场版)

1 阅读4分钟

导读与服用说明

计算机系统结构的主观应用题在自考中独占 40 分(简单应用题 2×10 分 + 综合应用题 2×10 分),可以说是“得大题者得天下,失大题者来年见”。

本宝典针对官方核心主观题汇总中的 全部 13 种核心应用题型,彻底剥离枯燥的教条说教,采用**“幽默人话剖析 + 考点透析 + 原题拆解 + 考场秒杀模板”**的降维打击模式,带你把这 40 分稳稳揣进口袋!


目录索引(十三大必考神级题型)


题型一:浮点数尾数基值与表示范围

🎭 考点人话与爆笑透析

在计算机里,浮点数就像是“科学计数法”:N=mrmeN = m \cdot r_m^e

  • 阶码 pp:决定了数字的“大局观”(指数有多大,数字能在银河系漂多远)。

  • 尾数 mm:决定了数字的“精细度”(有效数字有多准)。

  • 尾数基值 rmr_m:大部分人以为计算机里基值只能是 2(二进制),但题目偏要搞事情——假设尾数基值是 十进制 (rm=10r_m=10),但计算机底层硬件偏偏又是用 二进制位 来存这只十进制小怪兽!

  • 怎么存?1个十进制数需要几个二进制位?23=8<1024=162^3=8 < 10 \le 2^4=16,所以需要 4个二进制位(1个BCD码/半字节) 来表示一位十进制数!

  • 尾数总共给 8 个二进制位,说明能存 8/4=28 / 4 = 2 位十进制数字(即 0.d1d20.d_1 d_2)。

  • 规格化条件:最高一位十进制数 d1d_1 绝对不能为 0!即 d1[1,9]d_1 \in [1, 9],而第二位 d2[0,9]d_2 \in [0, 9]


📝 真题演练(0904真题)

题目

浮点数表示,阶码用二进制表示,除阶符之外的阶码位数 p=3p=3,尾数基值用十进制表示(rm=10r_m=10),除尾符外的尾数二进制位数 m=8m=8。计算非负阶、规格化、正尾数时的:

  1. 可表示的最小尾数值;
  1. 可表示的最大值;
  1. 可表示的尾数个数。
💡 庖丁解牛与详细步骤:
  1. 分析尾数格式

   - 尾数基值为十进制(rm=10r_m = 10),每个十进制数占用 log210=4\log_2 10 \uparrow = 4 位二进制。

   - 尾数二进制位数 m=8m=8,故十进制尾数位数为 k=8/4=2k = 8 / 4 = 2 位。

   - 尾数形式为:0.d1d20.d_1 d_2(十进制形式)。

   - 规格化要求:最高位 d10d_1 \neq 0(即 1d191 \le d_1 \le 9),低位 0d290 \le d_2 \le 9

  1. 第 (1) 问:可表示的最小尾数值

   - 要让尾数最小,最高位取合法的最小值 d1=1d_1 = 1,其余位取 0(d2=0d_2 = 0)。

   - 最小尾数值 =0.10=1×101=0.1= 0.10 = 1 \times 10^{-1} = 0.1

  1. 第 (2) 问:可表示的最大值

   - 要让数值最大,需要 阶码取最大尾数取最大

   - 阶码部分:非负阶,二进制位数 p=3p=3,最大阶码 emax=2p1=231=7e_{max} = 2^p - 1 = 2^3 - 1 = 7?注意:阶码是二进制纯正整数,3位二进制最大值为 1112=7111_2 = 7231=72^3-1=7。但若阶码基值也是按题意,阶码是二进制表示,除阶符外3位,emax=231=7e_{max} = 2^3 - 1 = 7(部分教材若阶码基值为10则是 1023110^{2^3-1},标准答案中直接以尾数基值指数形式计算:emax=231=7e_{max} = 2^3-1 = 7 或按原题官方标准格式:最大阶码为 231=72^3-1 = 7)。

   - 尾数最大值:d1=9,d2=9d_1 = 9, d_2 = 9,即 0.99=11020.99 = 1 - 10^{-2}

   - 综合最大值 =最大尾数×10最大阶码=(1102)×10231=0.99×107=99×105= \text{最大尾数} \times 10^{\text{最大阶码}} = (1 - 10^{-2}) \times 10^{2^3 - 1} = 0.99 \times 10^7 = 99 \times 10^5

  1. 第 (3) 问:可表示的尾数个数

   - 最高位 d1d_1 可选范围:191 \sim 9 共 9 种选择;

   - 第二位 d2d_2 可选范围:090 \sim 9 共 10 种选择;

   - 故规格化正尾数个数 =9×10=90= 9 \times 10 = 90 个。

   - (公式表示法:102×10110=9010^2 \times \frac{10 - 1}{10} = 90 个)。


题型二:浮点数尾数下溢处理(ROM查表舍入法)

🎭 考点人话与爆笑透析

在浮点数运算时,尾数右移超出的低位(下溢部分)就像切土豆掉下来的碎渣。

  • 直接截断法:把碎渣全扔了。缺点:全往小了砍,平均误差恒为负数,系统越算越缩水!

  • 恒置1法:不管碎渣是啥,最低位一律改成 1。简单粗暴,但误差还是不够完美。

  • ROM查表舍入法:在硬件里放个极小的 ROM(查找表),把尾数最后1位和掉出去的附加位当成地址,查表直接输出修正后的结果!

  • 终极目标:让平均误差 = 0(有的多进一点,有的少进一点,互相抵消,人情世故拉满)。


📝 真题演练(1604真题)

题目

由 3 位数(其中最低位为下溢处理的附加位)经 ROM 查表舍入法,下溢处理成 2 位结果,设计使下溢处理平均误差接近于 0 的 ROM 表,列出 ROM 编码表的地址与内容的对应关系。

💡 庖丁解牛与设计逻辑:
  1. 明确输入输出位数

   - 输入 3 位二进制:y1y2.y3y_1 y_2 . y_3(其中 y1y2y_1 y_2 是保留位,y3y_3 是下溢附加位),共有 23=82^3 = 8 种输入状态(地址 000111000 \sim 111)。

   - 输出 2 位二进制:z1z2z_1 z_2

  1. 四舍五入的平衡艺术(零均值误差设计)

   - 附加位 y3=0y_3=0(相当于 .0):不用进位,直接保留 y1y2y_1 y_2

     - 00000000 \to 00(误差 00

     - 01001010 \to 01(误差 00

     - 10010100 \to 10(误差 00

     - 11011110 \to 11(误差 00

   - 附加位 y3=1y_3=1(相当于 .1,即 +0.5+0.5 个最低有效位):按四舍五入通常要进 1,但如果全部进 1,总误差就会偏正!为了让平均误差为 0,必须一半舍、一半入:

     - 00101001 \to 01(进位,误差 +0.5+0.5

     - 01110011 \to 10(进位,误差 +0.5+0.5

     - 10111101 \to 11(进位,误差 +0.5+0.5

     - 11111111 \to 11舍去不进位!防止溢出且抵消误差,误差 0.5-0.5

  1. ROM 编码对照表(考场直接画出此表满分)

| ROM 地址 (y1y2y3y_1 y_2 y_3) | 原数值 | ROM 输出内容 (z1z2z_1 z_2) | 实际处理说明 | 误差分析 (输出 - 输入) |

| :--- | :--- | :--- | :--- | :--- |

| 000 | 00.0 | 00 | 不变 | 0 |

| 001 | 00.1 | 01 | 进位 | +0.5+0.5 |

| 010 | 01.0 | 01 | 不变 | 0 |

| 011 | 01.1 | 10 | 进位 | +0.5+0.5 |

| 100 | 10.0 | 10 | 不变 | 0 |

| 101 | 10.1 | 11 | 进位 | +0.5+0.5 |

| 110 | 11.0 | 11 | 不变 | 0 |

| 111 | 11.1 | 11 | 截断(防溢出/平衡) | 0.5-0.5 |

一句话总结

3位变2位,地址共8个(000~111)。末位为0原样留,末位为1向前进;唯独111特殊记,进位溢出只能留11!


题型三:中断响应次序与处理次序(中断屏蔽字设计)

🎭 考点人话与爆笑透析

这是系统结构里送分最痛快的一道大题!必须厘清两个概念:

  1. 中断响应次序:硬件排队器决定的,出厂就焊死了(默认 12341 \to 2 \to 3 \to 4 \dots 高优先级先举手先被看见)。

  2. 中断处理次序:软件(CPU真正执行服务程序)决定的!通过**中断屏蔽位(Mask)**来实现“反客为主”。

  • 屏蔽位规则

  - 1 代表屏蔽(关门谢客,不理你)

  - 0 代表开放(欢迎光临,允许你打断我)

💡 考场秒杀无敌法则(3秒出答案):

口诀“先来后到,谁比我慢(或等于我),我就屏蔽谁;谁比我快,我就对谁开放!”

在第 ii 级中断的处理程序中:

  • 凡是在处理次序中排在自己后面的所有中断级,以及自己本身 \to 全部填 1(屏蔽)!
  • 凡是在处理次序中排在自己前面的中断级 \to 全部填 0(开放)!

📝 真题演练 1(1804真题)

题目

若机器共有 5 级中断,中断响应优先次序为 123451 \to 2 \to 3 \to 4 \to 5。现要求其实际的中断处理次序为 145231 \to 4 \to 5 \to 2 \to 3。设计各级中断处理程序的中断级屏蔽位(令“1”对应于屏蔽,“0”对应开放)。

💡 秒杀填表分析:
  • 处理次序145231 \to 4 \to 5 \to 2 \to 3

  • 对 1 级:排第 1。后面有 4, 5, 2, 3,还有自己 1。全部填 1 \to 1 1 1 1 1

  • 对 4 级:排第 2。前面有 1(开放0),自己4及后面5, 2, 3填1 \to 1号位填0,其余填1 \to 0 1 1 1 1

  • 对 5 级:排第 3。前面有 1, 4(开放0),自己5及后面2, 3填1 \to 1, 4号位填0,其余填1 \to 0 1 1 0 1

  • 对 2 级:排第 4。前面有 1, 4, 5(开放0),自己2及后面3填1 \to 1, 4, 5号位填0,2, 3填1 \to 0 1 1 0 0

  • 对 3 级:排第 5。前面有 1, 4, 5, 2(开放0),自己3填1 \to 唯独3号位填1,其余填0 \to 0 0 1 0 0

🏆 最终答案表:

| 中断处理程序级别 | 屏蔽位 1 | 屏蔽位 2 | 屏蔽位 3 | 屏蔽位 4 | 屏蔽位 5 |

| :---: | :---: | :---: | :---: | :---: | :---: |

| 1 级 | 1 | 1 | 1 | 1 | 1 |

| 2 级 | 0 | 1 | 1 | 0 | 0 |

| 3 级 | 0 | 0 | 1 | 0 | 0 |

| 4 级 | 0 | 1 | 1 | 1 | 1 |

| 5 级 | 0 | 1 | 1 | 0 | 1 |


📝 真题演练 2(4级中断且处理次序等于响应次序)

题目

设某系统的中断源优先级分为 4 级(12341 \to 2 \to 3 \to 4)。设屏蔽位“1”屏蔽,“0”开放。要求中断处理次序与响应次序相同(12341 \to 2 \to 3 \to 4)。先文字说明,再画表。

💡 文字说明与标准答案:
  • 文字说明

  1. 中断处理程序 1 应屏蔽 1, 2, 3, 4 所有中断,保证 1 级优先执行完毕;

  2. 中断处理程序 2 屏蔽 2, 3, 4,对 1 开放;

  3. 中断处理程序 3 屏蔽 3, 4,对 1, 2 开放;

  4. 中断处理程序 4 屏蔽 4,对 1, 2, 3 开放。

  • 屏蔽位表格(标准的下三角矩阵):

| 中断处理程序级别 | 1 | 2 | 3 | 4 |

| :---: | :---: | :---: | :---: | :---: |

| 1 | 1 | 1 | 1 | 1 |

| 2 | 0 | 1 | 1 | 1 |

| 3 | 0 | 0 | 1 | 1 |

| 4 | 0 | 0 | 0 | 1 |


题型四:并行主存系统(模 m 多分体交叉存取与频宽计算)

🎭 考点人话与爆笑透析

单车道(单体存储器)容易堵车,于是聪明的人类修了 mm 条并排的高速公路(模 mm 多分体交叉存取)。

  • 单体频宽:单个车道每秒能跑多少流量 B1=WTB_1 = \frac{W}{T}WW 是车道宽度即单体字长,TT 是存取周期)。

  • 理论最大频宽mm 个分体完全同时疯狂输出,Bmax=mWTB_{max} = m \cdot \frac{W}{T}

  • 实际频宽:理想很丰满,现实很骨感。因为程序经常要跳转、冲突,实际频宽打了个折:Breal=ηBmaxB_{real} = \eta \cdot B_{max}η\eta 是效率系数,比如 0.6)。

  • 求模数 mm:题目给定了实际需要的带宽 BreqB_{req},让你倒推需要几条车道 mm,而且强制要求 mm 必须是 2 的幂次方2,4,8,162, 4, 8, 16\dots)。


📝 真题演练(1504真题)

题目

设主存每个分体的存取周期为 2μs2\,\mu\text{s},宽度为 44 个字节。采用模 mm 多分体交叉存取,但实际频宽只能达到最大频宽的 0.60.6 倍。现要求主存实际频宽为 4 MB/s4\text{ MB/s},问主存模数 mm 应取多少方能使两者速度基本适配?(其中,mm 取 2 的幂)

💡 步骤推导:
  1. 计算单体最大频宽

   B1=WT=4 Byte2μs=2 MB/sB_1 = \frac{W}{T} = \frac{4\text{ Byte}}{2\,\mu\text{s}} = 2\text{ MB/s}

  1. 计算 mm 个分体的最大频宽

   Bmax=mB1=m×4 B2μs=2m MB/sB_{max} = m \cdot B_1 = m \times \frac{4\text{ B}}{2\,\mu\text{s}} = 2m\text{ MB/s}

  1. 建立实际频宽不等式

   Breal=0.6×Bmax=0.6×2m4 MB/sB_{real} = 0.6 \times B_{max} = 0.6 \times 2m \ge 4\text{ MB/s}

   1.2m4    m41.23.331.2m \ge 4 \implies m \ge \frac{4}{1.2} \approx 3.33

  1. 确定 mm 的值

   - 题目明确要求 mm 为 2 的幂(即 21=2,22=4,23=82^1=2, 2^2=4, 2^3=8\dots)。

   - 大于等于 3.33 的最小 2 的幂即为 m=4m = 4


题型五:页式虚存替换算法(FIFO 先进先出法)

🎭 考点人话与爆笑透析

  • FIFO(First In First Out):就像排队买喜茶,最早进主存的那个页面,哪怕它一直在被翻牌子,只要没地方了,也必须把它无情踹出去!

  • 解题第一坑:虚地址 \to 虚页号

  - 题目给的是字节/字地址(比如 23, 216...),页面大小是 200 字。

  - 虚页号公式虚页号=虚地址页面大小\text{虚页号} = \lfloor \frac{\text{虚地址}}{\text{页面大小}} \rfloor(向下取整,即整数商!)。


📝 真题演练(1810真题)

题目

考虑一个 920 个字的程序,其访问虚存的地址流为:23, 216, 156, 618, 382, 490, 492, 868, 916, 728。若页面大小为 200 字,主存容量为 400 字,采用 FIFO 替换算法,请按访存的各个时刻写出其虚页地址流,计算主存命中率。

💡 步骤拆解:
  1. 计算实页数 nn 与虚页地址流

   - 实页数 n=400200=2n = \frac{400}{200} = 2 页。

   - 各虚地址对应虚页号:

     - 23/200=023 / 200 = 0

     - 216/200=1216 / 200 = 1

     - 156/200=0156 / 200 = 0

     - 618/200=3618 / 200 = 3

     - 382/200=1382 / 200 = 1

     - 490/200=2490 / 200 = 2

     - 492/200=2492 / 200 = 2

     - 868/200=4868 / 200 = 4

     - 916/200=4916 / 200 = 4

     - 728/200=3728 / 200 = 3

   - 虚页地址流为:0, 1, 0, 3, 1, 2, 2, 4, 4, 3(共 10 次访问)。

  1. 绘制 FIFO 替换追踪表(实页数 n=2n=2):

| 访问时刻 tt | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |

| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |

| 虚页流 | 0 | 1 | 0 | 3 | 1 | 2 | 2 | 4 | 4 | 3 |

| 页框 1 | 0* | 0* | 0* | 3* | 3* | 2* | 2* | 2* | 2* | 3* |

| 页框 2 | | 1 | 1 | 1 | 1* | 1* | 1* | 4* | 4* | 4* |

| 命中情况 | 装入 | 装入 | 命中(H) | 替换0 | 替换1 | 替换3 | 命中(H) | 替换1 | 命中(H) | 替换2 |

注:标 * 表示该位置是驻留时间最长、下一个即将被淘汰的块。

  1. 计算命中率

   - 访问总次数 N=10N = 10 次;

   - 命中次数 =3= 3 次(时刻 3、时刻 7、时刻 9);

   - 命中率 H=310=30%H = \frac{3}{10} = 30\%


题型六:页式虚存替换算法(LRU 堆栈模拟与实页分配优化)

🎭 考点人话与爆笑透析

  • LRU(Least Recently Used,近期最少使用)

  谁最近最不受宠,就淘汰谁。

  • 堆栈模拟法(Stack Simulation)

  把主存看成一个栈。

  - 只要访问某个页,就把该页抽出来放到栈顶

  - 栈底的元素自然就下沉,成为最久没被访问的老倒霉蛋。

  - 绝妙性质:分配 nn 个实页时,只要当前访问的页在栈的前 nn 个位置内,就是命中


📝 真题演练 1:堆栈模拟与双程序实页最优分配(1304真题)

题目

页式虚拟存储器共有 9 页空间准备分配给 A、B 两道程序。

已知若给 B 程序分配 4 页时,命中率为 8/158/15;若分配 5 页时,命中率可达 10/1510/15

现给出 A 程序执行中的页地址流为:2, 3, 2, 1, 5, 2, 4, 5, 3, 2, 5, 2, 1, 4, 5(共 15 次)。

  1. 画出用堆栈对 A 程序页地址流的模拟过程图,分别统计给其分配 4 页和 5 页时的命中率;
  1. 根据已知条件和上述统计结果,给 A、B 两道程序各分配多少实页,可使系统效率最高?
💡 堆栈模拟图绘制:

时刻:   1  2  3  4  5  6  7  8  9 10 11 12 13 14 15

页流:   2  3  2  1  5  2  4  5  3  2  5  2  1  4  5

------------------------------------------------------

栈顶1:  2  3  2  1  5  2  4  5  3  2  5  2  1  4  5

栈位2:     2  3  2  1  5  2  4  5  3  2  5  2  1  4

栈位3:        2  3  2  1  5  2  4  5  3  2  5  2  1

栈位4:           3  3  3  1  1  2  4  4  4  3  5  2

栈位5:                 1  3  3  1  1  1  1  4  3  3

------------------------------------------------------

命中(n=4):    H        H        H  H  H  H        H   (共 7 次)

命中(n=5):    H        H     H  H  H  H  H  H     H   (共 10 次)

  1. 第 (1) 问计算

   - 当 n=4n=4 时,命中时刻为:3, 6, 8, 9, 10, 11, 15,共 7 次命中     HA(4)=715\implies H_A(4) = \frac{7}{15}

   - 当 n=5n=5 时,在 n=4n=4 基础上午多命中了时刻 8, 12, 13(共 10 次命中)    HA(5)=1015\implies H_A(5) = \frac{10}{15}

  1. 第 (2) 问最优分配决策

   总实页数为 9 页,分配方案只有两种可能:

   - 方案一:A 分配 5 页,B 分配 4 页

     系统总平均命中率 H1=HA(5)+HB(4)2=1015+8152=1830=915\text{系统总平均命中率 } H_1 = \frac{H_A(5) + H_B(4)}{2} = \frac{\frac{10}{15} + \frac{8}{15}}{2} = \frac{18}{30} = \frac{9}{15}

   - 方案二:A 分配 4 页,B 分配 5 页

     系统总平均命中率 H2=HA(4)+HB(5)2=715+10152=1730=8.515\text{系统总平均命中率 } H_2 = \frac{H_A(4) + H_B(5)}{2} = \frac{\frac{7}{15} + \frac{10}{15}}{2} = \frac{17}{30} = \frac{8.5}{15}

   - 结论:因为 H1>H2H_1 > H_2,所以 给 A 分配 5 页,给 B 分配 4 页 时系统效率最高。


题型七:流水线性能分析(时空图与周期性间歇吞吐率 Tp)

🎭 考点人话与爆笑透析

流水线就像工厂流水线,每个工序耗时 Δt\Delta t

  • 普通流水线连绵不断,吞吐率 Tp=n(k+n1)ΔtT_p = \frac{n}{(k + n - 1)\Delta t}

  • 周期性间歇流水线:工人干完 5 个活(输入 5 个数据),集体摸鱼休息 5Δt5\Delta t,然后再干 5 个活!

  • 核心抓手:找准一个周期的总时间一个周期处理的任务数

  - 连续输入 5 个数据需要耗时:第 1 个数据占 1Δt1\Delta t,第 2 个占 1Δt1\Delta t\dots 5个数据输入耗时 5Δt5\Delta t

  - 加上间歇 5Δt5\Delta t

  - 所以一个完整输入周期 =5Δt+5Δt=10Δt= 5\Delta t + 5\Delta t = 10\Delta t?慢着,看时空图的输出周期


📝 真题演练(1410真题)

题目

流水线由 4 个功能部件组成,每个功能部件的延迟时间为 Δt\Delta t。当输入 5 个数据后,间歇 5Δt5\Delta t 又输入 5 个数据,如此周期性地工作。

  1. 画出时空图;
  1. 求此时流水线的吞吐率 TpT_p
💡 步骤与图解:
  1. 时空图绘制

   - 部件数 k=4k = 4

   - 数据 1 从 t=0t=0 进入,经过 4 拍,在 4Δt4\Delta t 结束;数据 2~5 依次滞后 1Δt1\Delta t 流入。

   - 第 5 个数据在 t=4Δtt=4\Delta t 输入,在 t=8Δtt=8\Delta t 输出完成。

   - 输入间歇:输入完 5 个数据后(t=5Δtt=5\Delta t 时刻后),停顿 5Δt5\Delta t,下一个周期的第 1 个数据在 t=5Δt+5Δt=10Δtt = 5\Delta t + 5\Delta t = 10\Delta t 处流入?

   - 官方标准时空图显示:输入 ① 在时刻 0,⑤ 在时刻 4 输入;输入完 5 个后(时刻 5 之后空出 5Δt5\Delta t 的输入间歇),下一批 ① 在时刻 5+3=8Δt5 + 3 = 8\Delta t(或间歇后)周期性流入。

   - 两个周期对应数据输出的间隔为 8Δt8\Delta t(即完成 5 个数据的周期时间为 8Δt8\Delta t)。


部件4 |         [1][2][3][4][5]

部件3 |      [1][2][3][4][5]

部件2 |   [1][2][3][4][5]

部件1 |[1][2][3][4][5]            [1][2]...

      +---------------------------------------> 时间(Δt)

时间:  0  1  2  3  4  5  6  7  8  9 10 11

输入: (1)           (5)       (1)

  1. 吞吐率计算

   - 在一个重复周期内,处理的任务数为 5 个,所花费的周期时间为 8Δt8\Delta t

   - 故流水线的吞吐率为:

     Tp=58ΔtT_p = \frac{5}{8\Delta t}


题型八:指令重叠解释方式与执行时间计算

🎭 考点人话与爆笑透析

一条指令的执行分为三部曲:取指(tt_{取}\to 分析(tt_{分}\to 执行(tt_{执}

  • 顺序执行:一条指令彻底完事,下一条才开始。耗时最长,纯纯老牛拉破车。

  • 一次重叠(二段流水):第 kk 条指令的“执行”与第 k+1k+1 条指令的“取指”同时搞。

  • 二次重叠(三段流水):取指、分析、执行三班倒,第 kk 条执行、第 k+1k+1 条分析、第 k+2k+2 条取指同时并发!


📝 真题演练(1504真题)

题目

假设指令的解释分取指、分析与执行 3 步,每步的时间相应为 t取指t_{取指}t分析t_{分析}t执行t_{执行}。分别计算下列情况下,执行完 100 条指令所需时间的一般关系式:

  1. 顺序方式;
  1. 仅“执行 kk”与“取指 k+1k+1”重叠;
  1. 仅“执行 kk”、“分析 k+1k+1”与“取指 k+2k+2”重叠。
💡 考场公式秒杀推导:
  1. 顺序执行方式

   每条指令耗时 =t取指+t分析+t执行= t_{取指} + t_{分析} + t_{执行}

   T=100×(t取指+t分析+t执行)T = 100 \times (t_{取指} + t_{分析} + t_{执行})

  1. 仅“执行 kk”与“取指 k+1k+1”重叠(一次重叠)

   - 第 1 条指令先做完取指、分析:t取指+t分析t_{取指} + t_{分析}

   - 之后进入 99 次重叠循环,每次循环的瓶颈由 max(t取指,t执行)\max(t_{取指}, t_{执行}) 加上必须串行的 t分析t_{分析} 决定;

   - 最后收尾完成第 100 条指令的执行:t执行t_{执行}

   T=t取指+100t分析+99×max(t取指,t执行)+t执行T = t_{取指} + 100 t_{分析} + 99 \times \max(t_{取指}, t_{执行}) + t_{执行}

  1. 仅“执行 kk”、“分析 k+1k+1”与“取指 k+2k+2”重叠(二次重叠 / 满流水)

   - 流水线建立时间(第 1 条全部耗时):t取指+t分析+t执行t_{取指} + t_{分析} + t_{执行}(中间各阶段衔接);

   - 严格标准公式为:

   T=t取指+max(t取指,t执行)+98×max(t取指,t分析,t执行)+max(t分析,t执行)+t执行T = t_{取指} + \max(t_{取指}, t_{执行}) + 98 \times \max(t_{取指}, t_{分析}, t_{执行}) + \max(t_{分析}, t_{执行}) + t_{执行}


题型九:互连网络(PM2I 单级互连网络函数与连线计算)

🎭 考点人话与爆笑透析

  • PM2I(Plus-Minus 2i2^i

  “加减 2i2^i 网络”。一圈处理机排排坐(编号 0N10 \sim N-1),每个处理机 jj 可以直接跳跃连接到 j+2ij + 2^ij2ij - 2^i 号处理机(走模 NN 环形路线)。

  • N=16N=16 时,log216=4\log_2 16 = 4,所以 ii 可以取 0,1,2,30, 1, 2, 3

  - i=0i=0 时:+20=+1,20=1+2^0=+1, -2^0=-1

  - i=1i=1 时:+21=+2,21=2+2^1=+2, -2^1=-2

  - i=2i=2 时:+22=+4,22=4+2^2=+4, -2^2=-4

  - i=3i=3 时:+23=+8,23=8+2^3=+8, -2^3=-8(注意:+8+88(mod16)-8 \pmod{16} 是同一个位置!所以合二为一)。

  - 总共有 2×41=72 \times 4 - 1 = 7 种互连函数!


📝 真题演练(1204真题)

题目

编号为 0,1,2,,150, 1, 2, \dots, 15 的 16 个处理器,用 PM2I 单级互连网络互连。

  1. 写出所有各种单级 PM2I 的互连函数的一般式;
  1. 计算与 5 号处理器直接相连的处理器。
💡 步骤解题:
  1. 第 (1) 问:写出 7 个互连函数一般式

   - PM2+0(j)=j+1(mod16)PM2_{+0}(j) = j + 1 \pmod{16}

   - PM20(j)=j1(mod16)PM2_{-0}(j) = j - 1 \pmod{16}

   - PM2+1(j)=j+2(mod16)PM2_{+1}(j) = j + 2 \pmod{16}

   - PM21(j)=j2(mod16)PM2_{-1}(j) = j - 2 \pmod{16}

   - PM2+2(j)=j+4(mod16)PM2_{+2}(j) = j + 4 \pmod{16}

   - PM22(j)=j4(mod16)PM2_{-2}(j) = j - 4 \pmod{16}

   - PM2±3(j)=j±8(mod16)PM2_{\pm 3}(j) = j \pm 8 \pmod{16}

  1. 第 (2) 问:代入 j=5j = 5 计算相连号

   - 5+1(mod16)=65 + 1 \pmod{16} = \mathbf{6}

   - 51(mod16)=45 - 1 \pmod{16} = \mathbf{4}

   - 5+2(mod16)=75 + 2 \pmod{16} = \mathbf{7}

   - 52(mod16)=35 - 2 \pmod{16} = \mathbf{3}

   - 5+4(mod16)=95 + 4 \pmod{16} = \mathbf{9}

   - 54(mod16)=15 - 4 \pmod{16} = \mathbf{1}

   - 5±8(mod16)=135 \pm 8 \pmod{16} = \mathbf{13}

   - 最终相连处理器编号为1, 3, 4, 6, 7, 9, 13(共 7 个)。


题型十:向量流水处理机(CRAY-1 串行/并行/链接拍数计算)

🎭 考点人话与爆笑透析

向量机处理 NN 个元素的数组(比如做向量加、向量乘)。

  • 硬件流水线各阶段耗时

  - 访存取数:输入需要时间,流水线延迟;

  - 浮点加:流水线深 6 拍;

  - 浮点乘:流水线深 7 拍;

  - 数据存入寄存器:1 拍。

  • 三种执行方式比喻

  1. 串行:做完加法,把全部 NN 个结果写回寄存器;再启动乘法。

  2. 并行:指令①(访存)和指令②(加法)没有数据冲突,俩人同时开工;完事后再做指令③(乘法)。

  3. 链接技术(Chaining)最核心大招! 加法流水线刚吐出第 1 个元素,不等剩下 N1N-1 个吐完,立马直接牵线搭桥送进乘法流水线!流水线无缝级联!


📝 真题演练(1510真题)

题目

求向量 D=A×(B+C)D = A \times (B + C),向量为浮点数,元素个数均为 NN。参照 CRAY-1 方式分解为 3 条向量指令:

  • V3存储器V_3 \leftarrow \text{存储器}(访存取 AA 送入 V3V_3 寄存器组)
  • V2V0+V1V_2 \leftarrow V_0 + V_1B+CKB+C \to K
  • V4V2×V3V_4 \leftarrow V_2 \times V_3K×ADK \times A \to D

已知:浮点加需 6 拍,浮点乘需 7 拍,访存取数需 6 拍(或按题设),数据存入寄存器需 1 拍。求 3 种方式各需多少拍?

💡 拍数推导:
  • 单条向量指令执行时间通用公式

  T=[t功能部件+t存入寄存器]+NT = [t_{功能部件} + t_{存入寄存器}] + N

  - 指令①(访存取数):6+1+N=7+N6 + 1 + N = 7 + N

  - 指令②(浮点加法):6+1+N=7+N6 + 1 + N = 7 + N

  - 指令③(浮点乘法):7+1+N=8+N7 + 1 + N = 8 + N

  1. 方式 (1):①、②、③ 串行执行

   T=(7+N)+(7+N)+(8+N)=22+3N 拍T = (7+N) + (7+N) + (8+N) = 22 + 3N \text{ 拍}

  1. 方式 (2):① 和 ② 并行执行后,再执行 ③

   - ① 与 ② 同时启动,耗时为 max(7+N,7+N)=7+N\max(7+N, 7+N) = 7+N 拍;

   - 随后执行 ③ 耗时 8+N8+N 拍;

   T=(7+N)+(8+N)=15+2N 拍T = (7+N) + (8+N) = 15 + 2N \text{ 拍}

  1. 方式 (3):采用链接技术(Chaining)

   - 指令①和指令②并行启动;

   - 指令②在产生第一个结果(经过 6+16+1 拍)以及指令①准备好数据时,直接链接送入乘法部件;

   - 乘法部件的建立时间为 7+17+1 拍;

   - 随后流水线畅通无阻,连续吐出 NN 个结果需要 NN 拍;

   T=(1+6+1)+8+N=16+N 拍T = (1 + 6 + 1) + 8 + N = 16 + N \text{ 拍}


题型十一:阵列机并行存储器无冲突访问设计

🎭 考点人话与爆笑透析

16×1616 \times 16 的二维矩阵里,处理机经常需要:

  • 一整行一起读(行访问)

  • 一整列一起读(列访问)

  • 主对角线一起读

  • 次对角线一起读

如果多个元素落进了同一个存储体(分体),就会发生堵车(冲突)!

  • 无冲突充分条件神定理

  - 存储体个数 MM 必须是质数,且 M=22p+1NM = 2^{2p} + 1 \ge N

  - 同一列两个相邻元素地址错开距离 δ1=2p\delta_1 = 2^p

  - 同一行两个相邻元素地址错开距离 δ2=1\delta_2 = 1


📝 真题演练(1410真题)

题目

在 16 台 PE 的并行(阵列)处理机上,要对存放在 MM 个分体并行存储器中的 16×1616 \times 16 二维数组实现行、列、主对角线、次对角线上各元素均无冲突访问,要求 MM 至少为多少?此时数组在存储器中应如何存放?

💡 证明与存放方案:
  1. 求分体模数 MM

   - 设 δ1\delta_1 为同列相邻元素错开距离,δ2\delta_2 为同行相邻元素错开距离;

   - 充分条件公式:M=22p+1M = 2^{2p} + 1MM 为质数,且 MN=16M \ge N = 16),此时取 δ1=2p,δ2=1\delta_1 = 2^p, \delta_2 = 1

   - 当 p=1p=1 时,M=22+1=5<16M = 2^2 + 1 = 5 < 16(不满足要求);

   - 当 p=2p=2 时,M=22×2+1=24+1=17M = 2^{2 \times 2} + 1 = 2^4 + 1 = \mathbf{17}(17 是质数,且 17>1617 > 16,满足要求!)。

   - MM 至少为 17

  1. 数组存放方案

   - δ1=2p=22=4\delta_1 = 2^p = 2^2 = 4δ2=1\delta_2 = 1

   - 数组元素 A(i,j)A(i, j)i,j[0,15]i, j \in [0, 15])存放在存储体编号为:

     存储体编号 m=(iδ1+jδ2)(mod17)=(4i+j)(mod17)\text{存储体编号 } m = (i \cdot \delta_1 + j \cdot \delta_2) \pmod{17} = (4i + j) \pmod{17}

   - 存放方式说明:数组按行优先顺序存储,每行相邻元素存放在相邻存储体中(错开 1 个体);每列相邻元素在存储体中错开 4 个分体存放。


题型十二:多处理机并行算法(树形流程图优化与性能指标)

🎭 考点人话与爆笑透析

一个又臭又长的算式(比如霍纳法则多项式),单核 CPU 只能一步一步像贪吃蛇一样算,树高极高(T1T_1 很大)。

多核多处理机可以通过乘法分配律、加法结合律把算式强行“摊平”,变成一颗矮矮胖胖的平衡二叉树(减少树高)!

  • 指标大阅兵

  - 单处理机步数 T1T_1:原表达式里一共有几个操作符,单核就得老老实实算几步。

  - 并行树高/级数 TpT_p:并行树有几层(高度)。

  - 处理机数 PP:树中同一层最多同时有几个操作符在并行算(树的最大宽度)。

  - 加速比 SpS_pSp=T1TpS_p = \frac{T_1}{T_p}(越快越牛)。

  - 效率 EpE_pEp=SpP=T1PTpE_p = \frac{S_p}{P} = \frac{T_1}{P \cdot T_p}(算力利用率)。


📝 真题演练 1(1304真题)

题目

有表达式 E=A(B+C(D+EF))+GHDE = A \cdot (B + C \cdot (D + E \cdot F)) + G \cdot H \cdot D,在多处理机上,要求利用减少树高的办法加速运算。

  1. 画出并行算法的树形流程图;
  1. 求处理机数 PP、运算级数 TpT_p、单处理机级数 T1T_1、加速比 SpS_p 和效率 EpE_p 的值。
💡 展开与树形图构建:
  1. 利用分配律展开原式

   E=AB+GHD+ACD+ACEFE = AB + GHD + ACD + ACEF

   (注:原答案整理为 AB+GHD+AC(D+EF)A \cdot B + G \cdot H \cdot D + A \cdot C \cdot (D + E \cdot F) 或彻底展开成 4 项求和)

  1. 构建 4 层树形流程图


graph TD

    %% 第一层运算

    E1[&#34;E * F&#34;] --> A1[&#34;D + (E*F)&#34;]

    G1[&#34;G * H&#34;] --> M1[&#34;(G*H) * D&#34;]

    A0[&#34;A * B&#34;]

    A2[&#34;A * C&#34;]

  


    %% 第二层运算

    A1 --> M2[&#34;(A*C) * (D+E*F)&#34;]

    A2 --> M2

   

    %% 第三层运算

    A0 --> S1[&#34;(A*B) + (G*H*D)&#34;]

    M1 --> S1

   

    %% 第四层顶层求和

    S1 --> TOP[&#34;+ (总结果)&#34;]

    M2 --> TOP

  1. 计算各项指标

   - 单处理机运算级数 T1=8T_1 = 8(原式共 8 次二元运算);

   - 并行运算级数(树高)Tp=4T_p = 4

   - 处理机数 P=3P = 3(同一时刻最多 3 个操作并行);

   - 加速比 Sp=T1Tp=84=2S_p = \frac{T_1}{T_p} = \frac{8}{4} = \mathbf{2}

   - 效率 Ep=SpP=23E_p = \frac{S_p}{P} = \frac{2}{3}


📝 真题演练 2:霍纳法则展开(1104真题)

题目

用霍纳法则给定的表达式如下:E=a(b+c(d+ef))+gE = a(b + c(d + ef)) + g。利用减少树高加速运算,画出流程图并求 Tp,P,Sp,EpT_p, P, S_p, E_p

💡 解答:
  1. 展开表达式

   E=a(b+cd+cef)+g=a(b+cd)+acef+gE = a(b + cd + cef) + g = a(b + cd) + acef + g

   或彻底展开:E=ab+acd+acef+gE = ab + acd + acef + g

  1. 指标计算

   - 单机步数 T1=6T_1 = 6

   - 树高 Tp=4T_p = 4

   - 处理机数 P=3P = 3

   - 加速比 Sp=T1Tp=64=32=1.5S_p = \frac{T_1}{T_p} = \frac{6}{4} = \mathbf{\frac{3}{2}} = 1.5

   - 效率 Ep=SpP=1.53=12=50%E_p = \frac{S_p}{P} = \frac{1.5}{3} = \mathbf{\frac{1}{2}} = 50\%


题型十三:并行程序设计(FORK 与 JOIN 语句改写)

🎭 考点人话与爆笑透析

  • FORK m(分身术)

  走到这行代码时,分出一个新线程/进程跳到标号 m 去并行跑,原来的线程继续往下走。相当于拉了个兄弟一起干活!

  • JOIN N(碰头暗号)

  计数器汇聚。每个线程跑完自己的活,到 JOIN N 打卡报到。只有当累计有 N 个线程都打卡了,才允许放行 1 个线程继续往下走,其他打卡完的线程原地销毁。


📝 真题演练(1510真题)

题目

若有下述程序:

1: U = A + B

2: V = U * B

3: W = U / A

4: X = V - W

5: Y = V / A

6: Z = X + Y

试用 FORKJOIN 语句将其改写成可在多处理机上并行执行的程序。假设现为两台处理机,且除法速度最慢,加、减法速度最快

💡 依赖关系与关键路径调度分析:
  1. 数据相关性剖析

   - 计算完第 1 句 UU 后,第 2 句(V=UBV = U*B)和第 3 句(W=U/AW = U/A)彼此独立,可以并行!

   - 因为除法最慢,乘法较快,所以让分身提前去啃除法这块硬骨头

   - 算完 VVWW 之后,算 X=VWX = V - WY=V/AY = V / A 又可以并行!

  1. 标准改写程序(满分答案)


10  U = A + B       ; 必须先算 U

    FORK 30         ; 派生处理机去执行标号 30(计算漫长的除法 W)

20  V = U * B       ; 主处理机算 V

    JOIN 2          ; 汇聚等待 (V 和 W 必须都完成)

    GOTO 40         ; 防止直接掉进标号 30

30  W = U / A       ; 并行分支算 W

    JOIN 2          ; 汇聚打卡

40  FORK 60         ; 派生处理机去执行标号 60(计算耗时的除法 Y)

50  X = V - W       ; 主处理机算减法 X

    JOIN 2          ; 汇聚等待 (X 和 Y 必须都完成)

    GOTO 70

60  Y = V / A       ; 并行分支算 Y

    JOIN 2          ; 汇聚打卡

70  Z = X + Y       ; 最后汇聚求和


🎯 终极考场提分三板斧


graph LR

    A[拿到试卷] --> B{识别应用题型}

    B -->|中断屏蔽字| C[口诀: 排我后面的填1, 排我前面的填0]

    B -->|虚存替换| D[先算虚页号 = 虚地址/页大小, 画表数 H]

    B -->|多机树高| E[展开多项式平铺, 计算 Tp/P/Sp/Ep]

    B -->|FORK-JOIN| F[找独立计算段, 慢的丢给 FORK, 结束前 JOIN 2]

  1. 审题看单位:如主存频宽题目的 μs\mu\text{s}MB/s\text{MB/s}、页式替换里的字(Word)与页大小。

  2. 画表要规范:FIFO/LRU 标记每一拍是“装入”、“替换”还是“命中(H)”,最后必须显式写出 H=命中次数/总次数H = \text{命中次数}/\text{总次数}

  3. 公式先摆上:无论是加速比 Sp=T1/TpS_p = T_1 / T_p,还是吞吐率 Tp=n/TT_p = n / T,即便数字算慢了,公式分全部稳拿!


(祝君 02325 计算机系统结构一战圆满高分通关!🎉)