题目
设某机主存容量为16MB,缓存的容量为16KB。每字块有8个字,每个字32位。-|||-设计一个四路组相联映射(即缓存每组内共有4个字块)的缓存组织,要求:-|||-(1)画出主存地址字段中各段的位数。-|||-(2)设缓存初态为空,CPU依次从主存第0、1、2、···、99号单元读出100个字(主存一次读出-|||-一个字),并重复此次序读8次,问命中率是多少?-|||-(3)若缓存的速度是主存速度的6倍,试问有缓存和无缓存相比,速度提高多少倍?

题目解答
答案

解析
步骤 1:确定主存地址字段中各段的位数
根据题目条件,每个字块有8个字,每个字32位,因此字块内地址字段为5位(因为 $2^5 = 32$ 字节)。缓存容量为16KB,即 $2^{14}$ 字节,字块大小为 $2^5$ 字节,因此缓存共有 $2^9$ 块,即 c=9 。四路组相联映射意味着每组有4个字块,即 $2^r = 4$ ,因此 r=2 ,则 q=c-r=7 。主存容量为16MB,即 $2^{24}$ 字节,因此主存字块标记位数为 24-7-5=12 。主存地址字段各段格式如下:
主存字块标记 组地址 字块内地址 12位 7位 5位
步骤 2:计算命中率
CPU依次从主存第0、1、2、···、99号单元读出100个字,由于每个字块中有8个字,因此CPU读第0号单元时,未命中,必须访问主存,同时将该字所在的主存块调入缓存第0组中的任一块内,接着CPU读1~7号单元时,均命中。同理CPU读第8、16、···、96号单元时均未命中。可见CPU在连续读100个字中共有13次未命中,而后7次循环读100个字全部命中,命中率为 $\dfrac {100\times 8-13}{100\times 8}\times 100\% =98.375\% $ 。
步骤 3:计算速度提高倍数
根据题意,设主存存取周期为6t,缓存的存取周期为t,没有缓存的访问时间为 $6t\times 800$ ,有缓存的访问时间为 $t(800-13)+6t\times 13$ ,则有缓存和没有缓存相比,速度提高倍数为 $\dfrac {6t\times 800}{t(800-13)+6t\times 13}-1\approx 4.5$ 。
根据题目条件,每个字块有8个字,每个字32位,因此字块内地址字段为5位(因为 $2^5 = 32$ 字节)。缓存容量为16KB,即 $2^{14}$ 字节,字块大小为 $2^5$ 字节,因此缓存共有 $2^9$ 块,即 c=9 。四路组相联映射意味着每组有4个字块,即 $2^r = 4$ ,因此 r=2 ,则 q=c-r=7 。主存容量为16MB,即 $2^{24}$ 字节,因此主存字块标记位数为 24-7-5=12 。主存地址字段各段格式如下:
主存字块标记 组地址 字块内地址 12位 7位 5位
步骤 2:计算命中率
CPU依次从主存第0、1、2、···、99号单元读出100个字,由于每个字块中有8个字,因此CPU读第0号单元时,未命中,必须访问主存,同时将该字所在的主存块调入缓存第0组中的任一块内,接着CPU读1~7号单元时,均命中。同理CPU读第8、16、···、96号单元时均未命中。可见CPU在连续读100个字中共有13次未命中,而后7次循环读100个字全部命中,命中率为 $\dfrac {100\times 8-13}{100\times 8}\times 100\% =98.375\% $ 。
步骤 3:计算速度提高倍数
根据题意,设主存存取周期为6t,缓存的存取周期为t,没有缓存的访问时间为 $6t\times 800$ ,有缓存的访问时间为 $t(800-13)+6t\times 13$ ,则有缓存和没有缓存相比,速度提高倍数为 $\dfrac {6t\times 800}{t(800-13)+6t\times 13}-1\approx 4.5$ 。