1. 程式人生 > >詳細瞭解cache的作用與原理

詳細瞭解cache的作用與原理

1.先入先出,新寫入的塊取代最先存放到Cache中的舊塊。
2.隨機替代,新寫入的塊隨機地取代Cache中的舊塊。
3.最近、最不常用替代方式(LRU,Least Recent Used),新寫入的塊將取代Cache中最少被CPU訪問的舊塊。

  不難看出,第三種方式的效率最高,能有效地降低失誤率,因此這也是目前大多數Cache所採用的塊替代方式。此外,在CPU的讀取操作中,Cache中的資料與主記憶體上的資料是一致的。但是當CPU向Cache寫入新的資料時,則會出現Cache與主記憶體之間資料不一致的情況。解決的方法有兩種: 1.寫通(Write through)當CPU向Cache寫入資料時,同時也把資料寫入主記憶體,或同時把資料寫到一個緩衝器中,待CPU空閒時再把資料寫入主記憶體。此方式簡單可靠,但由於CPU每次寫入資料時都要同時對主記憶體的相應資料進行重新整理,因而速度較慢。

2.寫回(Write back)

  當CPU要進行寫入操作時,只把資料寫入Cache,而不直接寫入主記憶體。這時,Cache與主記憶體之間會出現暫時不一致的資料塊。當Cache中的不一致資料塊將要被替代時,再把資料寫回主記憶體,從而使Cache中的資料與主記憶體中的資料又再保持一致。在此方式下,需要在Cache中加入一個控制位(Dirty bit),若Cache中的某資料塊是由CPU寫入的,則控制位=1,否則控制位=0。發生塊替代時,Cache先檢查被替代塊的控制位,若控制位=0,則無需把內容寫回主記憶體,若控制位=1,則執行寫回操作。這樣做的好處是當CPU多次重新整理同一資料塊時,只需把最後的結果寫回主記憶體即可,從而避免了重複寫入,因而具有較高的效率。在早期版本的BIOS中,使用者還可以對採用寫通方式還是寫回方式進行設定,但在新版本的BIOS中已取消了這一設定。

  以上資料寫入都是由CPU執行的,但若是DMA的系統,由於其它裝置也可能向主記憶體寫入資料,這時同樣會造成Cache中的資料與主記憶體資料不一致。所以,目前個人計算機系統大多采用了一種稱為Non-Cacheable Block(非可Cache塊)的解決方法。其原理是在主記憶體中開闢一塊專門的區域,所有對記憶體直接進行寫入操作的裝置都只能把資料寫入該區域。同時,該區域中的內容不會被寫入Cache中,因此Cache中的資料與Non-Cacheable Block 中的資料互不干擾,也就不會發生不一致的情況。

  注:DMI(Desktop Management Interface桌面管理介面)是用來讓系統儲存自身及外圍裝置相關資料的應用程式。通過DMI可以在作業系統級查詢系統配置資訊,而不用進入BIOS,包括CPU、記憶體、I/O擴充插槽等。DMI可以將上述資料儲存在BIOS中的特定位置,也可以利用DMI對資料庫中系統配置情況作出修改以適應不同環境的系統需求。主機板上的BIOS會盡可能地收集系統資訊,將它存在主機板上Flash EPROM中一個4K的小塊中,DMI可以恢復資料庫中的系統資訊―這個資料庫叫作MIFD(Management Information Format Database)。該BIOS允許動態實時更新DMI資訊,DMI還允許在手工加入BIOS時不能探測到如使用者姓名、銷售商、計算機編號等資訊。Flash EPROM與Flash ROM的作用相類似。

  上面說明了Cache的工作方式。在實際應用中,還有非同步與同步Cache之分,這也是快取記憶體的工作方式。在非同步Cache工作方式下,CPU每次訪問Cache的開始時都需要額外消耗一個時鐘週期來查詢特徵位。同步Cache則是把按地址進行查詢的過程分配到兩個以上的時鐘週期上完成。在第一個時鐘週期內,Cache先將地址存放到一個暫存器中,而在第二個時鐘週期內,Cache再把把資料傳送給CPU。由於地址已被儲存在一個暫存器中,所以同步Cache可以在CPU讀取前一次資料的同時接收下一個資料地址,而不必另花時間來接收附加地址。目前大多數主機板所採用的同步Cache稱為管道突發式(Pipelined burst)Cache。能更加快速地訪問從記憶體中讀取的連續資料。

  Cache可分為L1 Cache與L2 Cache兩部分。這也就是BIOS設定中的Internal Cache(內部Cache)與External Cache(外部Cache)。L1 Cache介於CPU與L2 Cache 之間,而L2 Cache 則介於L1 Cache與主機板之間,上面所述的Cache就是前面的L2 Cache。

  注:過去L1Cache已整合到CPU內部,而L2 Cache則焊接在主機板上,早期的奔騰CPU已把L2 Cache整合在晶片上,這樣L2 Cache將與CPU工作在同一頻率上,從而實現了真正的零等待。但在奔騰 II中,Intel採用了既兼顧成本,又考慮效能的折衷方案:將CPU與L2 Cache分開,但又焊接在同一塊電路板上,並一起封裝,L2 Cache的工作頻率是CPU主頻的一半。這就是有人把奔騰Pentium II稱為奔騰pro加MMX的原因。而奔騰賽揚(Celeron)處理器為降低成本,取消了晶片上的L2 Cache,因此有人把賽揚稱為簡裝奔騰II。而在賽楊300A中,又加入了128K L2