HNU计算机体系结构-实验3:多cache一致性算法
文章目录
- 实验3 多cache一致性算法
- 一、实验目的
- 二、实验说明
- 三 实验内容
- 1、cache一致性算法-监听法模拟
- 2、cache一致性算法-目录法模拟
- 四、思考题
- 五、实验总结
实验3 多cache一致性算法
一、实验目的
熟悉cache一致性模拟器(监听法和目录法)的使用,并且理解监听法和目录法的基本思想,加深对多cache一致性的理解。
做到给出指定的读写序列,可以模拟出读写过程中发生的替换、换出等操作,同时模拟出cache块的无效、共享和独占态的相互切换。
二、实验说明
学习cache一致性监听法和目录法,并且进行一致性算法的模拟实验,同时熟悉相关知识。
三 实验内容
1、cache一致性算法-监听法模拟
1) 利用监听法模拟器进行下述操作,并填写下表
以下 I 表示无效, S表示共享, E表示独占。模拟器采用不优化设置.
所进行的访问 | 是否发生了替换? | 是否发生了写回? | 监听协议进行的操作与块状态改变 |
---|---|---|---|
CPU A 读第5块 | 替换 Cache A的块1 | 否 | CPU A读不命中, Cache A发出BusRd信号, 存储器第5块经Bus传送到Cache A第1块, Cache A第1块状态从I变成S |
CPU B 读第5块 | 替换Cache B的块1 | 否 | CPU B读不命中, Cache B发出BusRd信号, 存储器第5块经Bus传送到Cache B第1块, Cache B第1块状态从I变成S |
CPU C 读第5块 | 替换Cache C的块1 | 否 | CPU C读不命中, Cache C发出BusRd信号, 存储器第5块经Bus传送到Cache C第1块, Cache C第1块状态从I变成S |
CPU B 写第5块 | 否 | 否 | CPU B写命中, Cache B向Bus发出写作废信号, Cache A第1块和Cache C第1块状态都从S变成I, Cache B第1块状态从S变成E |
CPU D 读第5块 | 替换 Cache D的块1 | Cache B的块1写回 | CPU D读不命中, Cache D发出BusRd信号, Cache B监听到后把它的第1块写回到存储器第5块, 然后状态从E变成I。之后该块又从存储器传送到Cache D第1块, 状态设为E |
CPU B 写第21块 | 替换CacheB 的块1 | 否 | CPU B写不命中, Cache B发出BusRdx信号, 存储器第21块经Bus传送到Cache B第1块, 将原本的第1块替换出去, 状态设为E |
CPU A 写第23块 | 替换CacheA的块3 | 否 | CPU A读不命中, Cache A发出BusRdx信号, 存储器第23块经Bus传送到Cache A第3块, 状态设为E |
CPU C 写第23块 | 替换CacheC的块3 | CacheA的块3写回 | CPU C写不命中, Cache C发出BusRdx信号, Cache A监听到该信号, 将其第3块写回到存储器第23块, 同时Cache A中该块状态改为I。之后存储器第23块传送到Cache C第3块, 状态设为E |
CPU B 读第29块 | 替换CacheB的块1 | CacheB的块1写回 | CPU B读不命中, Cache B发出BusRd信号, 存储器第29块经Bus传送到Cache B第1块, 将原来的块替换出去, 将状态设为S |
CPU B 写第5块 | 替换CacheB的块1 | 否 | CPU B写不命中, Cache B发出BusRdx信号, Cache D监听到该信号后将其第1块作废, 存储器第5块传送到Cache B第1块, 替换原来的块, 状态设为E |
2) 请截图,展示执行完以上操作后整个cache系统的状态
监听法的基本原理是,每个处理器核心的缓存都可以监视(监听)其他核心对共享数据的读写操作。当一个处理器核心对共享数据进行写入时,它会发送一个写入操作的通知(invalidate、update等)给其他核心的缓存,告知它们更新或无效化相应的缓存行。其他核心的缓存会在收到通知后,根据通知的类型进行相应的操作。
以下是监听法模拟的基本步骤:
- 每个处理器核心的缓存行都包含一个有效位(valid bit)用于表示缓存行是否有效,以及一个标签(tag)用于唯一标识该缓存行所存储的内存地址。
- 当一个处理器核心对共享数据进行写入操作时,它首先检查自己的缓存中是否存在该数据的缓存行。如果存在,它将更新缓存行中的数据,并将该缓存行标记为“已修改(modified)”。
- 同时,该核心会发送一个写入操作的通知给其他核心的缓存,通知它们该缓存行已经被修改。这个通知可以是无效化(invalidate)操作或更新(update)操作,具体的实现方式取决于具体的监听法协议。
- 其他核心的缓存在接收到通知后,根据通知的类型进行相应的操作:
- 如果接收到无效化操作,则将自己的缓存行标记为无效(invalid),以后再访问该数据时需要从主内存或其他核心的缓存中重新获取。
- 如果接收到更新操作,则将自己的缓存行中的数据更新为最新的数据。
- 当一个处理器核心需要读取共享数据时,它首先检查自己的缓存中是否存在有效的缓存行。如果存在有效的缓存行,则直接读取缓存中的数据。如果缓存行无效,则需要从主内存或其他核心的缓存中获取最新的数据。
通过监听法模拟,每个核心都能感知到其他核心对共享数据的操作,并及时进行相应的缓存行更新或无效化,从而保持多核系统中缓存中的数据一致性。这种方式能够有效解决多核处理器中共享数据的一致性问题,提高系统的可靠性和性能。
2、cache一致性算法-目录法模拟
1)利用目录法模拟器进行下述操作,并填写下表
所进行的访问 | 监听协议进行的操作与块状态改变 |
---|---|
CPU A 读第6块 | Cache A读不命中 从本地存储器中传送第6块到Cache A第2块, Cache A该块状态设为S, 存储器中第6块状态也设为S, 将对应A的presence bit置1 |
CPU B 读第6块 | Cache B读不命中, 通过互联网络从宿主存储器中传送第6块到Cache B第2块, Cache B该块状态设为S, 存储器中将对应B的presence bit置1 |
CPU D 读第6块 | Cache D读不命中, 通过互联网络从宿主存储器中传送第6块到Cache D第2块, Cache D该块状态设为S, 存储器中将对应D的presence bit置1 |
CPU B 写第6块 | Cache B写命中, 向宿主存储器发送写命中信号, 宿主存储器向A, D发送作废信号, 将第6块的A, D对应的presence bit复位, 将块状态设为E。 Cache B写第2块, 将块状态设为E |
CPU C 读第6块 | Cache C读不命中, 向宿主存储器发送读缺失信号, 宿主存储器向Cache B发送Fetch信号, Cache B将其第2块状态设为S, 向宿主存储器写回该块。宿主存储器收到该块后将状态设为S, 将C对应的presence bit置1, 将该块传送给Cache C, Cache C将该块状态设为S |
CPU D 写第20块 | Cache D写不命中, Memory C通过互联网络从宿主存储器中传送第20块到Cache D第0块, Cache D该块状态设为E, 存储器中将对应D的presence bit置1, 块状态设为E |
CPU A 写第20块 | Cache A写不命中, 向宿主存储器中发送Write miss, 宿主存储器向Cache D发送Fectch信号, Cache D将其第0块写回宿主存储器, 将块状态设为I。 存储器中将对应D的presence bit复位, 将A对应的presence bit置1, 块状态设为E, 将该块传送给Cache A。 Cache A中该块状态设为E |
CPU D 写第6块 | Cache D写不命中, 向宿主存储器发送Write miss, 宿主存储器向Cache D传送该块, 将对应B, C的presence bit复位, 将D对应的presence bit置1, 块状态设为E, 向Cache B, C发出作废信号。Cache D中该块状态设为E。 Cache B, C均将该块状态设为I |
CPU A 读第12块 | Cache A读不命中, 第12块要替换出Cache A中的第0块, 先将原本的第0块写回到宿主存储器第20块, 存储器中第20块状态变成未缓冲。宿主存储器将第12块的状态设为S, 将A对应的presence bit置1, 将该块传送给Cache A。 然后换入, 块状态设为S |
2)请截图,展示执行完以上操作后整个cache系统的状态
目录法的基本原理是,每个缓存块都有一个对应的目录项。目录项中记录了该缓存块在哪些核心的缓存中被缓存,以及该缓存块的共享状态。
以下是目录法模拟的基本步骤:
- 每个处理器核心的缓存块都包含一个有效位(valid bit)用于表示缓存块是否有效,以及一个标签(tag)用于唯一标识该缓存块所存储的内存地址。
- 每个缓存块的目录项记录了哪些核心的缓存中包含该缓存块的副本,并记录了每个核心对该缓存块的共享状态,例如“独占(exclusive)”、“共享(shared)”、“无效(invalid)”等。
- 当一个处理器核心需要读取共享数据时,它首先检查自己的缓存中是否存在该数据的缓存块。如果存在有效的缓存块,它会从该缓存块中读取数据。如果缓存块无效,则需要从主内存或其他核心的缓存中获取最新的数据。
- 当一个处理器核心对共享数据进行写入操作时,它首先检查自己的缓存中是否存在该数据的缓存块。如果存在有效的缓存块,并且该缓存块的共享状态为“独占”,表示该核心是唯一一个拥有该数据副本的核心,那么该核心可以直接在缓存块中更新数据。
- 如果存在有效的缓存块,但其共享状态为“共享”,表示其他核心也拥有该数据的副本,那么该核心需要向目录发送一个请求,请求将该缓存块的共享状态变为“独占”。同时,目录会向其他包含该数据副本的核心发送无效化操作,让它们将缓存块标记为无效。
- 当其他核心的缓存接收到无效化操作时,它们将对应的缓存块标记为无效。如果其他核心的缓存块在之后的访问中需要读取或写入该数据,它们需要从主内存或其他核心的缓存中重新获取最新的数据。
通过目录法的模拟,每个核心都可以通过目录来获取共享数据的最新状态,同时协调共享数据的访问。目录维护了所有共享数据的副本信息和共享状态,通过协调缓存之间的通信和状态转换,确保多核处理器系统中缓存的一致性。
四、思考题
目录法和监听法分别是集中式和基于总线,两者优劣是什么?
答:
监听法
-
优点:核数较少时,总线压力较小,成本低,效果好.
-
缺点:需要通过总线广播一致性相关信息. 总线上能够连接的处理器数目有限。当核数增多时,总线冲突增加, 监听带宽成为瓶颈
目录法
-
优点:使用集中目录来记录每个cache块的状态,不需要总线广播一致性信息, 总线压力小。
-
缺点:需要维护目录数据结构, 随着核数增加时目录的开销变大。
五、实验总结
在我进行对cache一致性模拟器的实验过程中,我深入研究了监听法和目录法这两种常见的cache一致性协议。通过实际的模拟器操作,我对这两种协议的原理和工作机制有了更深入的理解。
首先,我发现监听法是一种基于总线的cache一致性协议。在这个协议中,所有的缓存控制器都通过总线来监听其他缓存控制器的操作。当一个缓存控制器修改了共享数据时,它会通过总线发送一个信号,让其他缓存控制器将对应的缓存行置为无效。这样,其他缓存控制器在需要访问这个缓存行时,就会重新从内存中读取最新的数据,保证了数据的一致性。通过实验,我清晰地观察到了监听法的特点:简单、易于实现,但是总线的带宽成为性能瓶颈,并且在大规模系统中会导致严重的总线竞争问题。
其次,我研究了目录法,这是一种基于目录的cache一致性协议。在这个协议中,每个缓存控制器都维护了一个目录表,用于记录共享数据的状态和位置。当一个缓存控制器修改了共享数据时,它会向目录表发送一个更新请求,将对应的缓存行置为无效或者共享状态。其他缓存控制器在需要访问这个缓存行时,需要先向目录表发出请求,获取该数据的状态和位置信息,然后根据相应的状态进行操作。通过实验,我发现目录法相对于监听法来说,减轻了总线的压力,提高了并发度和扩展性。然而,目录的维护和更新会带来一定的开销,特别是在多处理器系统中。
其他缓存控制器在需要访问这个缓存行时,需要先向目录表发出请求,获取该数据的状态和位置信息,然后根据相应的状态进行操作。通过实验,我发现目录法相对于监听法来说,减轻了总线的压力,提高了并发度和扩展性。然而,目录的维护和更新会带来一定的开销,特别是在多处理器系统中。
通过这次实验,我不仅对cache一致性的概念和原理有了更深入的理解,还通过实际模拟操作加深了对监听法和目录法的理解。我认识到在设计和选择cache一致性协议时,需要综合考虑系统规模、性能需求、开销以及硬件限制等方面的因素。不同的协议适用于不同的场景,了解它们的特点和优缺点有助于我们做出合适的选择。同时,我也意识到cache一致性对于多处理器系统的正确性和性能具有重要影响,因此在实际应用中需要仔细权衡
相关文章:

