1. 解释保护位、舍入位、粘贴位的作用。
保护位:在浮点数中间计算中,在右边多保留的两位中的首位;用于提高舍入精度;
舍入位:在浮点数中间计算中,在右边多保留的两位中的第二位;使浮点中间结果满足浮点格式,得到最接近的数;
粘贴位:同保护位和舍入位一样用于舍入的位,舍入位右边有非零的数据时将其置1,它使舍入更加合理。
2.阐述冯诺依曼理论的三个要点。
五大部件,运算器、控制器、存储器、输入/输出设备
采用二进制
程序和原始数据先存入存储器,然后再启动计算机工作。
3.简述一个C语言程序转换为可执行程序的4个步骤。
C语言程序->(编译器)->汇编语言程序->(汇编器)->目标模块:机器语言模块&目标库:例程序->(链接器)->可执行代码:机器语言程序->(加载器)->存储器。
4.解释程序具有的局部性。
时间局部性与空间局部性。
对两个局部性进行解释。
时间局部性:某个数据项在被访问之后可能很快被再次访问的特性
空间局部性:某个数据项在被访问之后,与其地址相近的数据项可能很快被访问的特性
5.阐述硬件设计的三个基本原则。
设计原则一:简单源于规整
设计原则二:越少越快
设计规则三:优秀的设计需要适宜的折中方案
6. 简述缩短 cpu 时间的方法。
根据公式CPU时间=指令数 * CPI * 时钟周期时间。
指令数:执行某程序所需的总指令数量。
CPI指令数:执行某程序所需的总指令数量每条指令的时钟周期数,表示执行某个程序或者程序片段时每条指令所需的时钟周期平均数。
时钟周期:为计算机一个时钟周期的时间,通常是处理器时钟,一般为常数。
这个公式清楚地表明,硬件设计者减少一个程序的 CPU 时钟周期数,或减少时钟周期时间,就能改进性能。在后面几章中我们将看到,设计者经常要面对这些因素之间的权衡。许多技术在减少时钟周期数的同时也会引起时钟周期时间的增加。
因此:
(1)减少程序的时钟周期数
(2)增加时钟频率(减少时钟周期时间)
(3)权衡时钟频率、时钟周期数量
9.请画出乘除法器原理图,并解释一个除法的执行过程。

P127页图 3- 11
余数寄存器左移,上商到余数寄存器的最低位。2分
除法的算法步骤:
步骤一:余数寄存器左移一位
步骤二:余数寄存器最高位减去除数寄存器中的数
步骤三:若相减后余数寄存器中的最高位为0,则上商到余数寄存器最低位为1
若相减后余数寄存器中的最高位为1,上商到余数寄存器最低位为0
10.MIPS 如何得到一个 32 位的立即数。
采用Lui指令,将高16位加载,低16位清零
Ori将低16位插入,形成32位立即数。
11. 简述控制冒险的三种解决方法。
**(1)假定分支不发生:**执行分支指令时,假设分支不发生,继续执行顺序的指令流。如果分支发生,就丢弃己经读取并译码的指令,并按分支目标继续执行;如果分支不发生的可能性是 50 %, 同时丢弃的代价很小,那么这种优化方法可以将控制冒险的代价减半。
**(2)缩短分支延迟:**为了将分支决策提前,需要提前两个动作:计算分支目标地址和判断分支条件。分支目标地址的计算是比较简单的,我们在 IF/ID 流水线寄存器中已经有了 PC 的值和立即数字段,所以只需要将分支地址计算从 EX 级移到 ID 级就可以了。当然,尽管分支目标地址对所有指令都会计算,但仅在需要时才会使用。
判断分支条件比较复杂。为了判断分支的执行条件,需要比较从 ID 级取到的两个寄存器的值是否相等,判断相等的方法可以是先将对应的位进行异或操作,然后将结果按位进行或操。为了把分支条件判断提前到 ID 级,还需要额外的旁路和冒险检测硬件,因为分支条件的判断可能依赖于还在流水线中的结果。
**(3)动态分支预测:**动态分支预测是通过查找指令的地址观察上一次执行该指令时分支是否发生,如果上次执行时分支发生,就从上次分支发生的地方开始取新的指令。
可以采用分支预测缓存分支历史记录表分支预测缓存是小块按照分支指令的地址低位索引的存储器区,其中包括一位或多位数据用以说明最近是否发生过分支。
13. MIPS 中,I 型指令的格式为:Op Rs Rt Constant or Address,即指令中只有一个操作数是立即数。试问 I 型指令为什么没选择包括两个立即数的格式?
(1)考虑mips指令的设计规则
a. 简单源于规整:将I型指令限定为一个立即数更加简洁,易于解析和执行,有助于提高执行效率和简化硬件设计。支持两个立即数的指令可能需要更复杂的硬件电路和逻辑设计,这会增加成本降低性能
b.优秀的设计需要适宜的折衷方案:通过限制I型指令为一个立即数,可以使得指令集更加一致,易于学习使用
(2)性能层面:
a. 两个立即数会导致在32位mips指令中可寻址范围变小,降低了硬件性能和执行效率
b. 单个立即数已经可以解决大部分问题,如果要引入两个立即数,可能会增加指令长度,影响指令的流水线执行,降低效能
14. 请画出乘法器硬件结构图,并写出实现乘法的算法步骤。
P123

