导航菜单
首页 >  02325计算机系统结构自考教材 pdf  > 02325《计算机系统结构》自考大题:第 1、2、3 章

02325《计算机系统结构》自考大题:第 1、2、3 章

复习总目录

  02325《计算机系统结构》自考复习重点目录

第 1 章 计算机系统结构概论

  不考大题。

第 2 章 数据表示、寻址方式与指令系统 1. 浮点数尾数基值

历史考题:2020.04、2018.10

题目描述:给出 阶值、尾数位数、尾数基值,计算 最大最小阶值、阶的个数、最大最小尾数值、最大最小可表示值、可表示数个数。  

课后习题 2-4

  设某机器阶值 6 位、尾数 48 位,阶符和数符不在其内,当尾数分别以 2、8、16 为基时,在非负阶、正尾数、规格化情况下,求出其最小阶、最大阶、阶的个数、最小尾数值、最大尾数值、可表示的最小值和最大值及可表示数的个数。

解:    p = 6 , m = 48 p=6, m=48p=6,m=48 时,在非负阶、正尾数、规格化情况下,r m= 2 , 8 , 16 r_m=2,8,16rm​=2,8,16 的各个参数的计算结果如下:

尾基r m r_mrm​2816m ′ m^{\prime}m′m/⌈ log 2 r m⌉ m/\left \lceil \mathrm{log}_2r_m\right \rceilm/⌈log2​rm​⌉481612最小阶值0000最大阶值2 p −12^p-12p−1636363阶的个数2 p 2^p2p646464最小尾数值r m− 1r^{-1}_{m}rm−1​1/21/81/16最大尾数值1−r m−m′1-r^{-m^{\prime}}_{m}1−rm−m′​1−2− 481-2^{-48}1−2−481−8− 161-8^{-16}1−8−161−16− 121-16^{-12}1−16−12可表示的最小值r m− 1r^{-1}_{m}rm−1​1/21/81/16可表示的最大值r m 2p − 1⋅(1−r m−m′)r_{m}^{2^p-1} \cdot (1-r^{-m^{\prime}}_{m})rm2p−1​⋅(1−rm−m′​)2 63 (1−2− 48)2^{63}(1-2^{-48})263(1−2−48)8 63 (1−8− 16)8^{63}(1-8^{-16})863(1−8−16)16 63 (1−16− 12)16^{63}(1-16^{-12})1663(1−16−12)可表示数的个数2 p ⋅r mm ′⋅rm − 1 r m2^p \cdot r_{m}^{m^{\prime}} \cdot \frac{r_m-1}{r_m}2p⋅rmm′​⋅rm​rm​−1​2 53 2^{53}2537×2 51 7\times2^{51}7×25115×2 50 15 \times 2^{50}15×250

  死记公式不可取:   题目都会给出 阶符和数符不在其内 和 非负阶、正尾数、规格化 的条件,总之表示数的方式是: 数值 =r m 阶值× 尾数值 数值=r_m^{阶值}\times 尾数值数值=rm阶值​×尾数值 (1)前 3 个阶值相关   阶值就是用题目给出的 6 位二进制位表示,最小 6 个 0 等于 0,最大 6 个 1 等于 63,个数自然是2 6= 64 2^6=6426=64。 (2)2 个尾数值   这里相对复杂些。尾基r mr_mrm​ 可以理解成把这个数看作r mr_mrm​ 进制表示,例如r m= 8 r_m=8rm​=8,把这个数看作八进制表示,而题目中给出的尾数位数 m mm 是给的二进制位,如果要看作八进制需要 3 个二进制位合成 1 个八进制位,这也就是表格中m ′m^{\prime}m′ 的由来,意味着此时可以把尾数看作是 16 个八进制位。   最小尾数值牵扯到规格化,规格化就是说小数点后第一位不为 0,即最小值就是小数点后第一位取 1,其余位都是 0,此时的视角是r mr_mrm​ 进制表示,因此最小值是r m−1r^{-1}_{m}rm−1​。换个二进制位的视角来说,规格化就是不能小数点后的前r mr_mrm​ 个位都是 0。   最大尾数值其实就是每一位都取最大值,这里适合回到二进制视角,每个二进制位都取 1 即可, 1 −r m−m′1-r^{-m^{\prime}}_{m}1−rm−m′​ 等价于 1 −2−m1-2^{-m}1−2−m (3)3 个可表示数相关   最大最小值没什么好说的,就是阶值尾数值都取最大或最小表示的数值。   可表示数的个数个人建议先看作二进制的视角,一共 54 位就是可以表示2 542^{54}254 个数,但是因为规格化,小数点后第一位不能取 0(r mr_mrm​ 进制的不能取 0),因此只要在2 542^{54}254 的基础上乘上 rm−1rm\frac{r_m-1}{r_m}rm​rm​−1​ 即可,也就是2p+m⋅ rm−1rm2^{p+m} \cdot \frac{r_m-1}{r_m}2p+m⋅rm​rm​−1​

