第六章儲存器層次結構
教材導讀
- 第七週:學習任務教材第六章
- 瞭解儲存裝置的型別和特點;重點理解區域性性原理和快取思想在儲存層次結構中的應用
重點練習題:6.2,6.3,6.4,6.8,6.9,6.10,6.11,6.12, 6.13
6.1 節
- 瞭解三種常見儲存技術:RAM/ROM/磁碟;
- RAM有SRAM和DRAM,特點和應用;
- ROM有PROM,EPROM,E2PROM,FLASH;
- 磁碟是重點,涉及到後面的i/o和檔案系統,做好相關練習
- 磁碟結構:碟片、磁軌、扇區、間隙、柱面;磁碟驅動器
- 磁碟容量
- 訪問時間:尋道、旋轉、傳送
- 邏輯磁碟塊:這個很重要,記憶體可以看成位元組陣列、磁碟可以看成塊陣列
- 匯流排
- 資料匯流排、控制匯流排、地址匯流排
- 系統匯流排、儲存匯流排、I/O匯流排:p395圖要理解
- 讀寫事務:P389圖要能理解
- 6.2 節
- 區域性性原理:時間區域性性、空間區域性性,有能力者理解一下p429最後一段“儲存器山”
- 資料引用區域性性
- 取指令區域性性
- 6.3 節
- 儲存層次結構:系統觀(1+1>2)(舉一反三:對稱不對稱加密形成的混合加密系統,混合動力汽車...)
- 中心思想:每層儲存裝置都是下一層的“快取”
- 對照p408的表理解
- 6.4節
- 快取記憶體結構(S,E,B,m):快取記憶體組、快取記憶體行、塊
- 對映
- 命中
- 快取管理
教材學習內容總結
6.1儲存技術
隨機訪問儲存器(RAM)
靜態RAM(SRAM):快,作為快取記憶體儲存器。(幾百幾千兆) 動態RAM(DRAM):作為主存,圖形系統的幀緩衝區。(<=幾兆)
- 靜態RAM
具有雙穩定狀態,它可以無期限地保持在兩個不同的電壓配置(狀態)其中的一個。也可以保持在亞穩定狀態,但這個狀態易被干擾。由於它具有雙穩定性,所以即使有干擾,當干擾消除時,它能很快地恢復到穩定值。
- 動態RAM
DRAM將每個位儲存為對一個電容充電。對干擾非常敏感,電容的電壓被干擾之後就永遠不會恢復了。
- 非易失性儲存器:非易失性的意思斷電後不會丟失資訊。SRAM、DRAM都是易失性儲存器。
ROM:只讀儲存器(read-only memory)它有的型別既能讀也能寫,歷史原因這樣稱呼它。
ROM分類:(依據能被重新程式設計、寫的次數和 程式設計所用的機制)
PROM:只能被程式設計一次。
可擦寫可程式設計ROM(EPROM):被程式設計105次
快閃記憶體:基於EEPROM,為大量的電子裝置提供快速持久的非易失性儲存。
韌體:儲存在ROM裝置中的程式。
匯流排
匯流排是一組並行的導線,能夠攜帶地址,資料和控制訊號。
CPU與主存之間的資料傳送:通過匯流排的共享電子電路在處理器和DRAM主存來回往返。
匯流排事務:讀事務(主存傳送資料到CPU,即cpu從主存讀)、寫事務(CPU傳送到主存)
上面是典型的連線CPU和主存的匯流排結構:
系統匯流排:連線CPU和I/O橋
儲存器匯流排:連線主存的I/O橋
磁碟儲存
- 大,但是慢。DRAM快10萬倍,SRAM快100萬倍。
1.磁碟構造
磁碟(旋轉磁碟)由一個或者多個疊放在一起的碟片組成,封裝在一個固定的容器裡。碟片有兩個表面,碟片中央有一個可以旋轉的主軸,固定速度5400~15000轉每分鐘。整個裝置稱為磁碟驅動器。
磁軌:一個表面從圓心擴散,劃分了一組同心圓。
扇區:儲存等數量的資料位。
間隙:儲存標識扇區的格式化位。
柱面:半徑距離相等的磁軌的集合。
2.磁碟容量
磁碟容量:磁碟最大容量。
計算方法:磁碟容量=每個扇區位元組數每個磁軌平均扇區數每個表面的磁軌數每個盤面的表面數磁碟的總盤面數
3.磁碟操作
尋道時間:讀寫頭定位到磁軌上的時間。通常:3~9ms
旋轉時間:到了磁軌,等待目標扇區的時間。最大旋轉延遲:
Tmax rotation=1/RPM * 60secs/1min 平均旋轉時間(延遲):最大的一半。
傳送時間:驅動器讀寫內容所花時間。
- Tavg transfer=Tmax rotation * 1/每個磁軌平均扇區數
計算小結:
時間主要花在尋道和旋轉延遲上。
尋道時間和旋轉延遲大致相等,一般直接尋道時間*2。
4.連線到i/o裝置
5.訪問磁碟
下面這幅圖展示計算機如何通過匯流排訪問磁碟。
6.2區域性性
區域性性原理:程式傾向於引用鄰近最近引用過的資料項或者就是資料項本身。 時間區域性性:儲存器位置多次被引用。 空間區域性性:儲存器位置附近的位置在不遠的將來被引用。
對程式資料引用的區域性性
- 步長為一的引用的模式為順序引用模式。每隔K個元素進行訪問,稱為步長為K的引用模式。
對指令的區域性性:迴圈體具有良好的時間和空間區域性性
區域性性規律總結
重複引用同一個變數的程式具有良好的時間區域性性 對於步長為K的引用模式,K越小,空間區域性性越好。 對於取指令,迴圈具有良好的時間和空間區域性性。迴圈體越小,迴圈迭代次數越多,區域性性越好。
6.3儲存器層次結構
儲存器層次結構中的快取
快取記憶體:下一層(對它本身來說更大更慢的裝置)的緩衝區域。使用快取記憶體的過程叫做快取。
儲存器結構層次的中心思想:每層儲存裝置都是下一層的“快取”。
快取命中
程式需要K+1層的資料物件d,並且d剛好在K層的一個塊中。
快取不命中:與快取命中相反。
- 快取不命中的種類
強制性不命中:上一層快取是空的導致的不命中。
- 放置策略 :
高層的快取(靠近CPU)使用的昂貴代價高版:
允許K+1層的任何塊放在K層的任何塊中
- 嚴格版:
K+1層的某個塊限制放置在K層的某個塊中。
衝突不命中:快取夠大,由於嚴格的放置策略會使K+1層不同物件對映到K層同一個塊引起的不命中。
容量不命中:快取不夠大引起的不命中。
快取管理
L0:編譯器
L1,L2,L3:硬體邏輯
L4:作業系統+CPU上的地址翻譯硬體
L5:AFS客戶端程式
6.4快取記憶體儲存器
- 通用的快取記憶體儲存器結構
儲存器地址:m位
快取記憶體組:S=2^s位
每組E行快取記憶體行
每行1個B=2^b位元組的資料塊
標記位:t=m-(b+s):唯一標識快取記憶體行的塊
快取記憶體大小C=S* E *B
直接對映快取記憶體
1.直接對映快取記憶體中的組選擇
抽取目標地址的對應的S位組索引位。
2.直接對映快取記憶體中的行匹配
有效位&&t位標記位和目標地址的標記匹配,同時為真則命中 不命中時的處理方法:行替換 先從下一層取出被請求的塊,再在塊中組索引,再行匹配(同時有效的話,就可以確認是這個物件了)。由於直接對映快取記憶體每組只有一行,所以只需要將新的行替換當前行就行了。
3.直接對映快取記憶體中的字選擇
塊偏移提供的是所需要的字的第一個位元組的偏移。
以一個例子來理解快取記憶體的全過程
在這個例子中,塊0,4對映到組0,塊1,5對映到組1;塊2,6對映到組2;塊3,7對映到組3。
1) 讀地址0:組0還未載入任何內容進來,所以有效位是0.發生強制不命中。快取記憶體從下一層取出塊0.塊0是由地址0和地址1兩個部分組成。
2) 讀地址1:命中。
3) 讀地址13:屬於塊6,組2.強制不命中,然後讀入塊6,m[12],m[13].
4) 讀地址8:屬於塊4,組0.衝突不命中,組0替換為m[8],m[9].
5) 讀地址0:屬於塊0,組0,衝突不命中,組0替換為m[0],m[1]
4.直接對映快取記憶體中的衝突不命中
在這個例子中,假設快取記憶體只有組0和組1兩個組,一個塊是16位元組(4個陣列元素)。
該程式有很好空間區域性性,可是還是會引起衝突不命中。(原因是:每個組只有一行這個限制)
第一次迭代應用X[0],組接下來是Y[0].導致衝突不命中。以後的每次飲用都導致衝突不命中。
解決方案,將程式碼中的X[8]改成X[12],有[8]改成y[12].這樣x[i],y[i] 對映在不同的組,解決了問題。這樣的方法叫做在陣列後放入B位元組的填充。
教材思考和總結
練習6.2、6.3:簡單的帶入公式。
練習6.4
這個題目兩個小題的區別在於讀/寫頭定位的次數,最好的情況只需要定位一次讀/寫頭,但是隨機的要定位讀/寫頭2000次。這個2000需要先行計算1MB=2000*512B。
練習6.8、6.9
這兩個題目考察的是區域性性的理解,正如上面所說:重複引用同一個變數的程式具有良好的時間區域性性、對於步長為K的引用模式,K越小,空間區域性性越好。對於取指令,迴圈具有良好的時間和空間區域性性。迴圈體越小,迴圈迭代次數越多,區域性性越好。
練習6.10
這個題目就是對應上面的公式把表填滿,但是填表是有順序的:先計算S、然後計算s和b、最後計算t。
總結:本次閱讀要前面要記的內容比較多,但到了後面的快取衝突就感覺理解起來有點困難。本章概念性的元知識較多,只需要去理解它們的定義,構建一個框圖就能很好的掌握本章的知識。重點在於構建一個互補的儲存器結構層次圖,明白什麼事區域性性原理,以及用區域性性原理滲透到計算機的各個層次,不命中中的尤其是衝突不命中如何解決;快取記憶體的定址。