用動(dòng)圖的方式,理解 CPU 緩存一致性協(xié)議!


我先給大家復(fù)習(xí)下 MESI 協(xié)議,然后再跟大家講一些這個(gè)網(wǎng)站怎么用。
MESI 協(xié)議
Modified,已修改
Exclusive,獨(dú)占
Shared,共享
Invalidated,已失效


網(wǎng)站體驗(yàn)

第一部分,內(nèi)存。顯示內(nèi)存地址和數(shù)據(jù);
第二部分,CPU 緩存。顯示 CPU 緩存的變量數(shù)據(jù)和 MESI 協(xié)議狀態(tài),因?yàn)槲椰F(xiàn)在還沒(méi)開(kāi)始操作,所以顯示的是空白。
第三部分,CPU 操作。共有三個(gè) CPU,每個(gè) CPU 都有各自的 Cache,CPU 操作分別「讀」和「寫(xiě)」,這部分是我們手動(dòng)操作的部分。
數(shù)據(jù)總線(Data Bus):在CPU與內(nèi)存之間來(lái)回傳送需要處理或是需要儲(chǔ)存的數(shù)據(jù)。
地址總線(Adress Bus),用來(lái)指定在內(nèi)存之中儲(chǔ)存的數(shù)據(jù)的地址。
shared,這個(gè)我也不知道是什么總線,網(wǎng)上沒(méi)搜到資料,網(wǎng)站上最細(xì)那條總線就是這個(gè)名字,作用是控制 Cache 的數(shù)據(jù)狀態(tài)。



點(diǎn)擊 CPU2 的 read a0 操作;
CPU2 會(huì)向地址總線,發(fā)送讀取 a0?變量的數(shù)據(jù)的請(qǐng)求,此時(shí)該請(qǐng)求不僅會(huì)被內(nèi)存收到,也會(huì)被其他 CPU 核心收到。
CPU1 從地址總線得知,CPU2 發(fā)起的讀取地址存在于 CPU1 Cache 里,于是 CPU1 Cache 里數(shù)據(jù)的狀態(tài)會(huì)從 E(獨(dú)占)變更為 S(共享);
內(nèi)存收到 CPU2 發(fā)起的讀取 a0?數(shù)據(jù)的請(qǐng)求后,就會(huì)通過(guò)數(shù)據(jù)總線將數(shù)據(jù)傳遞給 CPU2;
最后數(shù)據(jù)會(huì)寫(xiě)到 CPU2 Cache 里,且狀態(tài)是 S(共享)。