HNU计算机体系结构-实验3:多cache一致性算法
文章目录 实验3 多cache一致性算法一、实验目的二、实验说明三 实验内容1、cache一致性算法-监听法模拟2、cache一致性算法-目录法模拟 四、思考题五、实验总结 实验3 多cache一致性算法 一、实验目的 熟悉cache一致性模拟器(监听法和目录法)的使用&am…...

Go语言学习路线规划
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

微软NativeApi-NtQuerySystemInformation
微软有一个比较实用的Native接口:NtQuerySystemInformation,具体可以参考微软msdn官方文档:NtQuerySystemInformation, 是一个系统函数,用于收集特定于所提供的指定种类的系统信息。ProcessHacker等工具使用NtQuerySys…...

灵活与高效的结合,CodeMeter Cloud Lite轻云锁解决方案
众多软件开发商日渐认识到,威步推出的一系列尖端软件产品在维护知识产权、精确控制及有效管理软件授权方面发挥着不可或缺的作用。这些产品的核心功能包括将许可证及其他关键敏感数据安全地存储于高端复杂的硬件设备、经过专业加密的文件,或者置于受严格…...
Flink 系列文章汇总索引
Flink 系列文章 一、Flink 专栏 本专栏系统介绍某一知识点,并辅以具体的示例进行说明。 本专栏的文章编号可能不是顺序的,主要是因为写的时候顺序没统一,但相关的文章又引入了,所以后面就没有调整了,按照写文章的顺…...

