日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

左圖為最簡單的高速緩存的配置,數據的讀取和存儲都經過高速緩存,CPU核心與高速緩存有一條特殊的快速通道;主存與高速緩存都連在系統總線上(BUS)這條總線還用于其他組件的通信

在高速緩存出現后不久,系統變得越來越復雜,高速緩存與主存之間的速度差異被拉大,直到加入了另一級緩存,新加入的這級緩存比第一緩存更大,并且更慢,而且經濟上不合適,所以有了二級緩存,甚至是三級緩存

硬核知識——聊聊CPU緩存和緩存一致性

 

1.為什么需要CPU cache?

CPU的頻率太快了,快到主存跟不上,這樣在處理器時鐘周期內,CPU常常需要等待主存,浪費資源。 所以cache的出現,是為了緩解CPU和內存之間速度的不匹配問題(結構:cpu->cache->memory)。

2.CPU cache 存在的原理?

局部性原理:CPU 訪問存儲器時,無論是存取指令還是存取數據,所訪問的存取單元都趨于聚集在一個較小的連續區域中。

時間局部性:如果某個數據被訪問,那么在不久的將來他很可能被再次訪問。

空間局部性:如果某個數據被訪問,那么與他相鄰的數據很快也可能被訪問。

3.緩存一致性(MESI)

MESI協議中cache line數據狀態有4種,引起數據狀態轉換的CPU cache操作也有4種,因此要理解MESI協議,就要將這16種狀態轉換的情況討論清楚。

硬核知識——聊聊CPU緩存和緩存一致性

 

 

初始場景:在最初的時候,所有的CPU中都沒有數據,其中一個CPU發生讀操作,此時發生RR(數據從主內存中讀取到當前CPU的cache),狀態為E(獨占,只有當前CPU有數據,并且和主存一致)。此時,如果有其他CPU也讀取主存數據,則狀態修改為S(共享,多個CPU之間擁有相同數據,并且和主存保持一致),如果其中一個CPU發生數據修改,那么該CPU中數據狀態修改為M(擁有最新數據,和主存不一致,但是以當前CPU中的數據為準),并通知其他擁有該數據的CPU數據失效,其他CPU中的cache line狀態修改為I(失效,和主存中的數據被認為不一致,數據不可用應該重新獲取)

modify

場景:當前CPU中數據狀態是modify,表示當前CPU中擁有最新數據,雖然主存中的數據和當前CPU中的數據不一致,但是以當前CPU中的數據為準;

  • LR:此時如果發生local read,即當前CPU讀數據,直接從cache中獲取數據,擁有最新數據,因此狀態不變;
  • LW:直接修改本地cache數據,修改后也是當前CPU擁有最新數據,因此狀態不變;
  • RR:因為本地內存中有最新數據,因此當前CPU不會發生RR和RW,當本地cache控制器監聽到總線上有RR發生的時,必然是其他CPU發生了讀主存的操作,此時為了保證一致性, 當前CPU應該將數據寫回主存,而隨后的RR將會使得其他CPU和當前CPU擁有共同的數據,因此狀態修改為S;
  • RW(將當前CPU緩存中的數據寫入到主內存里面):同RR,當cache控制器監聽到總線發生RW,當前CPU會將數據寫回主存,因為隨后的RW將會導致主存的數據修改,因此狀態修改成I;

exclusive

場景:當前CPU中的數據狀態是exclusive,表示當前CPU獨占數據(其他CPU沒有數據),并且和主存的數據一致;

  • LR:從本地cache中直接獲取數據,狀態不變;
  • LW:修改本地cache中的數據,狀態修改成M(因為其他CPU中并沒有該數據,因此不存在共享問題,不需要通知其他CPU修改cache line的狀態為I);
  • RR:因為本地cache中有最新數據,因此當前CPU cache操作不會發生RR和RW,當cache控制器監聽到總線上發生RR的時候,必然是其他CPU發生了讀取主存的操作,而RR操作不會導致數據修改,因此兩個CPU中的數據和主存中的數據一致,此時cache line狀態修改為S;
  • RW:同RR,當cache控制器監聽到總線發生RW,發生其他CPU將最新數據寫回到主存,此時為了保證緩存一致性,當前CPU的數據狀態修改為I;

shared

場景:當前CPU中的數據狀態是shared,表示當前CPU和其他CPU共享數據,且數據在多個CPU之間一致、多個CPU之間的數據和主存一致;

  • LR:直接從cache中讀取數據,狀態不變;
  • LW:發生本地寫,并不會將數據立即寫回主存,而是在稍后的一個時間再寫回主存,因此為了保證緩存一致性,當前CPU的cache line狀態修改為M,并通知其他擁有該數據的CPU該數據失效,其他CPU將cache line狀態修改為I;
  • RR:狀態不變,因為多個CPU中的數據和主存一致;
  • RW:當監聽到總線發生了RW,意味著其他CPU發生了寫主存操作,此時本地cache中的數據既不是最新數據,和主存也不再一致,因此當前CPU的cache line狀態修改為I;

invalid

場景:當前CPU中的數據狀態是invalid,表示當前CPU中是臟數據,不可用,其他CPU可能有數據、也可能沒有數據;

  • LR:因為當前CPU的cache line數據不可用,因此會發生RR操作,此時的情形如下。

A. 如果其他CPU中無數據則狀態修改為E;

B. 如果其他CPU中有數據且狀態為S或E則狀態修改為S;

C. 如果其他CPU中有數據且狀態為M,那么其他CPU首先發生RW將M狀態的數據寫回主存并修改狀態為S,隨后當前CPU讀取主存數據,也將狀態修改為S;

  • LW:因為當前CPU的cache line數據無效,因此發生LW會直接操作本地cache,此時的情形如下。

A. 如果其他CPU中無數據,則將本地cache line的狀態修改為M;

B. 如果其他CPU中有數據且狀態為S或E,則修改本地cache,通知其他CPU將數據修改為I,當前CPU中的cache line狀態修改為M;

C. 如果其他CPU中有數據且狀態為M,則其他CPU首先將數據寫回主存,并將狀態修改為I,當前CPU中的cache line狀態修改為M;

  • RR:監聽到總線發生RR操作,表示有其他CPU讀取內存,和本地cache無關,狀態不變;
  • RW:監聽到總線發生RW操作,表示有其他CPU寫主存,和本地cache無關,狀態不變;

總結

MESI協議為了保證多個CPU cache中共享數據的一致性,定義了cache line的四種狀態,而CPU對cache的4種操作可能會產生不一致狀態,因此cache控制器監聽到本地操作和遠程操作的時候, 需要對地址一致的cache line狀態做出一定的修改,從而保證數據在多個cache之間流轉的一致性。


作者:habit_learning
鏈接:https://www.jianshu.com/p/893f25eac96f
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

分享到:
標簽:緩存 CPU
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定