您好,登錄后才能下訂單哦!
本篇內容介紹了“Java中cache line的狀態有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
cache line的狀態:
1、狀態M表示該緩存行中數據有修改,并且與內存中的數據不一致;
2、狀態E表示該緩存行中數據有修改,并且與內存中的數據一致;
3、狀態S表示該緩存行中數據與內存中的數據一致,并且與其它內核中的cache line一致;
4、狀態I表示該緩存行無效;
每個cache控制器除了監聽自己cache的讀寫操作還監聽其它cache的讀寫操作與狀態,因此每個緩存行根據當前所處的狀態與監聽的動作進行狀態轉換,簡稱MESI一致性協議。讀寫操作具體可分成4種類型(LR-本內核讀取本cache,LW-本內核寫本cache,RR-其它內核讀其對應的cache,RW-其它內核寫其對應的cache)狀態轉換過程如下:
1、當數據所在cache line處于I狀態并發生LR時,如果其它內核cache line中沒有該數據則從內存加載,然后該cache line狀態變成E;如果其它內核cache line中有該數據并處于狀態M時,令其寫入到內存后然后本內核從內存中加載,兩個cache line都處于S狀態;如果其它內核cache line中有該數據且已處于狀態S或者E時,本cache line從內存中加載然后都變成S狀態。
當數據所在cache line處于I狀態并發生LW時,先從內存加載數據然后在cache line中修改,狀態變成M;如果其它內核cache line中有該數據,且狀態為M時先令其更新到內存然后狀態置為I;如果其它內核cache line中有該數據,且狀態為E時將狀態置為無效I。而本內核的cache line狀態一直是M。
當數據所在cache line處于I狀態并監聽到RR和RW時不會作任何反應。
2、當數據所在cache line處于M狀態并發生LR時,直接讀取,狀態不變。
發生LW時,直接寫入,狀態不變。
監聽到RR時,數據會寫入內存然后狀態變成S。
監聽到RW時,將數據寫入內存便于其它內存讀取最新數據,然后狀態置無效I。
3、當數據所在cache line處于E狀態并發生LR時,直接讀取,狀態不變。
發生LW時,直接寫入,狀態變成M。
監聽到RR時,狀態變成S。
監聽到RW時,狀態置無效I。
4、當數據所在cache line處于S狀態并發生LR時,直接讀取,狀態不變。
發生LW時,修改cache line中的內容并將狀態變成M,其余內核的cache line置無效狀態I。
監聽到RR時,狀態不變。
監聽到RW時,cache line置無效狀態I。
“Java中cache line的狀態有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。