1. 程式人生 > >(自我複習)(計算機組成原理)(Cache-記憶體-外存關係)

(自我複習)(計算機組成原理)(Cache-記憶體-外存關係)

Cache,記憶體,外存所組成的三級儲存器無疑在計算機的體系裡佔據了無比重要的低位(看看計組/微機書裡面的計算機的組成中,計算機的核心是儲存器就知道了)。而且這個部分無疑也是機組這門課程裡面極其重要的一個部分。

計算機的三級儲存體系中,通過Cache、記憶體、外存的相互配合協調,使得運算速度、儲存容量和成本得到非常良好的兼顧作用。其中,Cache-記憶體之間的協作方式叫做地址對映,而記憶體-外存之間的協作方式叫做虛擬儲存器。這兩個協作方式之間存在很多的共同點。也存在一些差別。本篇部落格旨在根據我的教科書的記憶體,簡要總結一下,權當自己對這本教材的複習。

一、基本介紹
Cache的中文名字叫做高速緩衝儲存器,它的讀取、寫入速度都遠遠高於記憶體,但是成本也同時變得很高。因此由於成本的現在,Cache的容量勢必不能做的很大,因此,在電腦執行程式的過程中,我們通常只把記憶體中的一小部分最常讀寫的資料移入Cache中(當然實際上這個操作不用我們去管理,使用這樣的一個說法只是為了敘述方便,不要會錯意)。

當我們需要在記憶體中讀取某些資料的時候,我們會先在Cache之中尋找是否已經包含了包括這些資料的一個“塊”。如果找到了,稱為“命中”,否則稱為“不命中”。
命中的時候,我們就相當於使用讀取Cache的速度來讀取記憶體。而不命中的時候,我們就需要把記憶體中的資料塊搬到Cache之中去。

而命中率公式顯然為
h=NN+N
同時我們也知道這個Cache-記憶體系統的平均訪問時間為記憶體訪問時間和Cache訪問時間的加權平均值。
tAverage=htCache+(1h)tMemory
也很容易理解訪問效率

e=tCache/tAverage
二、Cache記憶體聯動策略
1、對映策略
當Cache不命中的時候,我們就需要從記憶體中取出某一個數據塊放入Cache的某個地方。因此我們有不同的對映策略。我們可以把每一個記憶體塊對應於Cache中的一個區域。這就是直接對映。很容易知道,由於Cache的大小遠遠小於記憶體的大小,因此,Cache中的每一個區域都會對應記憶體之中的多個塊,因此如果程式需要多次訪問兩個對映在同一個Cache區域的記憶體塊,那麼就會頻繁把Cache中的資料移入Cache之中。導致命中率大為降低,程式運算速度大幅下降。

第二種對映方式叫做全相聯對映

,在這種方式下,我們只是把Cache視為一個桶,不考慮某個資料塊應該放入哪些特定的位置,把Cache中所有位置視為相同的,僅僅把資料塊放入某個位置中。這種方式的主要缺點是,當我們需要在Cache中尋找某個資料塊,或者知道它是否已經被調入Cache之中的時候,需要循序遍歷Cache中每個區域,直到找到、或者到達尾部為止。

第三種對映方式叫做組相聯對映,這種對映方式是上面兩種的綜合。我們把Cache分為多個組,每個組存在多個塊,而每個記憶體塊只對應Cache中的某個組,但是可以放入這個組裡面的某個塊之中。這種方式可以視為設定了多個桶,每個記憶體塊都只對應一個桶,只能夠放入這個桶裡面的某個地方。但是每個桶之中有多個區域,記憶體塊可以放入這個區域之中的任何地方。當我們需要讀取某個記憶體塊的時候,我們先根據記憶體塊的地址得到我們需要的桶需要,找到這個桶,然後順序遍歷這個桶,尋找是否存在我們需要的記憶體塊。如果命中了,

2、替換策略
當新的記憶體塊被填入Cache時,通常需要替換掉Cache之中的某一個數據塊。這就產生了一個問題,替換哪一個資料塊?這裡一般存在3種替換策略:

1.先進先出。2.近期最少使用。3.隨機替換。

一般使用第二個策略,能夠有效提高命中率。

(未完待續,有生之年完成這個部落格)