Cache工作原理-4

 

2.4.4 寫策略與一致性要求

  在2.4.1介紹cache工作原理時,說明了cache的讀操作工作方式包括讀命中處理和讀未命中處理。本節介紹cache的寫操作工作方式。因爲cache的內容是部分主存內容的副本,應該與主存內容保持一致。而CPU對cache的寫入更改了cache內容,如何與主存內容保持一致就有幾種寫操作工作方式可供選擇,統稱爲寫策略。本節還介紹維護cache / 主存一致性的一個重要協議--MESI協議。
  考慮到一致性、命中率、速度等問題,普遍採用如下三種寫操作方式中的一種。
   1.寫回法(write--back)
  使用這種策略,當CPU對cache寫命中時,只修改cache的內容不立即寫入主存,只當此行被換出時才寫回主存。這種策略使cache在CPU-主存之間,不僅在讀方向而且在寫方向上都起到高速緩存作用。對一cache行的多次寫命中都在cache中快速完成修改,只是需被替換時才寫回速度較慢的主存,減少了訪問主存的次數從而提高了效率。爲支持這種策略,每個cache行必須配置一個修改位,以反映此行是否被CPU修改過。當某行被換出時,根據此行修改位爲1還是爲0,決定是將該行內容寫回主存還是簡單地棄之而不顧。
  對於cache寫未命中,寫回法的處理是爲包含欲寫字的主存塊在cache分配一行,將此塊整個拷貝到Cache後對其進行修改,因爲爾後對此塊的多次讀/寫訪問的可能性很大。拷貝主存塊時雖已讀訪問到主存,但此時並不對主存塊修改。因爲換出的cache很可能此期間要寫回主存,爲避免此過程耗時太長,寫未命中對將新塊讀入後,只在cache中進行寫修改。統一地將主存寫修改操作留待換出時進行。
  顯然,這種寫cache與寫主存分開進行方式可顯著減少寫主存次數,但寫回法也帶來了cache / 主存嚴重的不一致性。後面將要介紹的MESI協議,就是一個針對寫回法的維護cache一致性的協議。
  2.寫直達法(write--through)
  這一策略的中文譯名不盡相同,有的稱全寫法,有的稱寫貫通法。顧名思義,它的作法是當cache寫命中時, cache與主存同時發生寫修改。這種策略顯然較好地維護了cache與主存的內容一致性,但這並不等於說全部解決了一致性問題。例如在多處理器系統中各CPU都有自己的cache,一個主存塊若在多個cache中都有一份拷貝的話,某個CPU以寫直達法來修改它的cache和主存時,其它cache中的原拷貝就過時了。即使在單處理器系統中,也有I/O設備不經過cache向主存寫入的情況。總之,仍要關注一致性問題。
  當cache寫未命中時,只有直接向主存寫入了,但此時是否將修改過的主存塊取到cache,寫直達法卻有兩種選擇。一種是取來並且爲它分配一個行位置,稱爲WTWA法(Write--Through--with--Write--Allocate)。另一種是不取稱爲WTNWA法(WriteThrough--with.NO-Write--Allocate)。前一種方法保持了cache / 主存的一致性,但操作複雜,而後一種方法操作簡化,但命中率降低,內存的修改塊只有在讀未命中對cache 進行替換時,纔有可能映射到cache 。
  寫直達法是寫cache與寫主存同步進行,其優點是cache每行無需設置一個修改位以及相應的判測邏輯。上節介紹的80486處理器片內cache採用的就是寫直達法,這也可從其組織結構中無修改位看出。寫直達法的缺點是, cache對CPU向主存的寫操作無高速緩衝功能,降低了cache的功效。
  3.寫一次法(write--once)
  寫一次法是一種基於寫回法又結合了寫直達法的寫策略,即寫命中和寫未命中的處理與寫回法基本相同,只是第一次寫命中時要同時寫入主存。這種策略主要用於某些處理器的片內cache,例如Pentium處理器的片內數據cache就採用的是寫一次法。因爲片內cache寫命中時,寫操作就在CPU內部高速完成,若沒有內存地址及其它指示信號送出,就不便於系統中的其它cache監聽(snoop)。採用寫一次法,在第一次片內cache寫命中時, CPU要在總線上啓動一個存儲寫週期。其它cache監聽到此主存塊地址及寫信號後,即可把它們各自保存可能有的該塊拷貝及時作廢(無效處理)。爾後若有對片內cache此行的再次或多次寫命中,則按回寫法處理,無需再送出信號了。這樣雖然第一次寫命中時花費了一個存儲週期,但對維護系統全部cache的一致性有利。而大多的cache寫操作不涉及到片外,對指令流水執行有利

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章