2. ROM 表

历史考题:2018.04、2016.04

题目描述:   

课后习题 2-6

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

解: ROM 表相关: ROM 表需要2k2^k 2k 个单元,地址用 kk k 位二进制码表示,每个存储单元字长 k − 1k-1 k−1 位。 当存储器 kk k 位地址码的高 k − 1k-1 k−1 位全是 1 时,对应单元内容填 k − 1k-1 k−1 位全 1; 其余情况,最低位是 0 舍弃,最低位是 1 进 1 填 k − 1k-1 k−1 位内容。

简单理解分为三种情况: 红色:地址前 k − 1 ( 3 ) k-1(3)k−1(3) 位全是 1 11,内容取 k − 1 k-1k−1 个 1 11; 绿色:地址前 k − 1 ( 3 ) k-1(3)k−1(3) 位不全是 1 11,且第 k ( 4 ) k(4)k(4) 位是 0 00,内容取地址的前 k − 1 ( 3 ) k-1(3)k−1(3) 位; 蓝色:地址前 k − 1 ( 3 ) k-1(3)k−1(3) 位不全是 1 11,且第 k ( 4 ) k(4)k(4) 位是 1 11,内容取地址的前 k − 1 ( 3 ) k-1(3)k−1(3) 位的值 + 1 +1+1。 记忆方法:有点类似四舍五入,因为是二进制的所以 0 就是小于 0.5,1 就是大于0.5;只有红色的特殊情况如果进一就位数不够了,只能去尾。

地址内容地址内容地址内容地址内容00000000001001001000100110100100010010101101100110111100100010010011011010101101111011001101101111111011111111113. 哈夫曼码

历史考题:2021.04

题目描述:根据 指令频度 计算 等长码、哈夫曼码、扩展操作码平均码长   

课后习题 2-9

  经统计,某机器 14 条指令的使用频度分别为:0.01,0.15,0.12,0.03,0.02,0.04,0.02,0.04,0.01,0.13,0.15,0.14,0.11,0.03。分别求出用等长码、哈夫曼码、只有两种码长的扩展操作码等 3 种编码方式的操作码平均码长。

