存儲器的層次結構
計算機存儲器的設計目標可歸納爲三個問題:
多大的容量? 多快的速度? 多貴的價格?
存儲器的這三個特徵即價格、容量、訪問時間之間存在着一定的折中。
實現存儲器系統需要各種各樣的技術,但各種技術之間存在着如下關係:
- 存取速度越快,每“位”的價格越高。
- 容量越大,每“位”的價格越低。
- 容量越大,存取速度越慢。
劃重點啊後兩條!!
需求總會是又大又快。。但二者卻存在衝突。
解決這一問題的方法是 不使用單一的存儲組件或技術,而是 存儲器層次結構
一種典型的層次結構如圖,從上到下有這樣的規律:
- 價格遞減;
- 容量遞增;
- 速度遞減;
- 處理器訪問該存儲器的頻率降低。
最後一條成立的基礎是局部性原理
我們把容量較大、價格較低的慢速存儲器作爲容量小、價格高的快速存儲器的後備。
高速緩存
動機:
在整個指令週期中,處理器至少訪問一次存儲器,處理器的執行速度必然受存儲週期的限制。
如果這兩者不匹配,這一限制會帶來很大問題。。
理想情況下,內存的構造技術可以採用與處理器中的寄存器一樣的構造技術,這樣的話內存的存儲週期纔跟得上處理器週期。
但是成本太大。
解決的辦法即利用局部性原理:
在處理器和內存之間提供一個容量小但速度快的存儲器,稱爲高速緩存。
原理:
上圖中,有一個容量相對大但速度慢的內存,以及一個容量小速度快的高速緩存。
高速緩存中有一部分內存數據的副本,當處理器試圖讀取存儲器中的一個字節或字時,首先會檢查該數據是否在高速緩存中,
如果在,該字節直接從高速緩存進入處理器;
否,將從內存中取出一個包含需要的字節或字的塊,放入高速緩存中。
根據局部性原理,當一塊數據被放入高速緩存中以滿足一次存儲器訪問時,很可能接下來的多次訪問也會集中在這一個塊中。
高速緩存/內存結構:
內存有2^n個可以尋址的字組成,每個字有唯一的n位地址,爲便於映射,可認爲該存儲器由一組塊組成,每個塊有k個字。
高速緩存中有C個存儲槽,每個槽可放k個字(即可容納一個塊),槽的數量遠小於內存中塊的數量。
內存中塊的某些自己留在告訴緩存的槽中,當處理器試圖讀取存儲器中某一個塊的一個字節或字時,而該塊不在高速緩存中的槽之中時,則將這個塊取到槽中。
一個槽不可能唯一或永久對應一個塊。因此每個槽有一個標籤以標識當前爲哪個塊,
標籤通常是地址中較高的若干位,標識以這些位開始的所有地址。
下圖爲該過程: