狀態
首字母縮略詞MESI中的字母表示可以標記高速快取行的四種獨占狀態(使用兩個附加位編碼):
1、修改(M)
高速快取行僅存在於當前高速快取中,並且是髒的 - 它已從主存儲器中的值修改(M狀態)。在允許對(不再有效)主存儲器狀態的任何其他讀取之前,需要高速快取在將來的某個時間將數據寫回主存儲器。回寫將該行更改為共享狀態(S)。
2、獨占(E)
快取行僅存在於當前快取中,但是乾淨 - 它與主記憶體匹配。它可以隨時更改為共享狀態,以回響讀取請求。或者,可以在寫入時將其改變為修改狀態。
![MESI協定 MESI協定](/img/7/617/QYkFmYiNjMwIWO0MDNzQjM2YWZxMmNmVTO1AjNhJzNkljZ5QmZwATNvMWaw9SbvNmLz9mYlNmYu4GZj5yZtl2ai9yL6MHc0RHa.jpg)
圖1
3、共享(S)
表示此高速快取行可能存儲在計算機的其他高速快取中並且是乾淨的 - 它與主存儲器匹配。可以隨時丟棄該行(更改為無效狀態)。
4、無效(I)
表示此快取行無效(未使用)。
對於任何給定的高速快取對,給定高速快取行的允許狀態如圖1所示。
當塊標記為M(已修改)時,其他高速快取中塊的副本將標記為I(無效)。
MESI優於MSI的優勢
兩種協定之間最顯著的差異是MESI協定中存在的額外“獨占”狀態。添加了這個額外狀態,因為它有許多優點。如果處理器需要讀取其他處理器都沒有的塊然後寫入它,那么在MSI的情況下將發生兩個匯流排事務。首先是BusRd請求,在寫入塊之前讀取塊,然後是BusRdX請求。這種情況下的BusRdX請求是無用的,因為沒有其他快取具有相同的塊,但是一個快取無法知道這一點。因此,MESI協定通過添加Exclusive狀態克服了這一限制,從而節省了匯流排請求。這在順序應用程式運行時會產生巨大差異。由於只有一個處理器正在處理它,所有訪問都將是獨占的。 MSI在這裡表現得非常糟糕。即使在高度並行的應用程式中,數據共享最少,MESI也會快得多。
MESI的缺點
如果由特定塊上的各種高速快取執行連續讀取和寫入操作,則每次都必須將數據刷新到匯流排上。因此,主存儲器將在每次沖洗時拉動它並保持清潔狀態。但這不是一項要求,只是由於MESI的實施而導致的額外開銷。 MOESI協定克服了這一挑戰。