计组习题的那些事(1)
计组习题的那些事(1)
今天起床,感觉十分通透啊,是个不错的日子!!!
问题:
按照图1-2中部件之间的数据传输及控制命令,列出执行机器指令
Load R2, LOC
所需的步骤。假设包含指令的存储单元的地址最初保存在寄存器 PC
中。
答案:
- 将指令字地址发送到存储器
- 将寄存器
PC
的内容(即当前指令的地址)传送到存储器地址总线,并发出读控制命令以读取该指令。
- 将寄存器
- 取回指令字并加载到寄存器 IR
- 等待存储器返回所请求的指令字,并将其加载到指令寄存器
IR
中。 - 在
IR
中,控制电路对指令进行解释(或译码),以确定需要执行的操作。
- 等待存储器返回所请求的指令字,并将其加载到指令寄存器
- 递增 PC 寄存器
- 更新寄存器
PC
的内容,使其指向存储器中的下一条指令。
- 更新寄存器
- 读取操作数地址 LOC
- 从指令寄存器
IR
中提取地址字段LOC
,将其发送到存储器地址总线,并发出读控制命令。
- 从指令寄存器
- 将数据加载到 R2
- 等待存储器返回地址 LOC 所指向的数据,将该数据加载到寄存器
R2
中。
- 等待存储器返回地址 LOC 所指向的数据,将该数据加载到寄存器
问题:
根据描述,分别列出以下机器指令的执行步骤:
Add R4, R2, R3
Store R4, LOC
答案:
1. Add R4, R2, R3
的执行步骤
- 获取指令:
- 将寄存器
PC
中的地址发送到存储器,并发出读取控制命令。
- 将寄存器
- 加载并译码指令:
- 等待存储器返回指令字,将其加载到指令寄存器
IR
中,由控制电路解析指令以确定操作(即加法)。
- 等待存储器返回指令字,将其加载到指令寄存器
- 更新 PC:
- 递增
PC
的内容以指向下一条指令。
- 递增
- 加载操作数并执行加法:
- 将寄存器
R2
和R3
的内容传送到算术逻辑单元(ALU),并发出加法命令。
- 将寄存器
- 存储结果:
- 将 ALU 的输出结果发送到寄存器
R4
中。
- 将 ALU 的输出结果发送到寄存器
2. Store R4, LOC
的执行步骤
- 获取指令:
- 将寄存器
PC
中的地址发送到存储器,并发出读取控制命令。
- 将寄存器
- 加载并译码指令:
- 等待存储器返回指令字,将其加载到寄存器
IR
中,由控制电路解析指令以确定操作(即存储操作)。
- 等待存储器返回指令字,将其加载到寄存器
- 更新 PC:
- 递增
PC
的内容以指向下一条指令。
- 递增
- 准备地址与数据:
- 从
IR
中提取地址值LOC
,并将其与寄存器R4
的内容一起发送到存储器。
- 从
- 写入数据:
- 发出写控制命令,将
R4
的内容存储到地址LOC
指定的位置。
- 发出写控制命令,将
解释:
1. Add R4, R2, R3
这是一个算术指令,用于将两个寄存器 (R2
和
R3
) 的值相加,并将结果存储到目标寄存器 R4
中。执行过程包括获取指令、解析操作、加载操作数、ALU
计算以及存储结果。
2. Store R4, LOC
这是一个存储指令,用于将寄存器 R4
的内容写入到存储器指定的地址
LOC
。执行过程包括指令获取与解析、地址计算、数据传输和存储器写操作。
两个指令分别代表了处理器内部操作与存储器交互的不同方面,展示了典型的指令执行流程。
两种实现
Load R2, A
Load R3, B
Add R4, R2, R3
Store R4, C
描述其执行过程。
如果用更少的指令完成相同操作,另一组指令是:
Move C, B
Add C, A
缓存问题:
这里其实是在为第八章进行服务,决定从头看这本计组书,既然说了要通透,那又怎么能够食言呢?
- 在没有和有高速缓存的情况下,计算程序执行时间并求加速比。
- 用变量替换常数,写出加速比的表达式。
- 如果指定变量取值,求满足给定加速比的循环迭代次数。
- 当循环迭代次数趋于无穷时,加速比的上限是多少?
答案:
(a) 没有高速缓存和有高速缓存的执行时间及加速比
- 没有高速缓存的时间 $ T $:
- 总共 300 条指令,其中循环外有 $ 300 - 50 = 250 $ 条。
- 每条指令需要 20 个时间单位:
$ T = 250 + 50 = 5000 + 15000 = 20000 $
- 总共 300 条指令,其中循环外有 $ 300 - 50 = 250 $ 条。
- 有高速缓存的时间 $ T_{} $:
- 程序第一次执行所有 300
条指令(高速缓存为空,需要从主存取指令)。
- 循环需要执行 15 次,其中第 1 次需要从主存取指令,后续 14
次从高速缓存中取指令:
$ T_{} = 300 + 50 = 6000 + 1400 = 7400 $
- 程序第一次执行所有 300
条指令(高速缓存为空,需要从主存取指令)。
- **加速比 $ S \(**:\) S = = $
(b) 用变量替换常数,写出加速比表达式
令:
- $ w $: 程序总指令数(300)
- $ x $: 循环中的指令数(50)
- $ y $: 循环的迭代次数(15)
- $ m $: 无高速缓存时每条指令的时间(20)
- $ c $: 高速缓存命中时每条指令的时间(2)
没有高速缓存的总时间为:
$ T = (w - x) m + x m y $
有高速缓存的总时间为:
$ T_{} = w m + x c (y - 1) $
加速比 $ S $ 为:
$ S = $
化简为:
$ S = $
(c) 设 $ w = 300, x = 50, m = 20, c = 2 $,求 $ y $ 满足 $ S = 5 $
加速比公式为:
$ 5 = $
整理后:
$ 5 = 300 + 50 (y - 1) $
展开:
$ 30000 + 500 (y - 1) = 60000 + 100 (y - 1) $
化简后:
$ 400 (y - 1) = 30000 $
解得:
$ y = 49 $
(d) 当 $ y $ 时,加速比的上限
从加速比公式:
$ S = $
当 $ y $ 时,分子和分母中 $ x (y - 1) $ 项占主导,化简为:
$ S = $
因此,加速比的上限为:
$ S_{} = = = 10 $
总结:
- 没有高速缓存和有高速缓存的加速比分别为 $ 2.7 $。
- 一般加速比公式为:
$ S = $ - 当 $ y = 49 $ 时,加速比为 5。
- 加速比的上限为 $ = 10 $。
问题:
- 假设从高速缓存和主存中取指令的时间分别为 1 和 10
时间单位,并且所请求指令在高速缓存中找到的概率为
0.96,计算没有高速缓存与有高速缓存情况下的加速比。
- 如果高速缓存大小加倍,并假设未命中概率减半(即为 0.02),计算新的加速比。
答案:
(a) 高速缓存未加倍时的加速比
- 没有高速缓存的情况下:
- 每条指令都需要从主存中取,取指令时间为 10 时间单位。
- 有高速缓存的情况下:
- 高速缓存命中概率为 $ P_{} = 0.96 $,未命中概率为 $ P_{} = 0.04
$。
- 未命中的情况下,从主存取指令需要 10 个时间单位,然后从缓存取出需要 1
个时间单位,总计 $ 10 + 1 = 11 $ 个时间单位。
- 平均取指时间:
$ T_{} = P_{} + P_{} $ 代入值:
$ T_{} = 0.96 + 0.04 = 0.96 + 0.44 = 1.4 $
- 高速缓存命中概率为 $ P_{} = 0.96 $,未命中概率为 $ P_{} = 0.04
$。
- **加速比 $ S \(**:\) S = = $
(b) 高速缓存大小加倍时的加速比
新的高速缓存性能参数:
- 高速缓存未命中概率减半,即 $ P_{} = 0.02 $。
- 命中概率 $ P_{} = 0.98 $。
- 高速缓存未命中概率减半,即 $ P_{} = 0.02 $。
新的平均取指时间:
$ T_{} = P_{} + P_{} $ 代入值:
$ T_{} = 0.98 + 0.02 = 0.98 + 0.22 = 1.2 $**新的加速比 $ S \(**:\) S = = $
解释:
- 高速缓存的作用:
- 高速缓存通过减少从主存取指令的次数显著降低了平均取指时间。
- 命中概率越高,平均取指时间越接近于 1。
- 高速缓存通过减少从主存取指令的次数显著降低了平均取指时间。
- 加倍高速缓存的效果:
- 缓存命中概率从 0.96 提高到
0.98,未命中概率降低一半,使得平均取指时间从 1.4 降到 1.2。
- 加速比因此从 7.1 增加到 8.3。
- 缓存命中概率从 0.96 提高到
0.98,未命中概率降低一半,使得平均取指时间从 1.4 降到 1.2。
- 结论:
- 高速缓存的大小和命中率直接影响加速比。更大的高速缓存进一步提升性能,但收益会逐渐减小。
问题:
- 一个字节存储单元中包含模式
01010011
,当解释为二进制数时,它所表示的十进制数是多少?如果解释为 ASCII 码,它表示什么?
- 描述如何检测两个补码数相减时的溢出。
答案:
1.9 解释字节模式为二进制数和 ASCII 码
作为二进制数:
模式01010011
的十进制值计算如下:
$ 01010011 = 64 + 16 + 2 + 1 = 83 $ 因此,十进制值为 $ 83 $。作为 ASCII 码:
ASCII 码值 $ 83 $ 对应于字符 'S' (大写字母 S)。
总结:
- 十进制数值:83
- ASCII 表示:'S'
1.10 检测两个补码数相减时的溢出
假设操作为 $ R = A - B $。
- 在补码运算中,减法可视为 $ A - B = A + (-B) $,其中 $ -B $ 是 $ B $ 的补码形式。
溢出条件:
溢出发生在结果 $ R $ 超出补码能表示的范围(即符号位被错误改变)。溢出检测规则:
- 当 $ A $ 和 $ B $ 的符号不同时(一个是正数,一个是负数):
- 如果 $ R $ 的符号与 $ A $ 的符号不同,则溢出。
- 等价地,如果 $ R $ 的符号与 $ B $ 的符号相同,也表示溢出。
- 如果 $ R $ 的符号与 $ A $ 的符号不同,则溢出。
- 当 $ A $ 和 $ B $ 的符号不同时(一个是正数,一个是负数):
总结检测方法:
- 条件 1: $ (A) (B) $
- 条件 2: $ (R) (A) $ 或 $ (R) = (B) $。
- 条件 1: $ (A) (B) $
解释:
- 当符号位改变,结果超出了补码表示范围,就发生了溢出。例如,若正数减去负数结果超出最大正数范围,则溢出。
- 通过检查符号位的变化,可以准确判断溢出是否发生。
这一章的习题并不难,当一个开胃小菜好了,后面的应该都是很重量级的。