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檢測結果相符合。