精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

介紹下cpu緩存一致性(MESI協議)

冬至子 ? 來源:并發編程之美 ? 作者:妙啊 ? 2023-06-09 16:01 ? 次閱讀

介紹

之前介紹了java并發包的cas原理和java內存模型,這篇我們介紹下cpu緩存一致性原理,可以幫助我們更好的理解cas的底層原理。

一、cpu多級緩存結構

圖片

  • 計算機在寄存器上執行的速度是遠大于在主內存上執行的速度。

  • 由于計算機的存儲設備與處理器的運算速度之間存在幾個數量級的差距,所以新的計算機系統都不得不加入一層讀寫速度都盡可能接近處理器運算速度的高級緩存來作為內存與處理器之間的緩沖,將運算使用到的數據復制到緩存中,讓運算快速執行,當運算結束后,再將數據從緩存同步到內存中,這樣處理器就無需等待緩慢的內存讀寫了。

  • 一個計算機還包含一個主存,所有的cpu都可以訪問這個主存,主存通常比CPU中的緩存大得多。

  • 多核cpu運作原理:

    通常情況下,當一個CPU需要讀取主存的時候,它會將主存的數據讀取到CPU緩存中,甚至會將緩存中的部分內容讀到它內部的寄存器里面,然后在寄存器中執行操作;當CPU需要將結果回寫到主存的時候,它會將內部寄存器的值刷新到緩存中,然后在某個時間點將值刷新回主存。

二、MESI協議

圖片

四種狀態:

  • M:Modified(被修改)

    指的是該緩存行只被緩存在該CPU的緩存中,并且是被修改過的,因此它與主存中的數據是不一致的,該緩存行的內存需要在未來的某個時間點寫回主存,這個時間點我們是允許其他CPU讀取主存中相應的內存之前,當這里的值被寫回主存之后,該緩存行的狀態變成E。

  • E:Exclusive(獨享)

    獨享狀態的緩存行只被緩存在該CPU的緩存中,它是未被修改過的,是與主存中的數據一致的,這個狀態可以在任何時刻,當有其他CPU讀取該內存時變成S。同樣的,當COU修改該緩存行的數據時,該狀態可以變成M。

  • S:Shared(共享)

    共享狀態意味著,該緩存行可能被多個CPU進行緩存,并且各個緩存中的數據與主存中的數據是一致的,當有一個CPU修改該緩存行的時候,其他CPU中該緩存行是可以被作廢的,變成I。

  • I:Invalid(無效的)

    無效狀態代表這個緩存是無效的,可能是有其他CPU修改了該緩存行。

CPU的cache的四種操作可能產生不一致的狀態,因此緩存控制器監聽到本地操作和遠程操作的時候,需要對地址一定的cache line做出一定的修改,從而保證數據在多個緩存之間的一致性。

四種操作:

  • local read

    代表的是讀本地緩存行中的數據。

  • local write

    代表的是將數據寫入到本地的緩存里面。

  • remote read

    代表的是將內存中的數據讀取到本地。

  • remote write

    代表的是將數據寫回到主存中。

三、MESI工作原理

在一個典型的多核系統中,每一個核都會有自己的緩存來共享主存總線,每一個相應的CPU都會發出讀寫請求,而緩存的目的是為了減少CPU讀寫共享主存的次數。

  • 一個緩存除了在Invalid狀態之外,都可以滿足CPU的讀請求;
  • 一個寫請求,只有在該緩存行是M狀態或者E狀態,才能被執行,如果當前狀態是處于S狀態,它必須先將這個緩存中的該緩存行變成無效的狀態,這個操作一般采取廣播的方式來完成,這個時候,它不允許不同的CPU同時修改同一個緩存行,主要是為了解決緩存一致性的問題;
  • 一個處于M狀態的緩存行,它必須時刻監聽所有試圖讀該緩存行的操作,這種操作必須將緩存寫回到主內存,并將狀態修改為S之前被延遲執行;
  • 一個處于S狀態的緩存行,也必須監聽其他緩存只被緩存行無效,或者獨享該緩存行的請求,并將緩存行變成無效;
  • 而一個處于E狀態的緩存行,它要監聽其他緩存讀緩存中該緩存行的操作,一旦有該緩存行的操作,它需要將E狀態修改為S狀態;

