cache的三種寫操作工作方式

2021-08-25 11:37:40 字數 1877 閱讀 6298

轉+修改說明:cache的三種寫操作工作方式

因為cache的內容是部分主存內容的副本,應該與主存內容保持一致。而cpu對cache的寫入更改了cache內容,如何與主存內容保持一致就有幾種寫操作工作方式可供選擇,統稱為寫策略。

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每行無需設定乙個修改位以及相應的判測邏輯。寫直達法的缺點是,cache對cpu向主存的寫操作無高速緩衝功能,降低了cache的功效。 

3.寫一次法(write--once)

寫一次法是一種基於寫回法又結合了寫直達法的寫策略,即寫命中和寫未命中的處理與寫回法基本相 同,只是第一次寫命中時要同時寫入主存。這種策略主要用於某些處理器的片內cache,例如pentium處理器的片內資料cache就採用的是寫一次 法。因為片內cache寫命中時,寫操作就在cpu內部高速完成,若沒有 記憶體位址及其它指示訊號送出,就不便於系統中的其它cache監聽(snoop)。採用寫一次法,在第一次片內cache寫命中時, cpu要在匯流排上啟動乙個儲存寫週期。其它cache監聽到此主存塊位址及寫訊號後,即可把它們各自儲存可能有的該塊拷貝及時作廢(無效處理)。爾後若有 對片內cache此行的再次或多次寫命中,則按回寫法處理,無需再送出訊號了。這樣雖然第一次寫命中時花費了乙個存 儲週期,但對維護系統全部cache的一致性有利。而大多的cache寫操作不涉及到片 外,對指令流水執行有利(寫一次法大白話:有a b c三快cache本來全部都儲存有主存中塊d ,如果a寫命中,則寫入記憶體塊中,然後cpu就傳送乙個訊號給b和c,告訴b和c關於d的引用已經失效過時了,所以b和c中就不再有d的引用)

主存和cache的三種mapping

cpu對儲存器的訪問,通常是一次讀寫乙個字單元。當cpu訪cache不命中時,需將儲存在主存中的字單元連同其後若干個字一同調入cache中,之所以這樣做,是為了使其後的訪存能在cache中命中。因此,主存和cache之間一次交換的資料單位應該是乙個資料塊。資料塊的大小是固定的,由若干個字組成,且主存...

執行緒的三種建立方

一,繼承thread 重寫run class programmer extends thread public static void main string args 二,繼承runnable 實現run class programmer implements runnable public st...

VMware ESXi Vlan的三種實現方式

在vmware esx esxi網路中vlan實現方式可以分成3種,分別是通過物理交換機,虛擬交換機 vswitch 和esxi中的虛擬機器 vm 來新增vlan標記,具體方式如下 1 est external switch tagging 通過將交換機的埠劃分到不同的vlan實現虛擬機器的vlan...