20155317 《信息安全系統設計基礎》第十四周學習總結
20155317《信息安全系統設計基礎》第十四周學習總結
教材學習內容總結
第6章學習要點:
- 了解常見的存儲技術(RAM、ROM、磁盤、固態硬盤等)
- 理解局部性原理
- 理解緩存思想
- 理解局部性原理和緩存思想在存儲層次結構中的應用
- 高速緩存的原理和應用
一、概述
虛擬存儲器的三個重要能力:
- 它將主存看成是一個存儲在磁盤上的地址空間的高速緩存,在主存中只保存活動區域,並根據需要在磁盤和主存之間來回傳送數據,通過這種方式,高效的使用了主存
- 它為每個進程提供了一致的地址空間,從而簡化了存儲器管理
- 它保護了每個進程的地址空間不被其他進程破壞
虛擬存儲器是中心的、強大的、危險的。
二、虛擬存儲器
2.1、非易失性存儲器 ROM(只讀存儲器)
實際上ROM中有的類型既可以讀也可以寫,仍稱之為“只讀存儲器”是歷史原因。存在ROM中的程序稱為固件,當一個計算機系統通電以後,它會運行存儲在ROM中的固件。一些系統在固件中提供了少量基本的輸入輸出函數。
ROM可按照它們能夠被重編程的次數和對它們進行重編程所用的機制分類為:
PROM(可編程ROM),EPROM(可擦寫可編程ROM),閃存(基於EEPROM),固態硬盤(SSD,基於閃存)
2.2、易失性存儲器 SRAM和DRAM
每個方塊代表由w位(一般為8位,這樣一個超單元就表示一個字節)bit組成的超單元,整個DRAM由d個超單元組織成二維陣列構成。DRAM中的數據以超單元為單位訪問。通過地址引腳傳入的RAS(行訪問選通脈沖)和CAS(列訪問選通脈沖)訪問某個超單元,然後加載目標所在行到內部行緩沖區,通過8位的數據引腳輸出目標。
之所以將超單元組織成二維陣列而非線性數組,是為了減少地址的位數,盡管需要付出增加一個傳入地址的代價。
三、緩存
1、概念
第k+1層的存儲器被劃分成連續的數據對象片,稱為塊。每個塊都有唯一的地址或名字以區別於其他塊。數據總以塊大小為傳送單元在第k層和第k+1層之間來回拷貝。雖然在層析結構中任何一對相鄰的層次之間塊大小是固定的,但是其他的層次對之間可以有不同的塊大小。第k層存儲的塊集合是第k+1層的子集的拷貝。
2、緩存不命中
類別:冷不命中,沖突不命中,容量不命中。
策略:替換(或稱驅逐)一個現存塊,替換策略有隨機替換策略、最近最少被使用替換策略等。
3、通用的高速緩存存儲器結構(層次對間地址空間“多對少”的映射策略)可用(S,E,B,m)來描述一個高速緩存的結構。如下圖,右圖每種不同色代表一個塊,且塊映射到不同組。
3.1.、分類:直接映射高速緩存、全相聯高速緩存、組相聯高速緩存(前兩者的折中)
3.2、訪問某個存儲器地址的過程:逐級訪問各存儲器層次,進行三步——組選擇,行匹配,字抽取(若命中)——直到命中
4、關於寫操作
直寫與非寫分配:直寫是指命中後立即將目標字所在命中塊寫回到緊接著低一層中;非寫分配是指不命中時直接將目標字寫到低一層中。
寫回與寫分配:寫回是指命中後延遲更新低一層直到命中塊被驅逐;寫分配是指不命中時加載響應的低一層中的塊到高速緩存中,然後更新這一高速緩存塊(試圖利用寫的空間局部性)。
5、高速緩存參數的性能影響:
與性能相關的一些量化指標:不命中率、命中率、命中時間、不命中處罰。
高速緩存參數對性能的影響:緩存大小的影響,塊大小的影響,相聯度的影響,寫策略的影響。
四、存儲器層次結構
五、局部性:
在存儲器層次結構的基礎之上引出了一個很重要的思想,也是計算機程序裏面一個很基本的屬性”局部性“。局部性又分為兩個方面:
- 時間局部性:有良好的時間局部性程序中,被引用過一次的存儲器很有可能在不久的將來再被多次調用
- 空間局部 性:有良好空間局部性程序中,被引用過一次的存儲器,很有可能在不久的將來引用其附近臨近的存儲器。
- 由此可以給出量化評價 一個程序局部性的簡單原則:
- 1、重復引用一個變量的程序有良好的時間局部性;
- 2、對於步長為k的引用模式的程序,步長越小, 程序的空間局部性越好;
- 3、對於取指令來說,循環有好的時間和空間局部性。
家庭作業
6.22
假設磁道沿半徑均勻分布,即總磁道數和(1-x)r成正比,設磁道數為(1-x)rk;
由題單個磁道的位數和周長成正比,即和半徑xr成正比,設單個磁道的位數為xrz;
其中r、k、z均為常數。
所以C = (1-x)rk * xrz = (-x^2 + x) * r^2 * kz,即需要-x^2 + x最大,得到x = 0.5
6.36
A.
cache共有32個block,分別位於32個set中,每個block可以放下4個int類型的變量,所以所有的block可以放下x數組中的一行。由映射關系,x[0][i]和x[1][i]對應的set是一樣的。所以每一次的運算都會發生miss的情況,所以miss rate = 100%。
B.
cache共有64個block,分別位於64個set中,每個block可以放下4個int類型的變量,所以所有的block可以放下x數組中的兩行,即全部放入。每四次讀取中的第一次會發生miss,所以miss rate = 25%。
C.
cache共有32個block,分別位於16個set中,每個block可以放下4個int類型的變量,每個set可以放下8個int類型的變量,所有的block可以放下x數組中的一行。由映射關系,x[0][i]和x[1][i]對應的set是一樣的,x[y][i]和x[y][i+64]對應的set也是一樣的。
對於x[0][0] * x[1][0] ~ x[0][63] * x[1][63] ,每四次運算會有第一次miss。
對於x[0][64] * x[1][64] ~ x[0][127] * x[1][127] ,每四次運算會有第一次miss(擦去前面warm up的cache)。
綜上,miss rate = 25%。
D.
不會,因為此時block大小是限制因素(每四次讀取第一次miss)。
E.
會,更大的block會降低miss rate,因為miss只發生在第一次讀入block的時候,所以更大的block會使得miss占總讀取的比例降低。
6.37
cache共有256個block,分別位於256個set中,每個block可以放下4個int類型的變量,所有的block可以放下1024個int類型的變量。
當N = 64:
映射關系:a[0][0] ~ a[15][63]、a[16][0] ~ a[31][63]、a[32][0] ~ a[47][63]、a[48][0] ~ a[63][63] 互相重疊。
sumA按照行來讀取,所以每四次讀取第一次都會miss,即miss rate = 25%。
sumB按照列來讀取,所以每一次讀取都會發生miss(讀取後的block又會被覆蓋),即miss rate = 100%。
sumC按照列來讀取,但是每次讀取後都會按照行再讀取一次,所以每四次讀取會有兩次miss,即miss rate = 50%。
當N = 60
映射關系:a[0][0] ~ a[17][3]、a[17][4] ~ a[34][7]、a[34][8] ~ a[51][11]、a[51][12] ~ a[59][59]互相重疊,其中最後的a[51][12] ~ a[59][59]沒有到達cache的尾部。
sumA按照行來讀取,所以每四次讀取第一次都會miss,即miss rate = 25%。
6.38
這個cache有64個block,每個block可以放4個int類型的變量,也就是一個point_color
的結構體,即cache總共可以放置64個結構體。
映射關系為:square[0][0] ~ square[3][15]、square[4][0] ~ square[7][15]、square[8][0] ~ square[11][15]、square[12][0] ~ square[15][15] 互相重疊。
A.
16 * 16 * 4 = 1024
B.
這個程序是按照行來寫的,所以每四次寫入只有第一次miss,即miss的次數為1024 / 4 = 256
C.
25%
6.39
這個cache有64個block,每個block可以放4個int類型的變量,也就是一個point_color
的結構體,即cache總共可以放置64個結構體。
映射關系為:square[0][0] ~ square[3][15]、square[4][0] ~ square[7][15]、square[8][0] ~ square[11][15]、square[12][0] ~ square[15][15] 互相重疊。
A.
16 * 16 * 4 = 1024
B.
這個程序是按照列來寫的,每四次寫入只有第一次miss(每次都完整利用了一個block,沒有讀入block的浪費,此時miss rate只取決於block的大小),即miss的次數為1024 / 4 = 256
C.
25%
6.40
這個cache有64個block,每個block可以放4個int類型的變量,也就是一個point_color
的結構體,即cache總共可以放置64個結構體。
映射關系為:square[0][0] ~ square[3][15]、square[4][0] ~ square[7][15]、square[8][0] ~ square[11][15]、square[12][0] ~ square[15][15] 互相重疊。
A.
16 * 16 + 3 * 16 * 16 = 1024
B.
對於第一個循環,每一次寫入都會發生miss的情況,最後cache中保存的是square[12][0] ~ square[15][15],而第二個循環又從頭開始寫入,所以每三次寫入的第一次都會發生miss。總的miss次數就是16 * 16 * 2 = 512。
C.
50%
6.44
為了辨識緩存的大小,選取中間的列(例如S8)來判斷——避免CPU的prefetching帶來幹擾。可以看出,在32K和512K以及8M的地方有明顯的落差,所以判斷L1:32k、L2:512k、L3:8M。
代碼托管
(statistics.sh腳本的運行結果截圖)
上周考試錯題總結
- 錯題1及原因,理解情況
- 錯題2及原因,理解情況
- ...
點評模板:
- 博客中值得學習的或問題:
- xxx
- xxx
- ...
- 代碼中值得學習的或問題:
- xxx
- xxx
- ...
- 其他
本周結對學習情況
- [結對同學學號1](博客鏈接)
- 結對照片
- 結對學習內容
- XXXX
- XXXX
- ...
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進自己的計劃能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。
參考:軟件工程軟件的估計為什麽這麽難,軟件工程 估計方法
-
計劃學習時間:XX小時
-
實際學習時間:XX小時
-
改進情況:
(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表)
參考資料
- 《深入理解計算機系統V3》學習指導
- ...
20155317 《信息安全系統設計基礎》第十四周學習總結