因此對于M和E,它的數據總是精確的,而S狀態可能是非一致的,如果一個緩存將處于S狀態的緩存行作廢了,另一個緩存實際上可能已經獨享了該緩存行,但是該緩存卻不會將緩存行變更為E狀態,這是因為其他緩存不會廣播他們作廢掉該緩存行的通知,同樣,由于緩存并沒有保存該緩存行的topic數量,因此也沒有辦法確認自己是否已經獨享了該緩存行。

如果一個CPU想修改處于S狀態的緩存行,總線事務需要將所有該緩存行topic的值變成Invalid狀態才可以,而修改E狀態的緩存不需要使用總線事務。

四、MESI在并發包中的應用

在cas原理分析中,我們講到cas底層原理使用到了總線鎖和緩存鎖,其中緩存鎖涉及到的就是MESI協議,緩存鎖加鎖條件就是緩存行處于M和E狀態下。

下面結合volatile保證內存可見性為例,闡釋下MESI的工作原理。代碼示例:

public class VolatileCanSeeTest {


    private static boolean initFlag = false;


    public static void main(String[] args) throws InterruptedException {
        new Thread(() - > {
            log.info("init begin");
            while(!initFlag) {
            }


            // if(!initFlag) {while(true){}} // JIT
            log.info("===success===");
        }).start();


        Thread.sleep(1000);


        new Thread(() - > doSomething()).start();
    }


    public static void doSomething() {
        log.info("doSomething begin");
        initFlag = true;
        log.info("doSomething end");
    }
}

圖片

  • 初始化共享變量initFlag = false。
  • 線程1通過read指令從主內存中讀取出共享變量initFlag = false,通過load指令加載到線程1的工作內存中。
  • 在線程1的工作內存中,通過use指令將共享變量initFlag = false加載到cpu執行引擎進行!initFlag運算。
  • 在線程1的工作內存中,通過assign指令將cpu執行引擎計算后的共享變量initFlag = true賦值到線程1的工作內存中。
  • 線程1通過store指令將線程1中工作內存的共享變量同步到主內存中。
  • 在線程1通過store指令將線程1中工作內存的共享變量同步到主內存中的過程中,會經過總線,觸發cpu緩存一致性協議。
  • 該協議會監聽回寫主內存的變量,然后將其他工作內存中含有該共享變量的緩存行狀態置為失效狀態,所以其他線程需要重新從主內存讀取該共享變量的最新值。
  • 以上我們分析了MESI協議中關于S共享狀態轉為I失效狀態的工作原理。

結語

上一篇我們分析了java內存模型的原理,這篇總結下cas涉及到的cpu緩存一致性協議,通過這兩篇的介紹,我們就可以更深刻的理解cas是怎么保證原子性的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19178

    瀏覽量

    229200
  • 控制器
    +關注

    關注

    112

    文章

    16214

    瀏覽量

    177479
  • 寄存器
    +關注

    關注

    31

    文章

    5325

    瀏覽量

    120052
  • 狀態機
    +關注

    關注

    2

    文章

    492

    瀏覽量

    27486
  • JAVA語言
    +關注

    關注

    0

    文章

    138

    瀏覽量

    20079