解: (1)等长码:机器共有 n nn 条指令,要对指令做二进制编码,等长码 顾名思义每条指令码的长度相同,即二进制位数相同,本题是 14 条指令,至少要⌈log214 ⌉= 4 \left \lceil \mathrm{log_214} \right \rceil =4⌈log2​14⌉=4 个二进制位来表示;由于等长码码长都一样,平均码长就是 4。 (2)哈夫曼码:这里就要用到指令的使用频度了,指令频度就是统计出来的每条指令使用的概率。如果让使用概率高的指令码长较短,使用概率低的指令码长较长,那么整体的平均码长就可以短一些。   计算哈夫曼码的平均码长要先构造哈弗曼树,哈弗曼树的绘制方法如下:   1)对指令频度从小到大排序   2)选最小(最靠左)的两个频度相加得到一个新的节点   3)将新的节点和剩余的频度排序,如果新的节点和剩余的频度有相同的,新生成的节点放在靠后(靠右)的位置   4)重复 2、3 步骤直到得到最后一个节点(最后一个节点的值为1)

  按照以上步骤可以得到如下草图: 在这里插入图片描述   1)排序过后第一个节点是最小的 2 个 0.01 相加得到新的节点 0.02;   2)第二次排序节点的 0.02 放在现有的 2 个 0.02 后面,因此第二个节点是靠左的 2 个 0.02 相加得到 0.04;   3)以此类推,可以画出这个草图,指令的码长就是数上方连接的节点个数;   4)哈夫曼码的平均码长就是每个指令的频度乘上各自的码长再相加,得到 3.38;   5)用红色标出节点的码长,然后把码长相等放在同一行,从下至上整理草图可以得到如下比较美观的哈夫曼树。 在这里插入图片描述 补充:   1)画完哈夫曼树要检查,如果出现频度低的码长比频度高的短,一定是画错了;   2)哈夫曼树的意思就是将节点的 2 个分支看作 0 和 1 的编码,假设左分支为 0,右分支为 1,最左边的 0.01 的指令编码为 000000,最右边 0.15 的指令编码为 111;

(3)两种码长的扩展操作码:   哈夫曼编码是最优化的编码,但是也可以看出他的码长种类比较多,这样不利于译码,所以就在此基础上妥协为码长种类较少的扩展操作码。   编码的时候短码不能是长码的前缀,例如一个指令是 001,另一个是 0011,个人理解是系统拿到一长串指令又不预先知道每个指令的长度那么就会混淆;可以看下哈夫曼树,它的构造方法就不会出现前缀的情况。

  本题就是在 4 种码长的哈夫曼码上转化成两种码长的扩展操作码。先观察哈夫曼码,14 条指令中 6 条码长是 3,3 位二进制表示数有 8 个,那么就会剩下 2 个作为长码的前缀;剩下还有 8 条指令,那么后缀就要能表示 4 个数,那么后缀用 2 位就可以了。所以本题就是 6 个频度高的码长为 3,8 个频度低的码长用 5。平均码长是一样算的,结果是 3.4。

补充:   这里算起来有点凭感觉,但是一般指令数量和码长种类都不多,多算几种情况对比一下,有的时候频度集中在个别一两条指令的时候可以考虑让他们的码长短一些,然后剩下的码长长一些,也许会是更优解。

