首页 > 试题广场 >

回答下面问题

[问答题]

假设对于44题中的计算机M和程序P的机器代码,M采用页式虚拟存储管理。P开始执行时,(R1)= (R2)=0. (R2)=1000,其机器代码已调入主最后存但不在Cache中;数组A未调入主存,其所有数组元素在同一页,并存储在磁盘同一个地区,请回答下列问题,并说明理由。

(1)P执行结束时,R2的内容是多少?

(2)M的指令Cache和数据Cache分离,若指令Cache共有16行,Cache和主存交换的块大小为32字节,则其数据区的容量是多少?若仅考虑程序段P的执行,则指令Cache的命中率为多少?

3 P在执行过程中,哪条指令的执行可能发生溢出异常?哪条指令的执行可能产生缺页异常?对于数组A的访问,需要读磁和 TLB至少各多少次?

(1)由于( R6) =1000,故( R2) =1000;
解析:因为R2 里面存放的是循环变量 i,而 R6 里面存放的是循环的边界 1000,故当循环执行结束后, i=1000,即 R2 的内容是 1000;

(2) 指令 Cache 数据区的容量16×32B=512B; 99.98%(过程见解析);
解析:此题没有什么难度,可以认为Cache 每一行就是一个独立的块,由于每块大小应和主存块大小一致,故所得。 因为程序段共有 6 条指令,占 24 字节,小于一个主存块的大小( 32B),故所有指令都在同一个主存块中,起始地址为 0804 8100H。当读取第一个指令时,Cache 不命中,将 P 所在的主存块调入 Cache 中的某一行,以后每次读取指令, Cache 都命中,所以在 1000 次循环当中只出现了一次指令访问缺失,所以Cache 的命中率为:
(1000×6-1) /( 1000×6) =99.98%

(3) P 执行的过程中,指令 4(或 add R1,R1,R5)的执行可能发生溢出异常; load指令(指令 3)的执行可能会产生缺页异常。因为 load 指令需要读取数组 A 的内容,当数组A 不在主存时发生缺页异常。;对于数组 A 的访问,需要读磁盘一次,读 TLB 1001次(过程见解析);

解析:
1. 因为指令 4 实际上对应的是 sum+=A[i]这一过程,这样有可能因为所得的结果超出了寄存器 R1 所能表示的最大的数而发生溢出异常;而其余的指令的运算都是涉及地址的运算或者是循环变量的自增(对于自增运算,只要 R6 和 R2 位数一致,就不可能溢出)是不会出现溢出的;

2. load 指令需要访问数组 A 中的元素 A[i],当数组 A 不在主存当中时就发生缺页异常。
3. 当第一次执行 load 指令时,因为数组 A 尚未调入主存,此时 TLB 访问失效,并且产生缺页,需要从磁盘上读取数组 A,因为数组 A 所在的页在同一个磁盘扇区中,所以在不考虑页面置换的情况下,只需要读磁盘 1 次,( 2)并且读取磁盘结束后,并将快表中的内容更新;缺页异常处理结束后,重新执行 load 指令, load 指令的随后 1000 次执行中,每次都能在 TLB 中命中,所以无需访问内存页表和磁盘,故 P 在 1000 次循环执行的过程中,对于数组 A,共需读取 TLB1001 次。

发表于 2016-11-19 17:29:54 回复(0)