您好,欢迎访问三七文档
第4章习题答案3.已知某机主存空间大小为64KB,按字节编址。要求:(1)若用1K×4位的SRAM芯片构成该主存储器,需要多少个芯片?(2)主存地址共多少位?几位用于选片?几位用于片内选址?(3)画出该存储器的逻辑框图。参考答案:(1)64KB/1K×4位=64×2=128片。(2)因为是按字节编址,所以主存地址共16位,6位选片,10位片内选址。(3)显然,位方向上扩展了2倍,字方向扩展了64倍。(图略)4.用64K×1位的DRAM芯片构成256K×8位的存储器。要求:(1)计算所需芯片数,并画出该存储器的逻辑框图。(2)若采用异步刷新方式,每单元刷新间隔不超过2ms,则产生刷新信号的间隔是多少时间?若采用集中刷新方式,则存储器刷新一遍昀少用多少读写周期?参考答案:(1)256KB/64K×1位=4×8=32片(图略)。(2)因为每个单元的刷新间隔为2ms,所以,采用异步刷新时,在2ms内每行必须被刷新一次,且仅被刷新一次。因为DRAM芯片存储阵列为64K=256×256,所以一共有256行,因此,存储器控制器必须每隔2ms/256=7.8µs产生一次刷新信号。采用集中刷新方式时,整个存储器刷新一遍需要256个存储(读写)周期,在这个过程中,存储器不能进行读写操作。5.用8K×8位的EPROM芯片组成32K×16位的只读存储器,试问:(1)数据寄存器昀少应有多少位?(2)地址寄存器昀少应有多少位?(3)共需多少个EPROM芯片?(4)画出该只读存储器的逻辑框图。参考答案:(1)数据寄存器昀少有16位。(2)地址寄存器昀少有:15位(若按16位的字编址);16位(若按字节编址)。(3)共需要32K×16位/8K×8位=4×2=8片。(4)(图略)6.某计算机中已配有0000H~7FFFH的ROM区域,现在再用8K×4位的RAM芯片形成32K×8位的存储区域,CPU地址总线为A0-A15,数据总线为D0-D7,控制信号为R/W#(读/写)、MREQ#(访存)。要求说明地址译码方案,并画出ROM芯片、RAM芯片与CPU之间的连接图。假定上述其他条件不变,只是CPU地址线改为24根,地址范围000000H~007FFFH为ROM区,剩下的所有地址空间都用8K×4位的RAM芯片配置,则需要多少个这样的RAM芯片?参考答案:CPU地址线共16位,故存储器地址空间为0000H~FFFFH,其中,8000H~FFFFH为RAM区,共215=32K个单元,其空间大小为32KB,故需8K×4位的芯片数为32KB/8K×4位=4×2=8片。因为ROM区在0000H~7FFFH,RAM区在8000H~FFFFH,所以可通过昀高位地址A15来区分,当A15为0时选中ROM芯片;为1时选中RAM芯片,此时,根据A14和A13进行译码,得到4个译码信号,分别用于4组字扩展芯片的片选信号。(图略,可参照图4.15)若CPU地址线为24位,ROM区为000000H~007FFFH,则ROM区大小为32KB,总大小为16MB=214KB=512×32KB,所以RAM区大小为511×32KB,共需使用RAM芯片数为511×32KB/8K×4位=511×4×2个芯片。7.假定一个存储器系统支持4体交叉存取,某程序执行过程中访问地址序列为3,9,17,2,51,37,13,4,8,41,67,10,则哪些地址访问会发生体冲突?参考答案:对于四体交叉访问的存储系统,理想情况下,每隔1/4周期可读写一个数据,假定这个时间为∆t。每个存储模块内的地址分布如下。模块0:0、4、8、12、16……模块1:1、5、9、13、17…37…41……模块2:2、6、10、14、18……模块3:3、7、11、15、19…51…67……很显然,如果相邻四次访问中给定的访存地址出现在同一个模块内,就会发生访存冲突。所以17和9、37和17、13和37、8和4会发生冲突。41和13也在同一个模块内且访问间隔小于四个∆t,但是,由于访问第8单元发生冲突而使其访问延迟三个∆t进行,从而使得41号单元也延迟三个∆t访问,因而,其访问不会和13号单元的访问发生冲突。8.现代计算机中,SRAM一般用于实现快速小容量的cache,而DRAM用于实现慢速大容量的主存。以前超级计算机通常不提供cache,而是用SRAM来实现主存(如,Cray巨型机),请问:如果不考虑成本,你还这样设计高性能计算机吗?为什么?参考答案:不这样做的理由主要有以下两个方面:①主存越大越好,主存大,缺页率降低,因而减少了访问磁盘所需的时间。显然用DRAM芯片比用SRAM芯片构成的主存容量大的多。②程序访问的局部性特点使得cache的命中率很高,因而,即使主存没有用快速的SRAM芯片而是用DRAM芯片,也不会影响到访问速度。9.分别给出具有下列要求的程序或程序段的示例:(1)对于数据的访问,几乎没有时间局部性和空间局部性。(2)对于数据的访问,有很好的时间局部性,但几乎没有空间局部性。(3)对于数据的访问,有很好的空间局部性,但几乎没有时间局部性。(4)对于数据的访问,空间局部性和时间局部性都好。参考答案:可以给出许多类似的示例。例如,对于按行优先存放在内存的多维数组,如果按列优先访问数组元素,则空间局部性就差,如果在一个循环体中某个数组元素只被访问一次,则时间局部性就差。假定二维数组a[1000][1000]按行优先存放在内存,以下给出的4个程序片段用于对数组a进行相应的处理,它们具有相同的功能,但数组访问的时间局部性和空间局部性截然不同(不考虑编译器的优化)。(1)时间局部性和空间局部性都好的程序片段。for(i=0;i1000;i++)for(j=0;j1000;j++){sum=sum+a[i][j];product=product*a[i][j];square=square+a[i][j]*a[i][j];}(2)时间局部性好,空间局部性差for(j=0;j1000;j++)for(i=0;i1000;i++){sum=sum+a[i][j];product=product*a[i][j];square=square+a[i][j]*a[i][j];}(3)空间局部性好,时间局部性差for(i=0;i1000;i++)for(j=0;j1000;j++)sum=sum+a[i][j];for(i=0;i1000;i++)for(j=0;j1000;j++)product=product*a[i][j];for(i=0;i1000;i++)for(j=0;j1000;j++)square=square+a[i][j]*a[i][j];(4)时间局部性和空间局部性都差for(j=0;j1000;j++)for(i=0;i1000;i++){sum=sum+a[i][j];for(j=0;j1000;j++)for(i=0;i1000;i++){product=product*a[i][j];for(j=0;j1000;j++)for(i=0;i1000;i++){square=square+a[i][j]*a[i][j];10.假定某机主存空间大小1GB,按字节编址。cache的数据区(即不包括标记、有效位等存储区)有64KB,块大小为128字节,采用直接映射和全写(write-through)方式。请问:(1)主存地址如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。(2)cache的总容量为多少位?参考答案:(1)主存空间大小为1GB,按字节编址,说明主存地址为30位。cache共有64KB/128B=512行,因此,行索引(行号)为9位;块大小128字节,说明块内地址为7位。因此,30位主存地址中,高14位为标志(Tag);中间9位为行索引;低7位为块内地址。(2)因为采用直接映射,所以cache中无需替换算法所需控制位,全写方式下也无需修改(dirty)位,而标志位和有效位总是必须有的,所以,cache总容量为512×(128×8+14+1)=519.5K位。11.假定某计算机的cache共16行,开始为空,块大小为1个字,采用直接映射方式。CPU执行某程序时,依次访问以下地址序列:2,3,11,16,21,13,64,48,19,11,3,22,4,27,6和11。要求:(1)说明每次访问是命中还是缺失,试计算访问上述地址序列的命中率。(2)若cache数据区容量不变,而块大小改为4个字,则上述地址序列的命中情况又如何?参考答案(1)cache采用直接映射方式,其数据区容量为16行×1字/行=16字;主存被划分成1字/块,所以,主存块号=字号。因此,映射公式为:cache行号=主存块号mod16=字号mod16。开始cache为空,所以第一次都是miss,以下是映射关系(字号-cache行号)和命中情况。2-2:miss,3-3:miss,11-11:miss,16-0:miss,21-5:miss,13-13:miss,64-0:miss、replace,48-0:miss、replace,19-3:miss、replace,11-11:hit,3-3:miss、replace,22-6:miss,4-4:miss,27-11:miss、replace,6-6:miss、replace,11-11:miss、replace。只有一次命中!(2)cache采用直接映射方式,数据区容量不变,为16个字,每块大小为4个字,所以,cache共有4行;主存被划分为4个字/块,所以,主存块号=[字号/4]。因此,映射公式为:cache行号=主存块号mod4=[字号/4]mod4。以下是映射关系(字号-主存块号-cache行号)和命中情况。2-0-0:miss,3-0-0:hit,11-2-2:miss,16-4-0:miss、replace,21-5-1、13-3-3:miss,64-16-0、48-12-0、19-4-0:miss,replace,11-2-2:hit,3-0-0:miss、replace,22-5-1:hit,4-1-1:miss、replace,27-6-2:miss、replace,6-1-1:hit,11-2-2:miss、replace。命中4次。由此可见,块变大后,能有效利用访问的空间局部性,从而使命中率提高!12.假定数组元素在主存按从左到右的下标顺序存放。试改变下列函数中循环的顺序,使得其数组元素的访问与排列顺序一致,并说明为什么修改后的程序比原来的程序执行时间短。intsum_array(inta[N][N][N]){inti,j,k,sum=0;for(i=0;iN;i++)for(j=0;jN;j++)for(k=0;kN;k++)sum+=a[k][i][j];returnsum;}参考答案:intsum_array(inta[N][N][N]){inti,j,k,sum=0;for(k=0;kN;k++)for(i=0;iN;i++)for(j=0;jN;j++)sum+=a[k][i][j];returnsum;}修改后程序的数组元素的访问与排列顺序一致,使得空间局部性比原程序好,故执行时间更短。13.分析比较以下三个函数的空间局部性,并指出哪个昀好,哪个昀差?参考答案:对于函数clear1,其数组访问顺序与在内存的存放顺序完全一致,因此,空间局部性昀好。对于函数clear2,其数组访问顺序在每个数组元素内跳越式访问,相邻两次访问的单元昀大相差3个int型变量(假定sizeof(int)=4,则相当于12B),因此空间局部性比clear1差。若主存块大小比12B小的话,则大大影响命中率。对于函数clear3,其数组访问顺序与在内存的存放顺序不一致,相邻两次访问的单元都相差6个int型变量(假定sizeof(int)=4,则相当于24B)因此,空间局部性比clear2还差。若主存块大小比24B小的话,则大大影响命
本文标题:第四章习题答案
链接地址:https://www.777doc.com/doc-6258559 .html