该方式下,主存的一个数据块只能射到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
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 (2)变量SUM是单个变量,因此两段程序对该变量的访问不存在空间局部性,由于变量在循环中被多次使用,故具有两好的时间局部性。 (3)在for循环中对指令访问都很好的体现了时间局部性和空间局部性。 4.16 主存容量为8MB,虚存容量为2GB,分页管理时若页面大小为4KB,求出对应的VPN、VPO、PPN、PPO的位数。 解:虚存所包含的页面数为: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位 由于页大小为128KB,故页内偏移地址的位数为17位 所以虚拟地址的高14位表示的是虚页号,低17位表示的是页内偏移地址 TLB采用四路组相联方式,共有16个页表项,所以索引需要2位,故虚拟页号的高12位为TLB标记,低2位为TLB索引 (2)物理内存中包含的页数为:4MB/128KB=32,故物理页号占5位,页内偏移地址的位数为17位 所以物理地址中高5位表示物理页号,低17位表示页内偏移地址 (3)主存容量为4MB,访问该主存需要22根地址线,块大小为32B,故块内字节偏移地址为5位, Cache采用四路组相联,Cache共分成16KB/32B = 512个组,故索引字段需要9位,剩下的22-5-9 = 8位为标记。 则主存地址划分如下: 17 主存组号(标记) 组内块号(索引) 块内地址 8 9 5 4.19某磁盘存储器共有6个记录面,盘面内圈直径为1英寸,外圈直径为5英寸,道密度为50TPI,位密度为 2000BPI,转速为 3000r/min,平均找道时间为 10ms。试问: (l)该存储器的存储容量是多少? (2)平均存取时间是多少? (3)共有多少个圆柱面? (4)数据传输率是多少? (5)如果某文件的长度超过了一个磁道的容量,其超过部分应记录在同一记录面上,还是记录在同一回柱面上? 解:(l)该磁盘存储器6个记录面,最外两个记录面不记录内容,则该磁盘驱动器的总磁道数为:[(5-1)/2]*50TPI*4=400 由于位密度一般指磁盘内圈上的信息记录密度,故每个磁道的存储位数为: 3.14*2000BPI=6280位 则该磁盘存储器的存储容量为:400*6280/8=306KB (2)磁盘转半圈用时:60s*0.5/3000r/min=10ms 平均存取时间是:10ms+10ms=20ms (3)圆柱面的个数为:[(5-1)/2]*50TPI=100 (4)该磁盘的最大数据传输率:3000*6280/(60*8) =38KB/s (5)记录在同一柱面上,这样可以省掉一次寻道时间.