【计算机组成原理2014年真题44题-12分】
(1)M的存储器编址单位是什么?
(2)已知sll指令实现左移功能,数组A中每个元素占多少位?
(3)题44表中 bne指令的OFFSET字段的值是多少?己知 bne指令采用相对寻址方式,当前PC内容为bne 指令地址,通过分析题44表中指令地址和 bne 指令内容,推断出 bne指令的转移目标地址计算公式。
(4)若M采用如下“按序发射、按序完成”的5级指令流水线:F(取值)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起3个时钟周期的阻塞,则Р中哪些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险?为什么指令1的执行不会因为与指令5的数据相关而发生阻塞?
【第一步:信息提取】
OP:6位,可以有64条操作码
Rs:5位,可以有32个寄存器
Rd:5位,可以有32个寄存器
OFFSET:16位,
【第二步:具体解答】
第一小题:
(1)M的存储器编址单位是什么?
已知计算机M采用32位定长指令字,即一条指令占4B,观察表中各指令的地址可知,每条指令的地址差为4个地址单位,即4个地址单位代表4B,一个地址单位就代表了1B,所以该计算机是按字节编址的。
第二小题:
(1)已知sll指令实现左移功能,数组A中每个元素占多少位?
在二进制中某数左移两位相当于乘以4,由该条件可知,数组间的数据间隔为4个地址单位,而计算机按字节编址,所以数组A中的每个元素占4B。
第三小题:
(1)题44表中 bne指令的OFFSET字段的值是多少?己知 bne指令采用相对寻址方式,当前PC内容为bne 指令地址,通过分析题44表中指令地址和 bne 指令内容,推断出 bne指令的转移目标地址计算公式。
由表可知,bne指令的机器代码为1446FFFAH,根据题目给出的指令格式,后2B的内容为OFFSET字段,所以该指令的OFFSET字段为FFFAH,用补码表示,值为-6。
系统执行到 bne指令时,PC自动加4,PC的内容为08048118H,而跳转的目标是08048100H,两者相差了18H,即24个单位的地址间隔,所以偏移地址的一位即是真实跳转地址的-24/-6=4位(1分)。可知 bne指令的转移目标地址计算公式为 ( P C ) + 4 + O F F S E T × 4 (PC)+4+ OFFSET×4 (PC)+4+OFFSET×4
第四小题:
(1)若M采用如下“按序发射、按序完成”的5级指令流水线:F(取值)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起3个时钟周期的阻塞,则Р中哪些指令的执行会由于数据相关而发生流水线阻塞?
由于数据相关而发生阻塞的指令为第2、3、4、6条,因为第2、3、4、6条指令都与各自前一条指令发生数据相关。
注:解题点看前一条的右边和后一条的左边
(2)哪条指令的执行会发生控制冒险?
第6条指令会发生控制冒险。
(3)为什么指令1的执行不会因为与指令5的数据相关而发生阻塞?
当前循环的第5条指令与下次循环的第1条指令虽然有数据相关,但由于第6条指令后有3个时钟周期的阻塞,因而消除了该数据相关。
【计算机组成原理2014年真题45题-8分】
假设对于4题中的计算机M和程序Р的机器代码,M采用页式虚拟存储管理;P开始执行时,(R1)=(R2)=0,(R6)=1000,其机器代码已调入主存但不在Cache中;数组A未调入主存,且所有数组元素在同一页,并存储在磁盘同一个扇区。请回答下列问题并说明理由。
(1)P执行结束时,R2的内容是多少?
(2)M的指令Cache和数据Cache分离。若指令Cache共有16行,Cache和主存交换的块大小为32字节,则其数据区的容量是多少?若仅考虑程序段Р的执行,则指令Cache的命中率为多少?
(3)P在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组A的访问,需要读磁盘和TLB至少各多少次?
【第一步:信息提取】
同上
【第二步:具体解答】
第一小题:
(1)P执行结束时,R2的内容是多少?
R2里装的是i的值,循环条件是i<N (1000),即当i自增到不满足这个条件时跳出循环,程序结束,所以此时i的值为1000。
第二小题:
(1)M的指令Cache和数据Cache分离。若指令Cache共有16行,Cache和主存交换的块大小为32字节,则其数据区的容量是多少?
Cache共有16块,每块32字节,所以 Cache数据区的容量为16x32B=512B。
(2)若仅考虑程序段Р的执行,则指令Cache的命中率为多少?
P共有6条指令,占24字节,小于主存块大小(32B),其起始地址为08048100H,对应一块的开始位置,由此可知所有指令都在一个主存块内。
读取第一条指令时会发生Cache缺失,故将Р所在的主存块调入Cache某一块,以后每次读取指令时,都能在指令Cache中命中。因此在1000次循环中,只会发生1次指令访问缺失,所以指令Cache的命中率为(1000×6-1)/(1000*6)= 99.98%。
第三小题:
(1)P在执行过程中,哪条指令的执行可能发生溢出异常?
指令4为加法指令,即对应sum+=A[i],当数组A中元素的值过大时,则会导致这条加法指令发生溢出异常
而指令2、5虽然都是加法指令,但它们分别为数组地址的计算指令和存储变量i的寄存器进行自增的指令,而i最大到达1000,所以它们都不会产生溢出异常。
(2)哪条指令的执行可能产生缺页异常?
只有访存指令可能产生缺页异常,即指令3可能产生缺页异常。
(3)对于数组A的访问,需要读磁盘和TLB至少各多少次?
因为数组A在磁盘的一页上,而一开始数组并不在主存中,第一次访问数组时会导致访盘,把A调入内存,而后数组A的元素都在内存中,不会导致访盘,所以该程序一共访盘一次。