用動圖的方式,理解 CPU 緩存一致性協議!
大家好,我是小林。
我之前寫過 CPU 緩存一致性 MESI 協議:10 張圖打開 CPU 緩存一致性的大門。
然后期間挺多人對 MESI 協議的轉換有疑問,其實我在文章中把 MESI 協議狀態切換的各個過程都總結成了一個表格,可能內容太多,很多小伙伴沒有仔細看。
就在昨天,我發現個可以「在線體驗?MESI?協議狀態轉換」過程的網站,地址如下:
https://www.scss.tcd.ie/Jeremy.Jones/VivioJS/caches/MESIHelp.htm
我先給大家復習下 MESI 協議,然后再跟大家講一些這個網站怎么用。
MESI 協議
Modified,已修改
Exclusive,獨占
Shared,共享
Invalidated,已失效
網站體驗
第一部分,內存。顯示內存地址和數據;
第二部分,CPU 緩存。顯示 CPU 緩存的變量數據和 MESI 協議狀態,因為我現在還沒開始操作,所以顯示的是空白。
第三部分,CPU 操作。共有三個 CPU,每個 CPU 都有各自的 Cache,CPU 操作分別「讀」和「寫」,這部分是我們手動操作的部分。
數據總線(Data Bus):在CPU與內存之間來回傳送需要處理或是需要儲存的數據。
地址總線(Adress Bus),用來指定在內存之中儲存的數據的地址。
shared,這個我也不知道是什么總線,網上沒搜到資料,網站上最細那條總線就是這個名字,作用是控制 Cache 的數據狀態。
點擊 CPU2 的 read a0 操作;
CPU2 會向地址總線,發送讀取 a0?變量的數據的請求,此時該請求不僅會被內存收到,也會被其他 CPU 核心收到。
CPU1 從地址總線得知,CPU2 發起的讀取地址存在于 CPU1 Cache 里,于是 CPU1 Cache 里數據的狀態會從 E(獨占)變更為 S(共享);
內存收到 CPU2 發起的讀取 a0?數據的請求后,就會通過數據總線將數據傳遞給 CPU2;
最后數據會寫到 CPU2 Cache 里,且狀態是 S(共享)。
緩存
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。