(2023.4.9)评论区发现一些同学对于扩展操作码难以理解,这里更新一下,希望能有所帮助。 (1)理解题目   简单理解一下题目到底在干啥,机器存在14条指令,对这些指令需要做二进制编码,编码的长度(二进制的位数)自然不能很随意,可以理解为越短越好,机器效率越高。   下面以4条指令做个例子,假设4条指令的频度都是0.25,那么很自然可以全是2位二进制编码:00、01、10、11,平均码长就是2。但是假设频度是0.97和3个0.01,也就是其中一条指令用的非常频繁,那么4条指令全都用2位也许就不是最优的了,我们会希望0.97的那条指令编码更短,譬如分别是0、10、110、111,此时的平均码长为 1 ∗ 0.97 + 2 ∗ 0.01 + 3 ∗ 0.01 ∗ 2 = 1.05 1*0.97+2*0.01+3*0.01*2=1.051∗0.97+2∗0.01+3∗0.01∗2=1.05,平局码长明显更短。但之前4个0.25的时候这样编码,平均码长为 1 ∗ 0.25 + 2 ∗ 0.25 + 3 ∗ 0.25 ∗ 2 = 2.25 1*0.25+2*0.25+3*0.25*2=2.251∗0.25+2∗0.25+3∗0.25∗2=2.25,平均码长就变长了。   通过这个例子,相信会对题目中的指令条数、频度、编码、平均码长到底都在干些啥有一定的感悟,下面再根据例题进一步理解。 (2)理解扩展操作码   首先看下第二张美化过的哈夫曼树的图,其实这个图就对应着每条指令的编码(指令具体的编码是不唯一的,解题的时候也不需要写出编码,这里只是为了方便理解)。我们可以假设每个分支的左边是1右边是0,这样就能写出每条指令的编码了,例如从右往左的4条指令依次是:0.15(000)、0.15(001)、0.14(010)、0.13(011),最左边的指令是0.01(111111)。当把所有的指令编码都写出来以后,会发现这种编码是一定符合短码不是长码前缀这个要求的,并且哈夫曼码的平均码长是最短的。   两种码长的扩展操作码的重点是在两种码长,可能的结果是非常多的,譬如可以1条指令码长为1,剩下13条指令码长为5,只不过这样的结果平均码长是较长的。由于哈夫曼码是最优解,在它的基础上做修改通常会比自己直接试着编码的结果要好。   本题中是6个3、1个4、5个5、2个6,我们可以从6个3入手,3位2进制数有8种,而现在已经有6条指令占了6种,那么只剩下2种可以作为剩下指令编码的前缀。直观一点,我们可以假设6条3位的是(000~101),剩下的2种(110、111)可以作为前缀,剩下还要8条指令码长需要一样,那么后缀就是需要⌈log28/2 ⌉= 2 \left \lceil \mathrm{log_28/2} \right \rceil =2⌈log2​8/2⌉=2 位(110xx、111xx),所以两种码长的扩展操作码是6个3、8个5。   实际上也可以试试别的情况,譬如假设7个3的时候,剩下的前缀有1种,剩下的指令有7条,那么后缀就需要⌈log27/1 ⌉= 3 \left \lceil \mathrm{log_27/1} \right \rceil =3⌈log2​7/1⌉=3 位,最后的结果就是7个3、7个6;也可以试试5个3的时候,剩下的前缀有3种,剩下的指令有9条,需要后缀⌈log29/3 ⌉= 2 \left \lceil \mathrm{log_29/3} \right \rceil =2⌈log2​9/3⌉=2 位,最后的结果就是5个3、9个5。安全起见,做题的时候可以适当增减短码的条数,多试几种情况分别计算平均码长,然后选最短的那种。

第 3 章 存储、中断、总线与 I/O 系统 1. 并行主存系统

历史考题:2017.10 (2)、2016.10 (1)、2015.10 (2)、2015.04 (1)

题目描述: (1)根据 模 m mm 分体交叉存取每个分体的 存取周期、宽度 计算主存 最大频宽; (2)根据 模 m mm 单字交叉存储器申请队的 转移概率 计算每个存储周期能访问到的 平均字数。   

课后习题 3-2

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

解: 最大频宽B m= W × m /T M= 4 × m / 2 B_{\mathrm{m}}=W\times m/T_{\mathrm{M}}=4\times m/2Bm​=W×m/TM​=4×m/2 0.6 ×B m≥ 4 0.6\times B_{\mathrm{m}}\ge40.6×Bm​≥4 求得 m ≥ 3.33 m\ge3.33m≥3.33,因为 m mm 要取 2 的幂所以 m = 4 m=4m=4

存取周期T MT_{\mathrm{M}}TM​:每个分体存取一次数据的时间 宽度 W WW:存储体字长,每个分体一次存取多少数据 模 m mm:并行工作的存储体数,分体的数量 频宽 B BB:存取数据的速度

课后习题 3-1

  程序存放在模 32 单字交叉存储器中,设访存申请队的转移概率 λ \lambdaλ 为 25%,求每个存储周期能访问到的平均字数。当模数为 16 呢?由此可得到什么结论?