计算机网络——期末考试复习资料
什么是计算机网络 将地理位置不同的具有独立功能的多台计算机及其外部设备通过通信线路和通信设备连接起来;实现资源共享和数据传递的计算机的系统。 三种交换方式 报文交换:路由器转发报文; 电路交换:建立一对一电路 分组交换&a…...

【数据结构】面试OJ题——链表
目录 1.移除链表元素 思路: 2.反转链表 思路: 3.链表的中间结点 思路: 4.链表中的倒数第K个结点 思路: 5.合并两个有序链表 思路: 6.链表分割 思路: 7.链表的回文结构 思路: 8.随机链表…...

flask web开发学习之初识flask(三)
文章目录 一、flask扩展二、项目配置1. 直接配置2. 使用配置文件3. 使用环境变量4. 实例文件夹 三、flask命令四、模版和静态文件五、flask和mvc架构 一、flask扩展 flask扩展是指那些为Flask框架提供额外功能和特性的库。这些扩展通常遵循Flask的设计原则,易于集成…...

【设计模式-3.1】结构型——外观模式
说明:本文介绍设计模式中结构型设计模式中的,外观模式; 亲手下厨还是点外卖? 外观模式属于结构型的设计模式,关注类或对象的组合,所呈现出来的结构。以吃饭为例,在介绍外观模式之前࿰…...
flutter学习-day2-认识flutter
📚 目录 简介特点架构 框架层引擎层嵌入层 本文学习和引用自《Flutter实战第二版》:作者:杜文 1. 简介 Flutter 是 Google 推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart 语言开发 App&#…...
解决selenium使用.get()报错:unknown error: unsupported protocol
解决方法 将原来的: url "https://www.baidu.com" browser.get(url)替换为: url "https://www.baidu.com" browser.execute_script(f"window.location.replace({url});") # 直接平替 .get()问题解析 之前运行都是正…...