收藏 人收藏

    評論

    相關推薦

    如何解決數據庫與緩存一致性

    緩存一致性 每次逢年過節的時候搶票非常艱難,放票的時候那么多人同時去搶票,如果所有人查詢、購票等都去訪問數據庫,那數據庫的壓力得有多大,這時候很多都會引入緩存, 把車票信息放入緩存,這
    的頭像 發表于 09-25 15:25 ?1060次閱讀
    如何解決數據庫與<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    小編科普CPU緩存一致性協議MESI

    什么是緩存一致性協議MESIMESI協議中的狀態有哪幾種?
    發表于 06-17 10:00

    請教大神在Arm AMBA協議集中,什么叫緩存一致性

    請教大神在Arm AMBA協議集中,什么叫緩存一致性
    發表于 09-29 14:51

    改進的基于目錄的Cache一致性協議

    介紹幾種典型目錄一致性協議并分析它們的優缺點。在綜合全映射目錄和有限目錄優點的基礎上,通過在存儲器層上增加個存儲器高速緩存(Cache)層
    發表于 04-02 09:05 ?32次下載

    CMP中Cache一致性協議的驗證

    CMP是處理器體系結構發展的個重要方向,其中Cache一致性問題的驗證是CMP設計中的項重要課題。基于MESI一致性
    發表于 07-20 14:18 ?38次下載

    DMR空中接口協議一致性測試技術

    文章介紹了DMR的產生、發展以及DRM協議體系結構。基于協議一致性測試的基本概念,劃分了DRM協議一致性
    發表于 12-22 15:13 ?35次下載
    DMR空中接口<b class='flag-5'>協議</b><b class='flag-5'>一致性</b>測試技術

    RFID協議一致性測試系統設計(三)

      在具體實現了RFID協議一致性測試系統之后,我們將可以應用于對RFID單元的實際測試之中,本節以EPC UHF Class 1 Gen 2(也被稱為ISO 18000-6 Type C)標準的協議
    發表于 03-28 17:37 ?1284次閱讀
    RFID<b class='flag-5'>協議</b><b class='flag-5'>一致性</b>測試系統設計(三)

    Cache一致性協議優化研究

    問題的由來.總結了多核時代高速緩存一致性協議設計的關鍵問題,綜述了近年來學術界對一致性的研究.從程序訪存行為模式、目錄組織結構、一致性粒度、
    發表于 12-30 15:04 ?0次下載
    Cache<b class='flag-5'>一致性</b><b class='flag-5'>協議</b>優化研究

    自主駕駛系統將使用緩存一致性互連IP和非一致性互連IP

    代ASIL B(D)自主駕駛系統將使用符合ISO 26262標準的緩存一致性互連IP和非一致性互連IP來實現。 美國加利福尼亞州坎貝爾2019年4月26日消息—Arteris IP
    的頭像 發表于 05-09 17:13 ?3199次閱讀

    管理基于Cortex?-M7的MCU的高速緩存一致性

    本文檔概述了不同場景的高速緩存一致性問題,并就如何管理或避免高速緩存一致性問題提供了些方法建
    發表于 04-01 10:12 ?5次下載
    管理基于Cortex?-M7的MCU的高速<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    CPU緩存一致性協議MESI詳解

    CPU在摩爾定律的指導以每18個月翻番的速度在發展,然而內存和硬盤的發展速度遠遠不及CPU。這就造成了高性能能的內存和硬盤價格及其昂貴。然而CP
    的頭像 發表于 05-12 17:36 ?4315次閱讀
    <b class='flag-5'>CPU</b><b class='flag-5'>緩存</b><b class='flag-5'>一致性</b><b class='flag-5'>協議</b><b class='flag-5'>MESI</b>詳解

    CPU緩存一致性協議MESI介紹

    CPU在摩爾定律的指導以每18個月翻番的速度在發展,然而內存和硬盤的發展速度遠遠不及CPU。這就造成了高性能能的內存和硬盤價格及其昂貴。
    的頭像 發表于 06-09 10:39 ?878次閱讀
    <b class='flag-5'>CPU</b><b class='flag-5'>緩存</b><b class='flag-5'>一致性</b><b class='flag-5'>協議</b><b class='flag-5'>MESI</b><b class='flag-5'>介紹</b>

    CPU緩存一致性協議解析

    CPU運行效率高不高,定程度取決于緩存,這里就給大家分享一下CPU緩存相關的內容。
    的頭像 發表于 07-12 10:07 ?780次閱讀
    <b class='flag-5'>CPU</b><b class='flag-5'>緩存</b><b class='flag-5'>一致性</b><b class='flag-5'>協議</b>解析

    如何保證緩存一致性

    “ 本文的參考文章是2022年HOT 34上Intel Rob Blakenship關于CXL緩存一致性介紹。”
    的頭像 發表于 10-19 17:42 ?1040次閱讀
    如何保證<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>

    異構計算下緩存一致性的重要

    在眾多回復中,李博杰同學的回答被認為質量最高。他首先將緩存一致性分為兩個主要場景:是主機內CPU與設備間的一致性;二是跨主機的
    的頭像 發表于 10-24 17:00 ?327次閱讀
    異構計算下<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>的重要<b class='flag-5'>性</b>