<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 緩存行狀態 CPU的緩存是以緩存行(cache line)為單位的,MESI協議描述了多核處理器中一個緩存行的狀態。在MESI協議中,每個緩存行有4個狀態,分別是: * M(修改,Modified):本地處理器已經修改緩存行,即是臟行,它的內容與內存中的內容不一樣,并且此 cache 只有本地一個拷貝(專有); * E(專有,Exclusive):緩存行內容和內存中的一樣,而且其它處理器都沒有這行數據; * S(共享,Shared):緩存行內容和內存中的一樣, 有可能其它處理器也存在此緩存行的拷貝; * I(無效,Invalid):緩存行失效, 不能使用 緩存行的E狀態如下圖: ![](https://img.kancloud.cn/5b/bb/5bbb97822358150c4bd58392f03a5253_600x419.png) 此時只有core1訪問緩存行,它的緩存行的狀態為E,表示core1獨占。 緩存行的S狀態如下圖: ![](https://img.kancloud.cn/88/0b/880b71d6667b84a9cf6c7272da921bd4_614x421.png) 此時core1和core2都會訪問緩存行,他們的緩存行狀態為S,表示緩存行處于共享狀態 緩存行的M和I狀態如下圖: ![](https://img.kancloud.cn/35/ec/35ec0d4b5ff80e5e60349d59135c133b_606x412.png) 此時core1修改了緩存行,因此core1的緩存行狀態為M,代表已經修改,而core2的緩存行狀態為I,代表已經失效,需要從主存中讀取 ### 緩存行狀態轉換 在MESI協議中,每個Cache的Cache控制器不僅知道自己的讀寫操作,而且也監聽(snoop)其它Cache的讀寫操作。每個Cache line所處的狀態根據本核和其它核的讀寫操作在4個狀態間進行遷移。MESI協議狀態遷移圖如下: ![](https://img.kancloud.cn/c0/4e/c04e761e36c94ccba002c12c0c38d54d_375x256.png) * 初始:一開始時,緩存行沒有加載任何數據,所以它處于 I 狀態。 * 本地寫(Local Write):如果本地處理器寫數據至處于 I 狀態的緩存行,則緩存行的狀態變成 M。 * 本地讀(Local Read):如果本地處理器讀取處于 I 狀態的緩存行,很明顯此緩存沒有數據給它。此時分兩種情況:(1)其它處理器的緩存里也沒有此行數據,則從內存加載數據到此緩存行后,再將它設成 E 狀態,表示只有我一家有這條數據,其它處理器都沒有;(2)其它處理器的緩存有此行數據,則將此緩存行的狀態設為 S 狀態。(備注:如果處于M狀態的緩存行,再由本地處理器寫入/讀出,狀態是不會改變的) * 遠程讀(Remote Read):假設我們有兩個處理器 c1 和 c2,如果 c2 需要讀另外一個處理器 c1 的緩存行內容,c1 需要把它緩存行的內容通過內存控制器 (Memory Controller) 發送給 c2,c2 接到后將相應的緩存行狀態設為 S。在設置之前,內存也得從總線上得到這份數據并保存。 * 遠程寫(Remote Write):其實確切地說不是遠程寫,而是 c2 得到 c1 的數據后,不是為了讀,而是為了寫。也算是本地寫,只是 c1 也擁有這份數據的拷貝,這該怎么辦呢?c2 將發出一個 RFO (Request For Owner) 請求,它需要擁有這行數據的權限,其它處理器的相應緩存行設為 I,除了它自已,誰不能動這行數據。這保證了數據的安全,同時處理 RFO 請求以及設置I的過程將給寫操作帶來很大的性能消耗
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看