0%

计算机组成原理——第4章习题

4.1

  • 存取时间:存取器的访问时间,指一次存储器操作到该操作完成所经历的时间。读写时间可能不同。
  • 存取周期:连续两次启动访问操作之间的最短时间间隔。
  • 存储器带宽:单位时间内存储器能够传输的信息量,注意不能理解为存储器一个存储单元能够存储的比特位数,存储器带宽指的是速度,与网络带宽可以类比
  • 存储单元:存储器中的最小存储单位。也称为存储元。
  • 边界对齐的数据存放:按照数据类型的大小进行边界对齐。不同数据类型的变量都会包含一个或多个字节单元,这些变量在进行主存地址空间分配时从理论上讲可以从任何字节地址开始,但当一个多字节变量分布在不同的字存储单元时,访问该变量就需要多个存储周期,为了提高访问效率对数据进行边界对齐存放。
  • 大端存储:数据的高位位于地址的低位。
  • 小端存储:数据的低位位于地址的低位。
  • 静态存储器:存储体以静态存储元构成的存储器。
  • 动态存储器:存储体以动态存储元构成的存储器。
  • 刷新:在动态存储器中,由于存储元内部构造问题,数据只能保持较短的时间,为避免数据丢失需要定期采用类似读操作的方式对存储单元补充电荷,称为刷新。
  • 刷新周期:动态存储器连续两次刷新的时间间隔。
  • 字扩展:为增加存储器存储容量增加一个字的比特数量的扩展方式,又称为容量扩展或地址总线扩展。
  • 位扩展:增加存储器可寻址的范围,而不改变字长的扩展方式。
  • 高速缓冲存储器:为进一步提升CPU的性能在CPU和内存之间添加的小块SRAM。
  • 相联存储器:一种按内容访问的存储器,用于存放查找表,其内部存储数据的基本单位是键值对。
  • 时间局部性:同一块地址的存储数据如果在一个时刻被访问,那么在这个时刻未来的短时间内很有可能还会被访问。
  • 地址映射:将主存地址映射到cache的地址空间,将存放在主存中的程序或数据块载入cache块的规则。注意这里的地址映射指的不是虚拟地址与内存物理地址的映射
  • 直接相联映射:每一个主存块地址只能被映射到cache中固定的行。
  • 全相联映射:每一个主存块地址可以被映射到cache中的任意行。
  • 组相联映射:每一个主存块地址可以被映射到cache中的某些行。
  • 命中率:主存访问时能够通过cache访问成功的概率。
  • 虚拟存储器:包含虚拟地址空间、主存地址空间和辅存地址空间,将虚拟地址空间映射到主存空间,建立虚地址和实地址之间的对应关系。可便于编程、解决主存容量不足的问题。
  • 页框号:主存地址空间中的一页空间的编号。
  • 页表(慢表):一张保存虚拟页号和物理页号对应关系的查找表。
  • 页表项:页表中的一条记录。
  • TLB(快表):转换旁路缓冲区,用于缓冲经常访问的页表项,本质是一个容量较小的cache,可以提高页表的查找速度。
  • LRU算法:近期最少使用算法,淘汰最久远使用的项。
  • LFU算法:最不经常使用算法。
  • cache一致性:cache中的数据需要与对应地址的主存数据相同。
  • 写回法:写cache时不同时修改主存的内容,每一个cache行必须设置一个脏位判断该位是否被修改。某行被换出时根据脏位决定是否需要更新主存。
  • 写穿法:写cache的同时写主存。

