CSAPP第六章家庭作业参考答案

(CSAPP第三版系列)导航篇传送门


6.24

这个文件由4000个逻辑块组成,并且对于磁盘,Tavg seek = 4ms, Tmax rotation = 4ms, 而Tavgrotatioin = 2ms。

A.  最好情况是块被映射到连续的扇区,在同一柱面上这样就可以不移动读写头来一块接一块地读。一旦读写头定位到了第一个扇区,需要磁盘转4整圈(平均每个磁道上1000扇区)。

所以读这个文件的总时间为:4ms + 2ms + 4*Tmaxrotationi = 22ms。

B.  随机的情况:在这种情况中,块被随机地映射到扇区上,读4000块中的每一块都需要Tavg seek + Tavg rotation。

所以读这个文件的总时间为:4000*(4ms + 2ms) = 24000ms。


6.28 这个问题是关于练习题6.12中的高速缓存的

A.  所有会在组2中命中的十六进制内存地址:无,因为组2中所有行的有效位标记均为0。

B.  所有会在组4中命中的十六进制内存地址:0x18F0,0x18F1,0x18F2,0x18F3,0x00B0,0x00B1,0x00B2,0x00B3。

C.  所有会在组5中命中的十六进制内存地址:0x0E34,0x0E35,0x0E36,0x0E37。

D.  所有会在组7中命中的十六进制内存地址:0x1BDC,0x1BDD,0x1BDE,0x1BDF。


6.32对于内存地址0x16E8重复作业6.31

A.  地址格式(每个小框表示一位):


B.  内存引用:

参数

高速缓存块偏移(CO

0x0

高速缓存组索引(CI

0x2

高速缓存标记(CT

0xB7

高速缓存命中?(是/否)

返回的高速缓存字节

0x-


6.36

A.  情况1不命中率是100%。

原因:这种情况下,高速缓存大小只能容纳该二维数组的一行,并且x[0][i]和x[1][i]总是映射到同一个高速缓存行,所以对一个数组的引用总是驱逐出另一个数组的有用的行,即每个操作都会不命中。

B.  情况2不命中率是25%。

原因:这种情况下,高速缓存可以正好容纳下这个数组,因此所有的不命中都是开始时的冷不命中。不命中率 = sizeof(int) / BlockSize = 4/16 = 25%。

C.  情况3不命中率是25%。

原因:这种情况下,高速缓存只能保存数组的1/2,扫描数组的第二部分会驱逐扫描第一部分时加载进来的那一行。并且由于使用了两路组相连,扫描数组的两部分的过程中,不命中率都是sizeof(int)/BlockSize = 25%,则总不命中率 = 25%。

D.  对情况3,更大的高速缓存大小不会帮助降低不命中率。

原因:根据对情况三的分析,缓存的总大小不是限制因素,限制因素是块的大小。(miss_rate= sizeof(int)/BlockSize)。

E.  对情况3,更大的块大小会帮助降低不命中率。

原因:根据对情况三的分析,缓存不命中的限制因素就是块的大小(miss_rate= sizeof(int)/BlockSize),所以更大的块会减低不命中率。


6.40

A.  写总数为16*16*4 = 1024次。

B.  根据6.38中的假设,每个块可以存放2个结构体元素,且整个高速缓存的大小为square数组大小的一半。在给出的程序代码中,前一个循环的写次数是256次,其中不命中率为50%,则不命中数为128次;后一个循环的写次数是256*3次,不命中数仍为128次。即总的不命中数为256次。

C.  由A和B结果可知,不命中率是25%。


6.44

mountain程序在本机运行结果如下图所示:

可以重点观察s5及以后的列上的数据(前面数据受到预取的影响),不难看出数据在32k, 256k和4m-8m之间均有明显突变。所以可以估计本机cache大小:L1:32K,L2:256K,L3:4MB-8M。且与CPU-Z检测结果相符合。