CPU層面的總線鎖和緩存鎖


1、緩存一致性

當高速緩存存在以后,每個CPU獲取/存儲數據直接操作高速緩存,而不是內存,這樣當多個線程運行在不同CPU中時。同一份內存數據就可能會緩存於多個CPU高速緩存中,如不進行限制,就會出現緩存一致性問題
CPU層面提出了兩種解決辦法:1. 總線鎖,2. 緩存鎖

2、總線鎖和緩存鎖

  • 總線鎖:在多CPU下,當其中一個處理器要對共享內存進行操作的時候,在總線上發出一個LOCK信號,使得其他處理器無法訪問共享數據,開銷很大,如果我們能夠控制鎖的粒度就能減少開銷,從而引入了緩存鎖。
  • 緩存鎖:只要保證多個CPU緩存的同一份數據是一致的就可以了,相比總線鎖,緩存鎖即降低了鎖的力度。核心機制是基於緩存一致性協議來實現的。

2.1、緩存一致性協議

為了達到數據訪問的一致,需要各個處理器在訪問 高速緩存 時遵循一些協議,在讀寫時根據協議來操作,常見的協議有MSI、MESI、MOSI。最常見的是MESI協議。

2.1.1 MESI協議

在MESI協議中,每個高速緩存的 緩存控制器 不僅知道自己的讀寫操作,而且也監聽其他告訴緩存的讀寫操作。共有四種狀態,分別是:

  • M(Modify)表示共享數據只緩存在當前CPU緩存中,並且是被修改的狀態。此時表示當前CPU緩存數據與主內存中不一致,其他CPU緩存中如果緩存了當前數據應是無效狀態,因為該數據已被修改且並沒更新到主內存
  • E(Exclusive)表示緩存的獨占狀態,數據只緩存在當前CPU緩存中,並且沒有被修改
  • S(Shared)表示數據可能被多個CPU緩存,並且各個緩存中的數據和主內存中的數據一致
  • I(Invalid)表示當前緩存已經失效

參考文檔

並發編程-(4)-JMM基礎(總線鎖、緩存鎖、MESI緩存一致性協議、CPU 層面的內存屏障)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM