四態寫回無效協議MESI 緩存
MESI在MSI協議的基礎上改進的,增長了一個互斥獨佔狀態E。 spa
爲何要引入? 事件
考慮當一個順序先讀入一個數據項,而後修改一個數據項時,就要產生一個BusRd事務用來獲得內存塊,並置爲S狀態,而後產生一個BusRdX事務,用來將該塊狀態從S變爲M狀態。而在順序程序中數據項不存在共享者,所以只會在一個告訴緩存有該塊拷貝,後一個事務是沒必要要的。 事務
因此引入一個E狀態,用來表示只有一個高速緩存中獨佔這個內存快,且該塊內容沒有被修改過。 內存
在產生總線讀事務時,高速緩存控制器要知作別的高速緩存中是否存在該塊的拷貝,來決定該塊置爲S狀態仍是E狀態。這就須要提供一個額外的共享S信號線, 基礎
S信號線低電平,爲E,高爲S 程序
關鍵在於E狀態: im
1. 當有處理器讀PrRd事件時,由於就該cache有當前數據,因此直接命中仍是E態 數據
2. 當有處理器寫PrWr事件時,由E到M狀態,告知已經被修改過,且是最新的 協議
3. 當觀察到一個總線讀(BusRd)事務,將致使由E狀態轉換到S狀態,同時由該高速緩存提供數據。(由於只有改cache是獨佔此數據的,其餘cache中沒有任務拷貝)
4. 當觀察到一個總線互斥讀(BusRdX)事務,由該高速緩存提供數據。(由於只有改cache是獨佔此數據的,其餘cache中沒有任務拷貝)可是由於人家要當老大,本身只好FLUSH後轉爲無效狀態
注意S狀態,在MSI中,當觀察到一個總線讀和互斥讀的事務,在進行狀態轉換的同時,由主存提供數據,而在MESI中由處於S狀態下的某一個高速緩存提供數據,這個並非必定的,這是一種選擇的策略。怎麼均可以。