关于加密解密,加签验签那些事
面对MD5、SHA、DES、AES、RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公钥加密、私钥解密、私钥加签、公钥验签。这些都什么鬼?或许在你日常工作没有听说过这些名词,但是一旦你要设计一个对外访问的接口ÿ…...

容器重启后,Conda文件完整保存(虚拟环境、库包),如何重新安装conda并迁移之前的虚拟环境
Vim安装 容器重启后默认是vi,升级vim,执行命令 apt install -y vim安装 Anaconda 1. 下载Anaconda 其他版本请查看Anaconda官方库 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --no-check-certificate…...

gitee对接使用
1.创建一个文件夹 2.进入Gitee接受对方项目编辑 3.打开终端初始化一开始创建的文件夹 git init 3.1打开终端 3.2输入git.init 4.克隆对方的项目 4.1进入Gitee复制对方项目的路径 4.2在编辑器终端内克隆对方项目 git clone 网址 如此你的编辑器就会出现对方的项目 …...

C语言中的一维数组与二维数组
目录 一维数组数组的创建初始化使用在内存中的存储 二维数组创建初始化使用在内存中的存储 数组越界 一维数组 数组的创建 数组是一组相同类型元素的集合。 int arr1[10]; char arr3[10]; float arr4[10]; double arr5[10];下面这个数组能否成功创建? int count…...

【Linux】地址空间
本片博客将重点回答三个问题 什么是地址空间? 地址空间是如何设计的? 为什么要有地址空间? 程序地址空间排布图 在32位下,一个进程的地址空间,取值范围是0x0000 0000~ 0xFFFF FFFF 回答三个问题之前我们先来证明地址空…...

作为一个产品经理带你了解Axure的安装和基本使用
1.Axure的简介 Axure是一种强大的原型设计工具,它允许用户创建交互式的、高保真度的原型,以及进行用户体验设计和界面设计。Axure可以帮助设计师和产品经理快速创建和共享原型,以便团队成员之间进行沟通和反馈。Axure提供了丰富的交互组件和功…...

接口测试总结及其用例设计方法
接口测试的总结文档 第一部分:主要从问题出发,引入接口测试的相关内容并与前端测试进行简单对比,总结两者之前的区别与联系。但该部分只交代了怎么做和如何做?并没有解释为什么要做? 第二部分:主要介绍…...

2023团体程序设计天梯赛——模拟赛和总决赛题
M-L1-1 嫑废话上代码 Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。 输出格式: 在一行中输出…...

智能优化算法应用:基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于人工蜂鸟算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工蜂鸟算法4.实验参数设定5.算法结果6.参考…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...