乘法的算法步骤:
步骤一:若乘数最低位为0,无操作;若乘数最低位为1,将被乘数加到积寄存器最高位
步骤二:积寄存器右移
步骤三:重复步骤一、步骤二直到积寄存器中64位全为积
16.请举例说明计算机系统结构 8 个伟大思想中的一个及其应用。
(1)面向摩尔定律的设计。Eg:芯片设计要依据完成时的工业水平(单芯片集成度每18-24个月翻一番)
(2)使用抽象简化设计。Eg:使用高级程序语言编程时可以不用过多考虑底层的机器指令如何实现功能
(3)加速大概率事件。Eg:采用静态分支预测,即假定分布发生或不发生的策略解决控制冒险,加速执行
(4)通过并行提高性能。Eg:通过并行树乘法器加快乘法运算;采用多处理器提高CPU性能
(5)通过流水线提高性能。Eg:多周期指令通过流水线的实现方式加速,提高执行性能
(6)通过预测提高性能。Eg:通过动态分支预测来减少控制冒险可能造成的阻塞,提高执行性能
(7)存储器层次。Eg:速度最快、容量最小、每位价格最贵的在顶层
(8)通过冗余提高可靠性。Eg:通过增加硬件支持解决流水线中的结构冒险
17.在存储器层次结构中,处理写操作的方法有写回和写直达,对 Cache 与主存、主存与外部存储器,应该用哪种方法?为什么?
对Cache与主存,可采用写回和写直达,写直达替换方法简单,但需要写缓冲区,写回法需要保存更多的状态;对主存与外部存储器,由于磁盘的写延迟较长,++++只能使用写回机制++++。
18.C 语言数组同一行的数组元素优先分配存储空间,如下代码段: 言数组同一行的数组元素优先分配存储空间,如下代码段:
for (i=0; i<8; i++)
for (j=0; j<8000; j++)
a[i][j]=b[i][0]+a[j][i];
根据上面的代码段,分析变量访问的时间局部性和空间局部性。
时间局部性:如果某个数据项被访问,那么在不久的将来它可能再次被访问,如程序段中的数组变量b[i][0],具有时间局部性。
空间局部性:如果某个数据项被访问,与它地址相邻的数据项很快可能也将被访问,如程序段中,a[i][j](j<7009)被访问后,与其地址相邻的a[i][j+1]很快也被访问。
20. MIPS 指令集的三项设计原则是什么?举例说明这些原则是如何应用到具体指令中的?
MIPS指令集的三项设计原则是:
1)简单源于规整,例如:add 1 2 $3,每个指令有且仅有三个操作数;所有的MIPS指令都是32位
2)越小越快,例如:MIPS指令集中只要32个寄存器;
3)优秀的设计需要适宜的折中方案,例如:保持指令长度相同,但是不同类型的指令采用不同的指令格式,add 1, 2, 3、lw 1, 50($2) 。
21. 旁路是如何解决数据冒险的?是否能解决所有的数据冒险?并举例说明。
旁路从内部寄存器或存储器中提前取出所需数据,将其直接送到需要它的地方,解决数据冒险。例如add 0,1,2;sub 3,0,2;指令sub在add执行EX阶段生成加法的运算结果后,从旁路直接获得这个结果参与sub的运算,而不用等待add指令执行结束。
不能解决所有的数据冒险,例如装载-使用型数据冒险,lw 0,12(1);add 3,0,$2,无法通过旁路解决
22. 直接相联映射、组相联映射、全相联映射的共同点是什么?它们之间的关系是什么?
直接相联映射、组相联映射、全相联映射的共同点是主存和cache都是分成同样大小的存储区块
组相联映射是直接相联映射和全相联映射的折中方案,若cache只有一组则为全相联映射,若一组中只有一块这为直接相联映射。
23. 下表是 TLB,页表以及 cache 访问中可能的组合,完成表第四栏的内容填。
如果可能,在什么情况下发生?