解: 记公式 B =1−(1−λ) m λ =1−0.75 32 0.25 ≈ 4B=\frac{1-(1-\lambda)^m}{\lambda}=\frac{1-0.75^{32}}{0.25}\approx 4 B=λ1−(1−λ)m​=0.251−0.7532​≈4

  模数为 16 时, B ≈ 3.96 B\approx 3.96B≈3.96。   可以看出两者非常接近,也就是说提高模数对提高主存实际频宽效果不显著。实际上模数进一步增大会因为工程实现上的问题,导致性能反而下降,且价格更高。所以模数不宜太大,对于 λ \lambdaλ 为 25% 时,模数取 8 时, B BB 就接近 3.6 了。

  补充:书上 P77 有模分别取 4、8、16 时 λ \lambdaλ 和 B BB 的曲线,就能反映出当 λ \lambdaλ 大于 30% 的时候不同模数的 B BB 差异不大,但小于 10% 的时候差异就很明显了。

2. 中断屏蔽位、程序运行图

历史考题:2021.04、2020.04、2018.04、2015.10

题目描述:根据中断 响应次序 和 处理次序,画出 中断屏蔽位、程序运行图。   

课后习题 3-6

  若机器共有 5 级中断,中断响应优先次序为 1 → 2 → 3 → 4 → 5 1\to2\to3\to4\to51→2→3→4→5,现要求其实际的中断处理次序为 1 → 4 → 5 → 2 → 3 1\to4\to5\to2\to31→4→5→2→3,回答下面问题: (1)设计各级中断处理程序的中断级屏蔽位(令“1”对应于屏蔽,“0”对应于开放); (2)若在运行用户程序时,同时出现第 4、2 级中断请求,而在处理第 2 级中断未完成时,又同时出现第 1、3、5 级中断请求,请画出此程序运行过程示意图。

解: (1)中断屏蔽位的设置

中断处理程序级别中断级屏蔽位12345111111201100300100401111501101

怎么画的:这里是“1”对应于屏蔽,“0”对应于开放,不同题目会不一样,注意审题 中断响应次序: 1 → 2 → 3 → 4 → 5 1\to2\to3\to4\to51→2→3→4→5 中断处理次序: 1 → 4 → 5 → 2 → 3 1\to4\to5\to2\to31→4→5→2→3   屏蔽位对应的就是程序级别,本题的处理次序是 1 → 4 → 5 → 2 → 3 1\to4\to5\to2\to31→4→5→2→3,代表 1 级别最高,没有任何程序可以打断,3 级别最低,除了自己本身别的都能打断,屏蔽位就代表对应位置的级别是否可以打断自己。因此,1 级的屏蔽位全屏蔽,3 级的除了 3 都开放。再举例 4,4 排在第二,除了 1 级都不能打断,所以只有 1 是开放。

(2)程序运行过程示意图(彩色标号仅用于解释说明) 在这里插入图片描述 怎么画的: 中断响应次序: 1 → 2 → 3 → 4 → 51\to2\to3\to4\to5 1→2→3→4→5 中断处理次序: 1 → 4 → 5 → 2 → 31\to4\to5\to2\to3 1→4→5→2→3 红色序号:图的框架,(4) 中断处理程序下面的序号对应中断响应次序 蓝色序号: (1) 用户程序运行 (2) 同时出现 ②④ 中断请求 (3) 按照响应次序 ② 要先响应,但是 ④ 的处理优先级高,所以只响应不处理;响应的时间很短,往下凹一点点就代表响应 (4) ④ 响应并处理,短横线代表交换程序状态字的时间,理解为切换到中断处理程序 (5) ④ 处理完了回 ② (6) 响应并处理 ② (7) ② 还没处理完出现了 ①③⑤ 中断请求 (8) 打断 ② 的处理,响应 ①,由于此时 ① 的优先级最高,直接处理 ① (9) ① 处理完后回到 ② 响应一下,此时因为还有高于 ② 的 ⑤ 还没处理所以先不处理 ② (10) 响应并处理 ⑤ (11) 处理完 ⑤ 回到 ② 响应并继续处理 ② 剩余的部分 (12) ② 是从用户程序过来的,要先回到用户程序,再去处理 ③ (13) 响应并处理 ③ (14) ③ 处理完回到用户程序,继续执行用户程序

