2014-04-29 165 views
0

我在讀緩存寫入策略,我只是想知道我是否正確理解這一點。緩存讀取和寫入

當讀取導致緩存未命中時,它將獲取該塊內存並將其放入緩存中。那麼緩存寫入未命中將意味着程序想要寫入的內存中的位置不在緩存中,對嗎?所以,我在讀回寫,這是根據維基百科如下的描述:

最初,書寫時只緩存。對後備存儲的寫入被推遲,直到包含數據的高速緩存塊將要被新內容修改/替換。

因此,緩存塊的內存唯一可以替換的時間是在讀取期間正確的?寫操作只是簡單地改變內存中某個特定位置的數據(如果這是一個命中的話,這將在一個緩存塊中),但是它會使塊內的實際內存位置相同,是正確的?

這是我對它的理解,我只是想確保它是正確的。

編輯:等等,我緩存中猜錯過它也將被更換/更新高速緩存塊....

回答

2

Wikipedia解釋了它相當不錯,其實。一方面回寫寫通定義將數據寫入到備份存儲(也稱爲主存儲器):

  • 直寫 - 寫操作都同步進行到緩存和後臺存儲。
  • 回寫(或後寫) - 最初只寫入緩存。對後備存儲的寫入被推遲,直到包含數據的高速緩存塊將要被新內容修改/替換。

在另一方面寫分配不寫分配定義瞭如何應對寫缺失,即用是否從後備存儲數據進入緩存:

  • 寫分配(在寫入時也稱爲讀取) - 在未寫入位置處的數據被加載到高速緩存,然後是寫入命中操作。在這種方法中,寫入缺失類似於讀取缺失。
  • 無寫入分配(又名寫入 - 不分配或四處寫入) - 未寫入位置處的數據未加載到高速緩存,並直接寫入後備存儲。在這種方法中,只有系統讀取被緩存。
+0

+1 *技術上說,write allocate不需要從後臺存儲中加載數據;每個字節的有效位可以分配任何寫入緩存行,但不從後備存儲區和數據緩存塊讀取/分配指令也讀取所有權。注意:*學術上已經將* eager *回寫作爲帶寬使用優化,其中早期回寫利用空閒內存通道或打開DRAM頁面。 (這也可以通過允許更多緩存被關閉或關閉直到SECDED僅足夠用於ED而不需要寫回來而節省能量。) –

+0

哦,並且無寫分配仍然*高速緩存*寫入(即,,而不是「只有系統讀取被緩存」),它只是在寫入完成到同一個緩存塊之前不緩存寫入。改寫爲更類似於「在這種方法中,塊只在讀取時分配/輸入到緩存中,寫入匹配將緩存它們的值。」 (這可能顯然是必要和恰當的,但初學者可能會誤解那些甚至含糊不清的陳述。) –