1.1 概述
一、產生原因
- 爲避免CPU空等的現象
- CPU與主存(DRAM)的速度差異剪刀差越來越大
- 依據程序局部性原理
二、Cache的工作原理
1、主存和緩存的編址
- C<<M
- 若把主存或者Cache,如果把主存或者Cache分成若干塊,則cpu給出內存的地址可分爲兩部分,一部分是塊內偏移地址,位數決定塊的大小,若一個塊包含16個字節,且內存編址單位是字節,則塊內地址部分就是4位,剩餘部分就是主存的塊的編號。
- Cache也分爲塊內地址和緩存塊號兩部分
Cache的標記部分實際上標記了主存塊和Cache塊之間的對應關係,如果一個主存塊調入到Cache當中,可講主存塊號寫到標記當中。cpu要從cache中訪問這個數據,要先確定要訪問的塊號是不是已經被送到Cache當中,拿給出地址的主存塊號與標記進行比較,若正好相等,並且Cache是有效的,則這個塊裏面就保存了在內存裏的信息可以直接從Cache訪問數據,速度大大加快
2、命中與未命中
緩存共有C塊 主存共有M塊 主存中只有部分塊被放入了緩存當中
- 命中 在cpu要訪問主存時,要訪問的塊已經放進了緩存當中,CPU可以從緩存中取到相應的數據和指令
- 未命中 要訪問的塊沒有被放入緩存中,cpu只能從主存中獲取數據
若命中,主存和緩存塊之間就建立了對應關係,某一個主存塊裝入到了某一個緩存塊當中,這個對應關係就可以用標記進行表示,如果沒有調入那麼就沒有建立這種對應關係。在標記記錄當中記錄了與某緩存塊建立對應關係的主存塊號
3、命中率
- CPU預訪問的信息在Cache的比率 命中率和Cashe的容量與塊長有關
- 一般每塊可取4-8個字
- 塊長取一個存取週期內從主存調出的信息長度
- CRAY_1 16體交叉 塊長取16個存儲字
- IBM 370/168 4體交叉 塊長取4個存儲字
4、主存系統的效率
效率e與命中率有關
訪問Cache的時間/平均訪問時間
設Cache命中率爲h,訪問Cache的時間爲,訪問主存的時間爲,則
三、Cache的基本結果
四、Cache的讀寫操作
讀操作
寫操作 Cache和主存的一致性
1、寫直達法
- 寫操作時數據集寫入Cache又寫入主存
- 寫操作時間就是訪問主存的時間,Cache塊退出時,不需要對主存執行寫操作,更新策略比較容易實現
2、寫回法
- 寫操作時只把數據寫入Cache而不寫回主存,當Cache數據唄替換出去時才寫回主存
五、Cache的改進
- 增加Cache的級數
- 統一緩存和分立緩存
1.2 Cache-主存的地址映射
一、直接映射
主存當中任意一個給定的塊只能映射到指定的cache塊當中
拿Cache存儲體作爲一個尺子度量主存存儲體,將主存儲器劃分成若干個與cache存儲體相等的區,每個區當中包含字塊數與Cache相同,每個區中的字塊編號時可以從0開始,任何一個區的第0塊只能放到cache的第0塊。
如果cpu給出一個地址,我們分成三部分,區號、塊號、塊內偏移地址。要對比區號與標記是否相同,則爲命中
二、全相聯映射
Cache利用率變高,只要Cache中還有空閒字塊就可以調入,但是速度慢
三、組相聯映射
先把Cache分成塊,Cache塊被分成組。
主存儲器進行分區,每個區的大小與Cache的組數相同。每個區的字塊0可以被放入cache的第0組任意位置
1.3 替換算法
一、先進先出算法
二、近期最少使用算法
2.1 輔助存儲器