在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

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

介紹

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

一、cpu多級(jí)緩存結(jié)構(gòu)

圖片

  • 計(jì)算機(jī)在寄存器上執(zhí)行的速度是遠(yuǎn)大于在主內(nèi)存上執(zhí)行的速度。

  • 由于計(jì)算機(jī)的存儲(chǔ)設(shè)備與處理器的運(yùn)算速度之間存在幾個(gè)數(shù)量級(jí)的差距,所以新的計(jì)算機(jī)系統(tǒng)都不得不加入一層讀寫速度都盡可能接近處理器運(yùn)算速度的高級(jí)緩存來作為內(nèi)存與處理器之間的緩沖,將運(yùn)算使用到的數(shù)據(jù)復(fù)制到緩存中,讓運(yùn)算快速執(zhí)行,當(dāng)運(yùn)算結(jié)束后,再將數(shù)據(jù)從緩存同步到內(nèi)存中,這樣處理器就無需等待緩慢的內(nèi)存讀寫了。

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

  • 多核cpu運(yùn)作原理:

    通常情況下,當(dāng)一個(gè)CPU需要讀取主存的時(shí)候,它會(huì)將主存的數(shù)據(jù)讀取到CPU緩存中,甚至?xí)⒕彺嬷械牟糠謨?nèi)容讀到它內(nèi)部的寄存器里面,然后在寄存器中執(zhí)行操作;當(dāng)CPU需要將結(jié)果回寫到主存的時(shí)候,它會(huì)將內(nèi)部寄存器的值刷新到緩存中,然后在某個(gè)時(shí)間點(diǎn)將值刷新回主存。

二、MESI協(xié)議

圖片

四種狀態(tài):

  • M:Modified(被修改)

    指的是該緩存行只被緩存在該CPU的緩存中,并且是被修改過的,因此它與主存中的數(shù)據(jù)是不一致的,該緩存行的內(nèi)存需要在未來的某個(gè)時(shí)間點(diǎn)寫回主存,這個(gè)時(shí)間點(diǎn)我們是允許其他CPU讀取主存中相應(yīng)的內(nèi)存之前,當(dāng)這里的值被寫回主存之后,該緩存行的狀態(tài)變成E。

  • E:Exclusive(獨(dú)享)

    獨(dú)享狀態(tài)的緩存行只被緩存在該CPU的緩存中,它是未被修改過的,是與主存中的數(shù)據(jù)一致的,這個(gè)狀態(tài)可以在任何時(shí)刻,當(dāng)有其他CPU讀取該內(nèi)存時(shí)變成S。同樣的,當(dāng)COU修改該緩存行的數(shù)據(jù)時(shí),該狀態(tài)可以變成M。

  • S:Shared(共享)

    共享狀態(tài)意味著,該緩存行可能被多個(gè)CPU進(jìn)行緩存,并且各個(gè)緩存中的數(shù)據(jù)與主存中的數(shù)據(jù)是一致的,當(dāng)有一個(gè)CPU修改該緩存行的時(shí)候,其他CPU中該緩存行是可以被作廢的,變成I。

  • I:Invalid(無效的)

    無效狀態(tài)代表這個(gè)緩存是無效的,可能是有其他CPU修改了該緩存行。

CPU的cache的四種操作可能產(chǎn)生不一致的狀態(tài),因此緩存控制器監(jiān)聽到本地操作和遠(yuǎn)程操作的時(shí)候,需要對(duì)地址一定的cache line做出一定的修改,從而保證數(shù)據(jù)在多個(gè)緩存之間的一致性。

四種操作:

  • local read

    代表的是讀本地緩存行中的數(shù)據(jù)。

  • local write

    代表的是將數(shù)據(jù)寫入到本地的緩存里面。

  • remote read

    代表的是將內(nèi)存中的數(shù)據(jù)讀取到本地。

  • remote write

    代表的是將數(shù)據(jù)寫回到主存中。