4.2

  1. A
    分析:RAM是易失性存储器,ROM是非易失性存储器,正确。RAM作为随机存储器一般用于内存等,只有在上电时才能够保存数据,而ROM作为只读存储器,其内容是在烧录时写死的,即使掉电也不会丢失数据。RAM和ROM都可以使用随机存取方式进行信息访问,正确。ROM不能用于cache,且不需要刷新。
  2. A
    分析:DRAM芯片为4M×8位,一块芯片容量为4MB,存储器容量为256MB,故一共有64块芯片。假设其为位扩展,一块芯片有4M个字,故地址线宽度为11位。数据引脚为8位。注意DRAM地址线一般采用复用技术,即CPU分时传送行、列地址,并分别由行选通信号RAS和列选通信号CAS连通。原本4M需要22位地址才能寻址,但将其看做一个矩阵,行和列都只有211行,因此复用只需要11位地址线。
  3. D
    4KB的ROM需要2块ROM芯片,4K×4的RAM芯片一块只能存储2KB,因此需要30块。
  4. D
    需要进行字位扩展,将字长从4比特扩展为8比特,一共需要8个芯片,分为4组,一组两个进行位扩展。第2组可以寻址0800H~0FFFH的地址,其最小地址为0800H。
  5. C
    为了保证其地址引脚数量最少,行数与列数的最大值需要尽可能小,2K=32×64,因此可以选择32行64列或64行32列,又需要考虑减少刷新开销,因此行数应该尽可能少,选择32行64列。
  6. B
    工作频率1333MHz,即每秒可以访存1333M次,总线宽度64位,一次访存可获得8字节数据。又因为采用的是3通道地址总线,因此总带宽为1333M×3×8 B/s=32GB/s。
  7. D
  8. B
  9. B
    注意CDROM指的是光盘,是顺序存储。
  10. A
  11. A
  12. C
    cache有16块用2路组相联,因此一共有8组,一组32B,因此主存第129号单元所在的主存块应该位于第4组。
  13. C
  14. C
    分析:主存块大小4个字,一个字32位,能存放4K字数据,就有1K行,每一行保存的信息有:直接相联映射应该主存映射地址的区地址18位1个字,4个字的数据。考虑到采用写回的方式,需要1位有效位和1位脏位,一行一共有18+128+2=148位数据,1K行就有148K位。本题易错点:求的是位数不是字数,写回方式有脏位,直接相联映射应该保存地址的多少位
  15. D
  16. B
    分析:采用页式存储管理方式,且有TLB,那么该指令首先需要访问x处的数据。首先访问TLB,如果TLB命中,则物理地址已知,然后访问cache。如果cache命中,则写cache,同时需要写主存,这个过程访存次数为1(注意TLB和cache不属于主存)。不妨可以另外计算最多需要多少次访问主存:如果TLB没有命中,那么首先需要访问主存中的页表(假设为一级页表),获取物理地址之后到cache中查找没有找到,还需要从主存中调入这部分数据到cache,然后写cache写主存,一共访存3次。
  17. D
    cache就是主存中内容的部分复制,cache如果命中page一定会命中。
  18. A
  19. D
    缺页中断处理完成之后应该重新执行触发缺页中断的那条指令。

4.3

  1. 采用层次化体系可以在提高CPU的性能同时最大限度地降低成本。
  2. 用于进行位扩展。
  3. 其中的数据不稳定,长时间不刷新会丢失。进行一次类似读操作让其电容重新充电。
  4. cache对程序员不可见。
  5. 因为直接相联映射规定一块主存地址只能被映射到唯一的一个cache行,如果映射时产生冲突直接换掉即可。
  6. 防止cache与主存中数据不一致问题。

4.4

32KB容量按照16位字编址则有16K个字,地址寄存器应为14位,数据寄存器为16位。

4.5

可以设计出32K×32位、64K×16位、128K×8位。图略。

4.6

256K×8位存储器中最高64KB为只读,低192KB可读可写,因此考虑使用6片32K×8位RAM位扩展加2片64K×4位字扩展。

4.7

128K字中最高32K字只读,低96K字可读可写,考虑使用12片16K×8位静态RAM芯片进行字位扩展,1组2片共6组;加2片16K×16位ROM芯片进行位扩展。

4.8

DRAM是时分复用的地址线,64K=256×256,即一共有256行,每个芯片需要在2ms之内将这256行全部刷新至少一次,按照异步刷新的规则,间隔时间应该为2ms/256=7.8125μs。
如果采用集中刷新方式,则存储器刷新一次需要使用256个读写周期,CPU的“死”时间为0.5×256=128ms。

4.9

DRAM芯片时分复用,有256行256列,故地址线输入需要8个引脚,数据线1个引脚,加上读写标志2个引脚,共11个。

4.10

异步刷新。
16K=128×128,刷新周期为2ms/128=15.625μs。

4.11