易错点: (1)(9) 到 (10) 的过程中不响应 ③,理解为此时程序已经响应了 ②,导致中断屏蔽位屏蔽了 ③ (2)(11) 到 (12),从哪儿来回哪儿去,② 是从用户程序来的,执行完要先回去,而不能直接去处理 ③ (3)(14),最后回到用户程序的时候容易忘了画短横线

3. 通道流量设计

历史考题:2021.10、2019.10、2016.04

题目描述:根据通道 选择设备 和 传送一个字节数据 的时间,以及各个设备的 工作速率(传送速率) 或 申请间隔,计算不同类型通道的 最高流量(极限流量) 和 能挂哪些设备。   

课后习题 3-13

  有 8 台外设,各设备要求传送信息的工作速率分别如下表所示。现设计的通道在数据传送期,每选择一次设备需 2 μ s 2 \mu s2μs,每传送一个字节数据也需要 2 μ s 2 \mu s2μs。 (1)若用作字节多路通道,通道工作的最高流量是多少? (2)作字节多路通道用时,希望同时不少于 4 台设备挂在此通道上,最好多挂一些,且高速设备尽量多挂一些,请问应选哪些设备挂在此通道上?为什么? (3)若用作数组多路通道,通道工作的最高流量是多少?设定长块大小取成 512 B。 (4)作数组多路通道用时,应选哪些设备挂在此通道上?为什么?

设备工作速率 /(K B / s )(\mathrm{KB / s})(KB/s)设备工作速率 /(K B / s )(\mathrm{KB / s})(KB/s)A500E50B240F40C100G14D75H10

相关概念:

数据宽度数据传输方式通道极限流量实际最大流量字节多路通道1个字节字节交叉1 TS +TD\frac{1}{T_S+T_D}TS​+TD​1​各个设备速率和数组多路通道定长块成组交叉K TS + K ⋅TD\frac{K}{T_S+K\cdot T_D}TS​+K⋅TD​K​速率最大的设备选择通道可变长块N TS + N ⋅TD\frac{N}{T_S+N\cdot T_D}TS​+N⋅TD​N​速率最大的设备

数据宽度:代表通道每次传送多少数据后重新选择一次设备; 字节多路通道:每传输一个字节就要重新选择设备; 数组多路通道:每传输一个定长块大小的数据重新选择设备,定长块就是固定K K K 个字节; 选择通道:每次把一个设备需要的数据传完再重新选设备,因为每个设备需要的数据是不一样的所以是可变长块,如一个设备需要传NNN 个字节的数据。

T ST_STS​:通道选择一次设备需要的时间;T DT_DTD​:通道传送一个字节需要的时间;对应题目给出的两个时间。

通道极限流量(最高流量):单位时间内最多能传送多少数据,也就是通道理论上的最大传送速率。 实际最大流量:通道上所挂设备所需要的最大传送速率,也就是和所挂设备的 工作速率(传送速率) 或 申请间隔 有关(对应题目给出的表格),实际最大流量不能超过通道的极限流量。

解: (1)字节多路通道的极限流量:传送 1 个字节需要选择一次设备 + 传送一个字节   fmax⋅byte =1T S +T D=12+2 = 0.25  B/μsf_{\mathrm{max\cdot byte}}=\frac{1}{T_S+T_D}=\frac{1}{2+2}=0.25\ \mathrm{B/\mu s} fmax⋅byte​=TS​+TD​1​=2+21​=0.25 B/μs

  答案给出的是 250  K B / s250\ \mathrm{KB/s}250 KB/s,直接按 1000 倍而不是 1024 倍换算。

(2)字节多路通道上的 设备速率之和 不能超过 极限流量   A 和 B 明显不能挂,后面 CDEGH 加起来刚好 249  K B / s249\ \mathrm{KB/s}249 KB/s,∑i=1 5 fbyte⋅i= 100 + 75 + 50 + 14 + 10 = 249 < 250 \sum\limits^{5}_{i=1}f_{\mathrm{byte}\cdot i}=100+75+50+14+10=249

相关推荐: