监听式协议******:

思想:

每个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; 一…