《计算机组成原理》课后题答案_清华大学出版_秦磊华_吴非··精编版 下载本文

……………………………………………………………最新资料推荐…………………………………………………

将2ms分成256个小段(因为DRAM按行刷新),每个时间段为:7.8125?s,将其中最后0.5?s用于刷新DRAM的一行,即产生刷新信号的时间间隔为7.8125?s.

若采用集中刷新,存储器刷新一遍至少需要256个读写周期,CPU的死时间是256?0.5?s=128?s

则刷新信号的间隔是0.03?s

4.9某动态RAM芯片,容量为64K?1位,除电源线、接地线和刷新线外,该芯片的最小引脚数量是多少?

解:该芯片1位数据线,行选通和列选通各一位,64K的存储器对应16根地址线,在DRAM中,行和列复用,即地址线为8根,故在不考虑电源线的情况下,该DRAM芯片的最小引脚数为1+1+1+8 = 11个。

4.10 有一个具有8个存储体的低位交叉存储器中,如果处理器的访问地址为以下八进制地址值,求该存储器比单体存储器的平均访问速度提高多少?(忽略最初的启动时延)

(1)10018,10028,10038 ,…,11008 (2)10028,10048,10068 ,…,12008 (3)10038,10068,10118 ,…,13008

解:假设改存储体的地址空间从00008开始,并且存储周期为T,故有:

三个访问序列访存空间的大小都为64个存储单元,故在不使用低位交叉存储体的情况下访存耗时都为64T。

(1)该访问序列访存如图所示:

M0 M1 M2 M3 M4 M5 M6 M7 ... 10008 10108 10208 ... 11008 ... 10018 10118 10218 ... ... 10028 10128 10228 ... ... 10038 10138 ... ... ... 10048 10148 ... ... ... 10058 10158 .. ... ... 10068 10168 ... ... ... 10078 10178 ... ... 则访问该段序列所用时间为T+63*T/8 = 71T/8 故速度提升倍数为:(64T*8)/71T=7.2倍 (2)该访问序列访存如图所示:

M0 M1 M2 M3 M4 M5 M6 M7 ... ... 10108 10208 ... 12008 ... ... ... ... ... ... 10028 ... ... ... ... ... ... ... ... ... 10048 ... ... ... ... ... ... .. ... ... 10068 ... ... ... ... ... ... ... ... 则访问该段序列所用时间为3T + 63*2T/8 = 75T/4 故速度提升倍数为:(64T*4)/75T=3.41 (3)该访问序列访存如图所示:

M0 M1 M2 M3 M4 M5 M6 M7

... ...

... ... ... ... ... 10038 31

... ... ... ... ... 10068 ... ... ……………………………………………………………最新资料推荐…………………………………………………

... ... 10308 ... ... 13008 10118 ... ... 10418 ... ... 10228 ... ... ... ... ... 10338 ... ... 10148 ... ... 10448 ... ... 10258 ... ... ... ... ... 10368 ... ... 10178 ... ... 10478 ...

则访问该段序列所用时间为4T+ 63*3T/8= 221T/8 故速度提升倍数为:(64T*8)/221T=2.3

4.11 用16K?1位的DRAM芯片构成64K?8位的存储器,设存储器的读写周期为0.5?s,要使CPU在1?s内至少访问存储器一次,问采用哪种刷新方式比较合适?若每行刷新间隔不超过2ms,该方式下刷新信号的间隔是多少?

解:由于要使CPU在1?s内至少访问存储器一次,而存储器的读写周期为0.5?s,故不可采用集中式刷新方式,因为集中是刷新的死时间会超过1?s,从而不可保证CPU在1?s内至少访问存储器一次,故采用异步刷新方式比较合适。

设16K?1位的DRAM芯片采用地址复用后,采用128*128的排列方式,则将2ms分成128个时间段,每段的时间为:2000?s/128=15.625?s,即刷新信号的产生周期为15.625?s

14

4.12设Cache的容量为2块,每块是一个32位字,主存容量是Cache容量的256倍,其中有如表4.11所示数据(地址和数据均采用16进制表示).

表4.11 主存数据分布情况