三、MESI工作原理

在一個(gè)典型的多核系統(tǒng)中,每一個(gè)核都會(huì)有自己的緩存來共享主存總線,每一個(gè)相應(yīng)的CPU都會(huì)發(fā)出讀寫請(qǐng)求,而緩存的目的是為了減少CPU讀寫共享主存的次數(shù)。

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

因此對(duì)于M和E,它的數(shù)據(jù)總是精確的,而S狀態(tài)可能是非一致的,如果一個(gè)緩存將處于S狀態(tài)的緩存行作廢了,另一個(gè)緩存實(shí)際上可能已經(jīng)獨(dú)享了該緩存行,但是該緩存卻不會(huì)將緩存行變更為E狀態(tài),這是因?yàn)槠渌彺娌粫?huì)廣播他們作廢掉該緩存行的通知,同樣,由于緩存并沒有保存該緩存行的topic數(shù)量,因此也沒有辦法確認(rèn)自己是否已經(jīng)獨(dú)享了該緩存行。

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

四、MESI在并發(fā)包中的應(yīng)用

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

下面結(jié)合volatile保證內(nèi)存可見性為例,闡釋下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指令從主內(nèi)存中讀取出共享變量initFlag = false,通過load指令加載到線程1的工作內(nèi)存中。
  • 在線程1的工作內(nèi)存中,通過use指令將共享變量initFlag = false加載到cpu執(zhí)行引擎進(jìn)行!initFlag運(yùn)算。
  • 在線程1的工作內(nèi)存中,通過assign指令將cpu執(zhí)行引擎計(jì)算后的共享變量initFlag = true賦值到線程1的工作內(nèi)存中。
  • 線程1通過store指令將線程1中工作內(nèi)存的共享變量同步到主內(nèi)存中。
  • 在線程1通過store指令將線程1中工作內(nèi)存的共享變量同步到主內(nèi)存中的過程中,會(huì)經(jīng)過總線,觸發(fā)cpu緩存一致性協(xié)議。
  • 該協(xié)議會(huì)監(jiān)聽回寫主內(nèi)存的變量,然后將其他工作內(nèi)存中含有該共享變量的緩存行狀態(tài)置為失效狀態(tài),所以其他線程需要重新從主內(nèi)存讀取該共享變量的最新值。
  • 以上我們分析了MESI協(xié)議中關(guān)于S共享狀態(tài)轉(zhuǎn)為I失效狀態(tài)的工作原理。

