計算機系統結構-第5章-監聽式協議

監聽式協議******:

思想:

每個Cache除了包含物理存儲器中塊的數據拷貝之外,也保存著各個塊的共享狀態信息。

Cache通常連在共享存儲器的總線上,當某個Cache需要訪問存儲器時,它會把請求放到總線上廣播出去,其他各個Cache控制器通過監聽總線(它們一直在監聽)來判斷它們是否有總線上請求的數據塊。如果有,就進行相應的操作。

3個關鍵:

1:處理器之間通過一個可以實現廣播的互連機制相連 (鏈接)

2:當一個處理器的Cache響應本地CPU的訪問時,如果它涉及全局操作,其Cache控制器就要在獲得總線的控制權后,在總線上發出相應的消息(發送者)

3:所有處理器都一直在監聽總線,它們檢測總線上的地址在它們的Cache中是否有副本。若有,則響應該消息,并進行相應的操作 。(接受者)

寫操作的串行化:由總線實現(獲取總線控制權的順序性)

發送到總線的信息:1-讀不命中 ;2-寫不命中

這個時候需要通過總線找到相應的數據塊的最新版本,然后調入本地的cache

(cache的種類:
寫直達Cache:因為所有寫入的數據都同時被寫回主存,所以從主存中總可以取到其最新值。

寫回Cache:得到數據的最新值會困難一些,因為最新值可能在某個Cache中,也可能在主存中。

我們就考慮難的!(簡單的也不出題)

有時候,還有多出來一個發送的消息:Invalidate消息,用來通知其他各處理器作廢其Cache中相應的副本。

(這個和WriteMiss是有區別的,WriteMiss是寫不命中,然后回去調取對應的塊,但是這個無效化不會)

下面我們先確定好一些概念:

概念;

Cache的標識(tag)可直接用來實現監聽。

作廢一個塊只需將其有效位置為無效

每個Cache塊增設一個共享位:為“1”:多個處理器所共享,為“0”:某個處理器所獨占

塊的擁有者:擁有該數據塊的唯一副本的處理器。

每個節點內部會有一個有限狀態的控制器;
無效(簡稱I):Cache中該塊的內容為無效。

共享(簡稱S):該塊可能處于共享狀態。(要求共享的塊的內容都要相同)

已修改(簡稱M):該塊已經被修改過,并且還沒寫入存儲器。(要確保這個獨占全系統唯一

所以我們現在來總體的考慮具體的情況*******;


I:請求來自處理器:(發送)

處理器可能會:讀命中,讀不命中,寫命中,寫不命中,

但是最后發出去的消息只可能是:讀寫不命中和Invalidate

cache可能是IMS,三個狀態之一

(注意這里都是針對的塊)

1:什么時候讀命中

要不cache對應的塊是S要不就是M,如果是I的話就是讀不命中了

(表格,狀態機,圖例如下)

2:什么時候讀不命中

我們的cache塊是失效I的,我們需要把讀不命中放在總線去

我們的cache塊雖然是S,但是地址不對,我們也需要把讀不命中放在總線

我們的cache塊雖然是M,但是地址不對,我要先寫回這個塊,然后再去把讀不命中放總線

對于第一種情況,讀入的就是共享的數據了(不管是來自其他的cache還是存儲器),所以I->S,這里的S強調一致性,cache和存儲的一致性

第二種得到數據后也是share,只是對應的地址塊不同了

第三種會把M->S,然后回顯寫回塊,然后再去替換

3:什么時候寫命中?

如果是I,那就是寫不命中了,因為這個數據塊無效的,不會發生寫命中

如果是S,將其修改為M,然后發出I消息,作廢這個塊上的其他版本(命中==地址是對的)

如果是M,我們會把自然的寫入數據(不會寫回存儲器,因為最新版本都在他自己身上)

4:什么時候寫不命中?

如果我們對應的塊是I,可能是不命中了,發出寫不命中的消息,嘗試讓別人提供給他目標的塊,然后去寫入

如果對應的塊是S,但是不是對應的地址,把寫不命中放在總線上,嘗試讓別人去提供目標塊,然后去寫入對應的位置

如果對應的塊是M,但是地址不對應,就會先寫回這里的地址,然后把寫不命中發出,讓別人給他這個目標快,然后去寫入

(在這可以思考下,如果是S的其他處理器收到了對應塊位置的寫不命中消息,會干甚?是不是地址不對了,對應記錄的數據就無效了?讓我們接下來看看)

II:請求來自總線(接收)

總線會發來:兩個不命中和Invalidate3個信息

我們的caceh狀態可能是IMS3個中的一個

1:收到讀不命中怎么辦?

先想想什么時候別人的cache會發送讀不命中,是不是IMS都有可能!

想想什么時候我們的cache會收到影響?什么時候我們會去響應這個信號!!我們有對應的數據(SM),嘗試去共享!!!

如果我們是I或者是和我們的地址不對應,肯定不會響應的,因為我干不了什么事情

如果我們是匹配的S,我們就是不是可能嘗試去共享這個數據給發送者(也可能對方更快的找到了存儲器,因為數據是一致的)!!!

如果我們是匹配的M,我們是不是也會嘗試去共享,但是注意!!!!!!共享之后我們的狀態還是獨占嗎?不是了,所以要先寫回數據,并且中止他對存儲器的訪問,因為存儲器的數據錯誤!!!!!然后去共享數據,把M->S

2 :? 什么時候會收到寫不命中??

首先,對方寫不命中,之后肯定會寫入到cache中,并做一個獨占是吧,所以為什么我們會響應這個寫不命中尼?是不是就是要去寫的就是我們現在擁有的那個,所以我們可能是SM

首先,可能是地址匹配我才會去管是吧,然后如果本來就是I就不用管,其他的S,M都要變成I

(但是由于設計的原因,發送方需要把數據得到后再去寫入,所以這里的S可以嘗試共享,M就要同時提供給發送發和存儲器)

為什么要這么設計???

因為我們的cache里面是存的是cache塊,里面不是一個數據,是一堆數據,只是里面的部分數據修改了,所以不能夠發送方直接拿著自己的塊就開始寫,顯然是不對的,所以需要拿到整個塊(包括修改部分的相鄰數據),然后再去寫里面對應的地方

3:什么時候會收到失效?

肯定是有處理器嘗試去寫入共享塊,才會發出一個信息讓共享塊失效,所以我們回一下,是不是只有寫命中的S會發出這個信號!!!!(寫命中的M不會發出,反正都是他自己獨占)

那么對應的,會收到影響的是不是也就只是對應地址的S狀態!!!!

(M收不到,因為如果一個塊唄獨占了,外面不會發生命中)

好了,這樣的話,我們就算是梳理完成了

整理一下

相應(接收)請求的狀態機

(開始回憶,什么時候收到失效?我們做出了什么狀態的變化?什么時候收到讀不命中?我們會做出什么變化?什么時候回收到寫不命中?我們的那些狀態改變了?中間我們做了哪些事情?)

發出請求的時候的狀態機:
(我們有哪4種情況?會發出哪3個消息,每個不同的情況我們會做什么?什么時候讀命中?針對我們自己那些狀態會改變?什么時候讀不命中?我們的那些狀態會改變?什么時候回寫命中?我們的那些狀態會改變?什么時候寫不命中?我們的狀態會發生什么改變?

發生替換時:

如果發生替換的話:

總結一下問題:

1:并發問題,因為這個都是假定的每個操作具有原子性,但是實際不是的,可能會有死鎖,競爭,可以通過發送Invalidate的cpu占用總線來解決

2:一個塊一開始不在cache中,讀取的時候會變成share(他是唯一的緩存副本,但是還是會按照多個版本的去處理)

進一步的優化:加入一個狀態表示數據是干凈的 or owned

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/85680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85680.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(c++)string的模擬實現

目錄 1.構造函數 2.析構函數 3.擴容 1.reserve(擴容不初始化) 2.resize(擴容加初始化) 4.push_back 5.append 6. 運算符重載 1.一個字符 2.一個字符串 7 []運算符重載 8.find 1.找一個字符 2.找一個字符串 9.insert 1.插入一個字符 2.插入一個字符串 9.erase 10…

學習筆記(24): 機器學習之數據預處理Pandas和轉換成張量格式[2]

學習筆記(24): 機器學習之數據預處理Pandas和轉換成張量格式[2] 學習機器學習,需要學習如何預處理原始數據,這里用到pandas,將原始數據轉換為張量格式的數據。 學習筆記(23): 機器學習之數據預處理Pandas和轉換成張量格式[1]-CSDN博客 下面…

LeetCode 2297. 跳躍游戲 VIII(中等)

題目描述 給定一個長度為 n 的下標從 0 開始的整數數組 nums。初始位置為下標 0。當 i < j 時&#xff0c;你可以從下標 i 跳轉到下標 j: 對于在 i < k < j 范圍內的所有下標 k 有 nums[i] < nums[j] 和 nums[k] < nums[i] , 或者對于在 i < k < j 范圍…

【前端】緩存相關

本知識頁參考&#xff1a;https://zhuanlan.zhihu.com/p/586060532 1. 概述 1.1 應用場景 靜態資源 場景&#xff1a;圖片、CSS、JS 文件等靜態資源實現&#xff1a;使用 HTTP 緩存控制頭&#xff0c;或者利用 CDN 進行邊緣緩存 數據緩存 場景&#xff1a;請求的返回結果實現…

獵板硬金鍍層厚度:高頻通信領域的性能分水嶺

在 5G 基站、毫米波雷達等高頻場景中&#xff0c;硬金鍍層厚度的選擇直接決定了 PCB 的信號完整性與長期可靠性。獵板硬金工藝&#xff1a; 1.8μm 金層搭配羅杰斯 4350B 基材的解決方案&#xff0c;在 10GHz 頻段實現插入損耗&#xff1c;0.15dB/cm&#xff0c;較常規工藝降低…

第35次CCF計算機軟件能力認證-5-木板切割

原題鏈接&#xff1a; TUOJ 我自己寫的35分正確但嚴重超時的代碼 #include <bits/stdc.h> using namespace std; int main() {int n, m, k;cin >> n >> m >> k;vector<unordered_map<int, int>> mp(2);int y;for (int i 1; i < n; …

【藍橋杯】包子湊數

包子湊數 題目描述 小明幾乎每天早晨都會在一家包子鋪吃早餐。他發現這家包子鋪有 NN 種蒸籠&#xff0c;其中第 ii 種蒸籠恰好能放 AiAi? 個包子。每種蒸籠都有非常多籠&#xff0c;可以認為是無限籠。 每當有顧客想買 XX 個包子&#xff0c;賣包子的大叔就會迅速選出若干…

pikachu通關教程-目錄遍歷漏洞(../../)

目錄遍歷漏洞也可以叫做信息泄露漏洞、非授權文件包含漏洞等. 原理:目錄遍歷漏洞的原理比較簡單&#xff0c;就是程序在實現上沒有充分過濾用戶輸入的../之類的目錄跳轉符&#xff0c;導致惡意用戶可以通過提交目錄跳轉來遍歷服務器上的任意文件。 這里的目錄跳轉符可以是../…

[概率論基本概念4]什么是無偏估計

關鍵詞&#xff1a;Unbiased Estimation 一、說明 對于無偏和有偏估計&#xff0c;需要了解其敘事背景&#xff0c;是指整體和抽樣的關系&#xff0c;也就是說整體的敘事是從理論角度的&#xff0c;而估計器原理是從實踐角度說事&#xff1b;為了表明概率理論&#xff08;不可…

面試題——計算機網絡:HTTP和HTTPS的區別?

HTTP&#xff08;HyperText Transfer Protocol&#xff09;&#xff1a;作為互聯網上應用最廣泛的網絡通信協議&#xff0c;HTTP是基于TCP/IP協議族的應用層協議。它采用標準的請求-響應模式進行通信&#xff0c;通過簡潔的報文格式&#xff08;包含請求行、請求頭、請求體等&a…

uni-app學習筆記十九--pages.json全局樣式globalStyle設置

pages.json 頁面路由 pages.json 文件用來對 uni-app 進行全局配置&#xff0c;決定頁面文件的路徑、窗口樣式、原生的導航欄、底部的原生tabbar 等。 導航欄高度為 44px (不含狀態欄)&#xff0c;tabBar 高度為 50px (不含安全區)。 它類似微信小程序中app.json的頁面管理部…

SQL思路解析:窗口滑動的應用

目錄 &#x1f3af; 問題目標 第一步&#xff1a;從數據中我們能直接得到什么&#xff1f; 第二步&#xff1a;我們想要的“7天窗口”長什么樣&#xff1f; 第三步&#xff1a;SQL 怎么表達“某一天的前六天”&#xff1f; &#x1f50d;JOIN 比窗口函數更靈活 第四步&am…

解決MyBatis參數綁定中參數名不一致導致的錯誤問題

前言 作為一名Java開發者&#xff0c;我在實際項目中曾多次遇到MyBatis參數綁定的問題。其中最常見的一種情況是&#xff1a;在Mapper接口中定義的參數名與XML映射文件中的占位符名稱不一致&#xff0c;導致運行時拋出Parameter xxx not found類異常。這類問題看似簡單&#x…

黑馬程序員TypeScript課程筆記—類型兼容性篇

類型兼容性的說明 因為傳入的時候只有一個參數 對象之間的類型兼容性 接口之間的類型兼容性 函數之間的類型兼容性&#xff08;函數參數個數&#xff09; 和對象的兼容性正好相反 函數之間的類型兼容性&#xff08;函數參數類型&#xff09; 函數參數的兼容性就不要從接口角度…

智能電視的操作系統可能具備哪些優勢

豐富的應用資源&#xff1a; 操作系統內置了應用商店&#xff0c;提供了豐富的應用資源&#xff0c;涵蓋視頻、游戲、教育等多個領域&#xff0c;滿足不同用戶的多樣化需求。用戶可以輕松下載并安裝所需的應用&#xff0c;享受更多元化的娛樂和學習體驗。 流暢的操作體驗&…

Xget 正式發布:您的高性能、安全下載加速工具!

您可以通過 star 我固定的 GitHub 存儲庫來支持我&#xff0c;謝謝&#xff01;以下是我的一些 GitHub 存儲庫&#xff0c;很有可能對您有用&#xff1a; tzst Xget Prompt Library 原文 URL&#xff1a;https://blog.xi-xu.me/2025/06/02/xget-launch-high-performance-sec…

精美的軟件下載頁面HTML源碼:現代UI與動畫效果的完美結合

精美的軟件下載頁面HTML源碼&#xff1a;現代UI與動畫效果的完美結合 在數字化產品推廣中&#xff0c;一個設計精良的下載頁面不僅能提升品牌專業度&#xff0c;還能顯著提高用戶轉化率。本文介紹的精美軟件下載頁面HTML源碼&#xff0c;通過現代化UI設計與豐富的動畫效果&…

麒麟v10+信創x86處理器離線搭建k8s集群完整過程

前言 最近為某客戶搭建內網的信創環境下的x8s集群&#xff0c;走了一些彎路&#xff0c;客戶提供的環境完全與互聯網分離&#xff0c;通過yum、apt這些直接拉依賴就別想了&#xff0c;用的操作系統和cpu都是國產版本&#xff0c;好在仍然是x86的&#xff0c;不是其他架構&…

Pycharm的使用技巧總結

目錄 一、高效便捷的快捷鍵 二、界面漢化處理 1.設置 2.插件 3.漢化插件安裝 三、修改字體大小、顏色 1.選擇文件-設置 2.選擇編輯器-配色方案-python 3.修改注釋行顏色 4.修改編輯器字體顏色 一、高效便捷的快捷鍵 序號快捷鍵功能場景效果1Ctrl /快速注釋/取消注釋…

安全編碼規范與標準:對比與分析及應用案例

在軟件開發領域&#xff0c;尤其是涉及安全關鍵系統的開發中&#xff0c;遵循編碼規范和標準是確保軟件質量和安全性的重要手段。除了CERT C、CERT Java和MISRA外&#xff0c;還有其他多個與安全相關的編碼規范和標準&#xff0c;以下是一些主要標準的對比說明&#xff1a; 一…