cache容量为214块,每块32位字。
按照全相联映射,将这些数据按照地址顺序依次装入cache后cache的内容:
000000 87568756
000002 87792301
004001 9ABEFCD0
007FFF 4FFFFC68
3FFFFE 01BF2460
按照直接相联映射:
00 0000 87568756
01 0001 9ABEFCD0
00 0002 87792301
01 3FFF 4FFFFC68
FF 3FFE 01BF2460
按照四路组相联映射:
000 000 87568756
000 002 87792301
001 001 9ABEFCD0
001 FFF 4FFFFC68
3FF FFE 01BF2460

4.12

主存4096×128=512K个字,地址19位。
cache 64×128=8K个字,地址13位。
主存地址分为3个部分,组内偏移7位,标识一个组中的128个字。组号4位,标识cache中的16个组。组标记8位,标识地址的最高8位。

4.13

cache容量16KB,一块8个字,每个字32位,即32B,则cache共有512行。映射方式采用4路组相联,可分为128组。
CPU每一次读一个字,其中第0~7号单元应该在同一块,8~15号单元在同一块,以此类推,100个字只在第一次访问第0、8、16、…、96号单元时没有命中,共13次没有命中,共访问了1000次,没有使用LRU算法淘汰某一行,因此命中率为98.7%。
若cache比主存快10倍,其访问时间就是0.1倍。设主存一次访问时间为t,则使用cache后一次访问的平均时间为t×1.3%+0.1t×98.7%=11.17%t,速度提升了8.95倍。

4.14

  1. 对于第一段代码,数组访问按行优先访问,对于内存空间而言是线性按序访问,具有较好的空间局部性。但每一个数组元素只使用一次,因此对于数组元素而言没有时间局部性。第二段代码数组按照列优先访问,在内存空间中的访问是跳跃式的,因此没有很好的空间局部性,同样也不存在时间局部性。
  2. 在两段代码中,变量sum均被频繁访问,因此具有很好的时间局部性,由于变量sum是单个变量,与其邻近地址空间的数据没有直接关系,因此不存在空间局部性。
  3. for循环体对指令访问具有时间局部性,一条指令会被循环执行多次,而for循环有多条指令,这些指令之间具备一定的空间局部性。

4.15

VPN:虚拟页号数量为2GB/4KB=512M,需要29位
VPO:虚拟页偏移4KB,需要12位
PPN:物理页号数量为8MB/4KB=2K,需要11位
PPO:物理页偏移位数与虚拟页偏移相等,12位

4.16

  1. 失效的有2、3、5、7页
  2. 分别为3072、无效、4095、无效、3072、无效

4.17

TLB采用4路组相联技术,共16项,可分为4组。cache容量16KB,每块32B,共512组,采用4路组相联,共128组。

  1. 页大小为128KB,需要使用17位保存页内偏移,虚拟页号需要使用14位保存。虚拟页号中高12位表示TLB标记,低2位表示TLB索引。
  2. 物理地址中18位表示物理页号,14位表示偏移地址。
  3. 要使得物理地址与cache建立映射,cache中每一组存放32字节,行内地址偏移为物理地址的最低5位。往上7位是组索引,用于标识cache中的128组,其余的20位为组标记。

4.18

  1. 页式虚拟存储管理中一页大小8KB,需要13位表示页内偏移,虚拟地址其余的19位表示页号,即A=19。TLB采用全相联映射,因此B与A的位数相同,B=19。物理地址中高11位表示页框号,C=11。低13位表示物理地址页内偏移,D=13。cache采用二路组相联,数据区大小64KB,主存块大小64B,需要块内索引6位,G=6。cache一共有1024行,512组,需要9位标识块索引,F=H=9。剩余的9位用于物理地址块标识,E=9。B存放的是虚拟页号。
  2. cache组号为4099 mod 512=3。H字段的值为4099 / 512 = 8。
  3. 缺页处理的开销大,因为缺页需要从辅存中调入页面,访问速度比访问主存速度慢很多。
  4. 提高效率。

4.19

  1. 主存的实页号共16位,页内地址12位,物理地址占28位。
  2. TLB采用的是全相联映射方式,使用SRAM实现。
  3. 2路组相联映射。共8组,数据位32B。还需要添加脏位和1位LRU位用于标识LRU淘汰块。总容量:数据512B,tag有20×16/8=40B,脏位和有效位、LRU位3×16/8=6B,共558B。
  4. 首先找到tag=0008C的页框号,为0040H,那么物理地址为40040H。其tag为400,不命中(有效位为0)。虚拟地址为0007C260H时,低位页偏移为260,应该映射到第3组。