結(jié)語(yǔ)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19737

    瀏覽量

    232790
  • 控制器
    +關(guān)注

    關(guān)注

    114

    文章

    16837

    瀏覽量

    182215
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5401

    瀏覽量

    122738
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    493

    瀏覽量

    27967
  • JAVA語(yǔ)言
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    20454
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何解決數(shù)據(jù)庫(kù)與緩存一致性

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

    小編科普CPU緩存一致性協(xié)議MESI

    什么是緩存一致性協(xié)議MESI?MESI協(xié)議中的狀態(tài)有哪幾種?
    發(fā)表于 06-17 10:00

    請(qǐng)教大神在Arm AMBA協(xié)議集中,什么叫緩存一致性?

    請(qǐng)教大神在Arm AMBA協(xié)議集中,什么叫緩存一致性?
    發(fā)表于 09-29 14:51

    改進(jìn)的基于目錄的Cache一致性協(xié)議

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

    CMP中Cache一致性協(xié)議的驗(yàn)證

    CMP是處理器體系結(jié)構(gòu)發(fā)展的個(gè)重要方向,其中Cache一致性問題的驗(yàn)證是CMP設(shè)計(jì)中的項(xiàng)重要課題。基于MESI一致性
    發(fā)表于 07-20 14:18 ?38次下載

    DMR空中接口協(xié)議一致性測(cè)試技術(shù)

    文章介紹了DMR的產(chǎn)生、發(fā)展以及DRM協(xié)議體系結(jié)構(gòu)。基于協(xié)議一致性測(cè)試的基本概念,劃分了DRM協(xié)議一致性
    發(fā)表于 12-22 15:13 ?35次下載
    DMR空中接口<b class='flag-5'>協(xié)議</b><b class='flag-5'>一致性</b>測(cè)試技術(shù)

    RFID協(xié)議一致性測(cè)試系統(tǒng)設(shè)計(jì)(三)

      在具體實(shí)現(xiàn)了RFID協(xié)議一致性測(cè)試系統(tǒng)之后,我們將可以應(yīng)用于對(duì)RFID單元的實(shí)際測(cè)試之中,本節(jié)以EPC UHF Class 1 Gen 2(也被稱為ISO 18000-6 Type C)標(biāo)準(zhǔn)的協(xié)議
    發(fā)表于 03-28 17:37 ?1378次閱讀
    RFID<b class='flag-5'>協(xié)議</b><b class='flag-5'>一致性</b>測(cè)試系統(tǒng)設(shè)計(jì)(三)

    Cache一致性協(xié)議優(yōu)化研究

    問題的由來.總結(jié)了多核時(shí)代高速緩存一致性協(xié)議設(shè)計(jì)的關(guān)鍵問題,綜述了近年來學(xué)術(shù)界對(duì)一致性的研究.從程序訪存行為模式、目錄組織結(jié)構(gòu)、一致性粒度、
    發(fā)表于 12-30 15:04 ?0次下載
    Cache<b class='flag-5'>一致性</b><b class='flag-5'>協(xié)議</b>優(yōu)化研究

    自主駕駛系統(tǒng)將使用緩存一致性互連IP和非一致性互連IP

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

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

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

    CPU緩存一致性協(xié)議MESI詳解

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

    CPU緩存一致性協(xié)議MESI介紹

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

    CPU緩存一致性協(xié)議解析

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

    如何保證緩存一致性

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

    異構(gòu)計(jì)算下緩存一致性的重要

    在眾多回復(fù)中,李博杰同學(xué)的回答被認(rèn)為質(zhì)量最高。他首先將緩存一致性分為兩個(gè)主要場(chǎng)景:是主機(jī)內(nèi)CPU與設(shè)備間的一致性;二是跨主機(jī)的
    的頭像 發(fā)表于 10-24 17:00 ?1264次閱讀
    異構(gòu)計(jì)算下<b class='flag-5'>緩存</b><b class='flag-5'>一致性</b>的重要<b class='flag-5'>性</b>
    主站蜘蛛池模板: 精品亚洲午夜久久久久 | 久久国产香蕉一区精品 | 日本高清视频色www在线观看 | 丁香狠狠色婷婷久久综合 | 在线天堂中文字幕 | 中文日产国产精品久久 | 国产精品777| h视频在线看 | 特级毛片网站 | 欧美 变态 另类 人妖班 | 丁香五月网久久综合 | av网址在线看 | 国产欧美日韩视频免费61794 | 日本免费一区二区老鸭窝 | 五月天丁香婷婷综合 | 日本不卡免费一区 | www.91大神| 欧美zooz人禽交免费观看 | 国产色秀视频在线观看 | 四虎在线成人免费网站 | 人成网站在线观看 | 国产中出视频 | 四虎影院2022 | 成人国产精品2021 | 中文字幕不卡一区 | 欧美一级艳片视频免费观看 | 日产精品卡二卡三卡四卡乱码视频 | 国产亚洲精品仙踪林在线播放 | 美女网站视频一区 | 日日干夜夜操s8 | 天天摸天天干天天操 | 国产午夜在线观看视频播放 | www在线视频在线播放 | 国产小视频在线高清播放 | 黄色毛片网| 欧美性猛交xxxx乱大交中文 | 午夜福利123 | 猛操网 | 日本中文在线三级在线播放 | 性色在线观看 | 亚洲成熟|