地址 000000 000008 010004 01FFFC FFFFF8 数据 87568536 87792301 9ABEFCD0 4FFFFC68 01BF2460 将主存中这些数据装入到Cache后, Cache各块中的数据内容及相应的标志是什么? (1)全相联映射 (2)直接相联映射 (3)组相联映射 解:(1)全相联映射

全相联映射方式下,主存的一个数据块可映射到Cache的任意行,表中共有5个地址,数据从主存映射到Cache后占用其中的5行,假设就是Cache的前5行,具体分布如下表所示。

Cache行 0 1 2 3 4 标志 00,0000,0000,0000,0000,0000 (000000H) 00,0000,0000,0000,0000,0010(000002H) 00,0000,0100,0000,0000,0001(004001H) 00,0000,0111,1111,1111,1111(007FFFH) 11,1111,1111,1111,1111,1110(03FFFFEH) 数据 87568536 87792301 9ABEFCD0 4FFFFC68 01BF2460

(2)直接相联映射

32

……………………………………………………………最新资料推荐…………………………………………………

该方式下,主存的一个数据块只能射到Cache的特定行,表中共有5个地址,数据从主存映射到Cache后占用其中的特定的5行。由于一个数据块为32位,即4B,所以,只需要用主存地址的最后2位表示块内偏移地,由于Cache有16K行,所有,去掉最后2位地址后的连续14位就表示主存数据块映射到的Cache行,剩余的8位即为对应的标志.具体分布如下表所示。

Cache行 00 0000 0000 0000(0000行) 00 0000 0000 0010(0002行) 00 0000 0000 0001(0001行) 11 1111 1111 1111(03FFF行) 11 1111 1111 1110(03FFE行) 标志 0000 0000 0000 0000 0000 0001 0000 0001 1111 1111 数据 87568536 87792301 9ABEFCD0 4FFFFC68 01BF2460

(3)组相联映射:(假设采用的是四路组相联1)

该方式下,主存的一个数据块只能射到Cache的特定组中的任意行,假定Cache采用四路组相联,则Cache共分为4K组。由于一个数据块为32位,即4B,所以,只需要用主存地址的最后2位表示块内偏移地,由于Cache有4K组,因此,去掉最后2位地址后的连续12位就表示主存数据块映射到的Cache组,剩余的10位即为对应的标志.具体分布如下表所示。

Cache组 0000 0000 0000(000组任意行) 0000 0000 0010(002组任意行) 0000 0000 0001(001组任意行) 1111 1111 1111(0FFF组任意行) 1111 1111 1110(0FFE组任意行) 标志 00 0000 0000 00 0000 0000 00 0000 0100 00 0000 0111 11 1111 1111 数据 87568536 87792301 9ABEFCD0 4FFFFC68 01BF2460

4.13 某计算机Cache由64个存储块构成,采用四路组相联映射方式.主存包含4096个存储块,每块由128个字组成.访问地址为字地址. (1)求主存地址和Cache地址各有多少位?

(2)按照题目条件中的映射方式,列出主存地址的划分情况,并标出各部分的位数. 解:(1)主存容量为:4096*128=512KW 故主存地址位数为:19位 Cache容量为:64*128=8KW 故Cache地址位数为:13位

(2)每个组中包含的存储块的个数为:4块 故索引字段(Index)位数为:2位

由于每块由128个字组成.访问地址为字地址,故块内地址的位数为:7位 故标记部分(Tag)的位数为:10位 则主存地址划分情况如下:

12Tag (标记) Index(索引) 块内字地址

10 2 7

33

……………………………………………………………最新资料推荐…………………………………………………

4.14 某计算机中主存容量为4MB,Cache容量为16KB,每块包含8个字,每字32位,映射方式采用4路组相联.设Cache的初始状态为空,CPU依次从主存第0,1,2,…,99号单元读出100个字(每次读一个字),并重复此操作10次.替换算法采用LRU. (1)求Cache的命中率

(2)若Cache比主存块10倍,分析采用Cache后存储访问速度提高了多少?

解:(1)0,1,2,…,99号单元共100个字,每块8个字,故100个字被分配在13块内。

Cache中能存放的主存块数为:16KB/8=2K块

因为是四路组相联,故每组中包含的块数为:2K/4=512块

