MSI cache一致性協議

按照高速緩存的寫策略的不一樣,有寫直達和寫回WB兩種高速緩存: 緩存

1.  寫直達高速緩存:一旦高速緩存中的一個字被修改,則在主存中要當即修改 spa

2.  寫回高速緩存: 並非當即寫回,而是當被修改的字從高速緩存中被替換或清除時,才真正修改主存 設計

在偵聽協議的設計中,主要有兩種設計選擇:一是寫直達高速緩存仍是寫回高速緩存,二是寫無效WI,仍是寫更新WU協議 事件

 

MSI協議 事務

三態寫回無效MSImodifiedsharedinvalid 內存

狀態 請求

1.  無效I狀態: im

2.  共享S狀態:它意味着該塊在高速緩存中未被修改過,主存中是最新的,在其餘高速緩存中可能有也可能沒有該塊的拷貝 數據

3.  修改M狀態:它意味着只有該高速緩存中有該塊的最新拷貝,主存中的拷貝是過期的,在其餘高速緩存中沒有該塊的有效拷貝。 協議

 

事件:

高速緩存一致性協議中,每一個高速緩存控制器接收兩方面的輸入:

1.  處理器發出的請求: 處理器讀PrRd 處理器寫PrWr

2.  總線上偵聽到的事務:總線讀BusRd、總線互斥讀BusRdx、總線寫回BusWB

總線讀BusRd:高速緩存控制器將地址放到總線上,請求一個數據塊,由主存或者Cache提供數據。

總線互斥讀:請求數據塊,該目的是要修改該數據塊,而且本身獨佔,其餘cache都無效。

總線寫回BusWBcache將數據塊寫入內存

 

爲了支持上面的事件,高速緩存控制器又提供了一種新事件:FLUSH,目的是爲了響應出如今總線上的事務,並能把該事務所請求的塊從緩存中cache直接放到總線上,而不是經過內存再傳進數據。

 

  

 

  

 

上圖中A/B表示高速緩存控制器觀察到事件A發生了,或者說因爲事件A致使了該轉換的發生,除了發生狀態轉換外,還要產生一個動做B;「-」表示空動做,Flush動做表示由高速緩存來請求塊到總線上。

 

無效狀態:

1.  當有處理器讀PrRd事件時,就會發生cache miss這樣就會裝入新數據,但此時其餘的cache可能有也可能沒有,因此進入S狀態,固然須要總線讀事件的支持,因此觸發總線讀事件BusRd

2.  當有處理器寫PrWr事件時,會致使cache miss,調用總線互斥讀BusRdX事件(目的是告訴其餘cache我要修改這個cache,大家先都無效掉),把要寫入的數據裝入cache(這是因爲採用寫直達且不分配策略),而後再修改,這時就會進入M狀態

 

共享狀態:

1.  當有處理器讀PrRd事件時,由於數據就在本cache內且是最新的因此直接命中,仍是S狀態。

2.  當有處理器寫PrWr事件時,調用總線互斥讀BusRdX事件(目的是告訴其餘cache我要修改這個cache,大家先都無效掉),當更新數據後,須要進入M狀態,告知這是最新的數據,主存中的數據也是過期的。

3.  當接收到總線上有讀BusRd的事件時,當在共享態接受到別人的總線讀信息時,與我無關,因此仍是S狀態。

4.  當接收到總線上有互斥讀BusRdX的事件時,我知道你要當老大了,因此我也只能遵從你的安排,把本身無效掉。進入I狀態

 

修改過狀態

1.  當有處理器讀PrRd事件時,由於爲讀事件,且M表明當前cache的數據是要比其餘的新,因此直接命中,不影響其餘cache。因此進入M狀態

2.  當有處理器寫PrWr事件時,一樣也是由於當前cache是最新的,因此直接更新寫,對其餘cache不產生影響,因此仍是進入M狀態。

3.  當接收到總線上有讀BusRd的事件時,由於如今我在M狀態,個人數據是最新的,因此固然由我提供數據,因此產生FLUSH事件,最後進入S狀態。

4.  當接收到總線上有互斥讀BusRdX的事件時,由於你告訴我只能你當老大,沒辦法我只能讓出,可是讓出前我須要把玉璽交出來,因此先FLUSH,而後進入了無效I狀態讓你當老大。

相關文章
相關標籤/搜索