由于Cache的初始状态为空,根据前面的分析,13块数据调入Cache后不会被调出,所有10次访问中,每块第一次访问不命中外,其余访问均可命中,因此10次循环访问共访问内存100*10 =1000次,其中不命中的次数只有13次。 则Cache的命中率为:(1000-13)/1000=98.7%

(2)设访问Cache的访问时间为T(访问一个数据单元所用的时间),则访问主存的访问时间为10T,故有:

使用Cache后访存所用时间为:T2=13*10T+(1000-13)*T=1117T 不使用Cache访问耗时为:T1=10000T

故使用了Cache后速度提高了:10000T/1117T=8.95倍

4.15 假定某数组元素按行优先顺序存放在主存中,则以下两段伪代码A和B中: (1)分析两段代码中对数组访问的时间局部性和空间局部性. (2)分析变量SUM的时间局部性和空间局部性.

(3)分析for循环体对指令访问的时间局部性和空间局部性.

Int sum_array_A(int a[M][N]) { Int i,j,sum=0; For (i=0;i

解:(1)由于数组在内存中按照行优先存放,数据按块从主存映射到Cache中。

而程序A中对数组访问是按行优先方式进行的,故有很好的空间局部性,但由于每个数组元素只使用一次,故不存在时间局部性;

而程序B中对数组访问是按列优先方式进行的,故没有空间局部性,由于每个数组元素只使用一次,故不存在时间局部性;

(2)变量SUM是单个变量,因此两段程序对该变量的访问不存在空间局部性,由于变量在循环中被多次使用,故具有两好的时间局部性。

(3)在for循环中对指令访问都很好的体现了时间局部性和空间局部性。

4.16 主存容量为8MB,虚存容量为2GB,分页管理时若页面大小为4KB,求出对应的VPN、VPO、PPN、PPO的位数。

34

……………………………………………………………最新资料推荐…………………………………………………

解:虚存所包含的页面数为:2GB/4KB=512K页

故VPN的位数为:19位

由于页面的大小为4KB,故VPO和PPO的位数均为:12位 主存所包含的页面个数为:8MB/4KB=2K 故PPN的位数为:11位

4.17 某页式虚拟存储器共8页,每页1KB,主存容量为4KB,页表如表4.12所示.

表4.12 某页式虚拟存储器的页表

虚页号 实页号 装入位 0 1 2 3 4 5 6 7 3 2 1 2 3 1 0 0 1 1 0 0 1 0 1 0 (1)失效的页有哪几页?

(2)虚地址(用十进制数表示)0,3028,1023,2048,4096,8000的实地址分别是多少? 解:(1)失效的页为:2、3、5、7

(2)虚存空间大小为8*1KB= 8KB,故虚地址为13位,其中虚页号为3位 0: 虚页号为:0

所对应的实页号为:3 页内偏移为:0

故其实地址为(二进制表示):0110000000000 ,对应的十进制实地址为: 3*1K+0=3072 3028:(3028)10= (010 1111000100)2

虚页号为:2

所对应的实页号为:1 故其实地址为:(001 1111000100)2= 1988 1023:(000 1111111111)

虚页号为:0

所对应的实页号为:3 故其实地址为:(011 1111111111)2= 3*1K+1023=4095 2048: (010 0000000000)2

虚页号为:2

所对应的实页号为:1 但由于装入位为零,故该页不在虚存中。 页内偏移地址为:0

故其实地址为:1*1K+0=1024

4.18某计算机系统中有一个TLB和L1级数据Cache,存储系统按字节编址,虚拟存储容量为2GB, 主存容量为4MB,页大小为128KB,TLB采用四路组相联方式,共有16个页表项.Cache容量为16KB,每块包含8个字,每字32位,采用四路组相联,块大小为4B,共32行.参照图4.51所描述的页式虚拟存储系统中TLB和Cache命中时详细的存储访问过程,回答下列问题:

(1)虚拟地址中哪几位表示虚页号?哪几位表示页内偏移地址?虚页号中哪几位表示TLB标记?哪几位表示TLB索引?

(2)物理地址中哪几位表示物理页号?哪几位表示偏移地址?

(3)为实现主存与数据Cache之间的组相联映射,对该地址又进行怎样的划分? 解:(1)虚拟存储的页面数为:2GB/128KB=16K,故虚页号的位数为:14位

35