HNU-计算机体系结构-实验3-缓存一致性

计算机体系结构 实验3

计科210X 甘晴void 202108010XXX
在这里插入图片描述

文章目录

  • 计算机体系结构 实验3
    • 1 实验目的
    • 2 实验过程
      • 2.0 预备知识
        • 2.0.1 多cache一致性算法——监听法
          • 2.0.1.1 MSI协议
          • 2.0.1.2 MESI协议
          • 2.0.1.3 本题讲解
        • 2.0.2 多cache一致性算法——目录法
          • 2.0.2.1 有中心的目录法
          • 2.0.2.2 本题讲解
      • 2.1 cache一致性算法-监听法模拟
      • 2.2 cache一致性算法-目录法模拟
      • 2.3 思考题
    • 3 实验总结

1 实验目的

熟悉cache一致性模拟器(监听法和目录法)的使用,并且理解监听法和目录法的基本思想,加深对多cache一致性的理解。

做到给出指定的读写序列,可以模拟出读写过程中发生的替换、换出等操作,同时模拟出cache块的无效、共享和独占态的相互切换。

参考资料:

  • 【强烈推荐】https://www.bilibili.com/video/BV1iA4m137Xr
  • 【经典A橙】https://blog.csdn.net/Aaron503/article/details/133985380

声明:部分讲解图片来源于B站up主kami陆【技术杂谈】缓存一致性,总结的非常好,一看就看懂了。

2 实验过程

学习cache一致性监听法和目录法,并且进行一致性算法的模拟实验,同时熟悉相关知识。

2.0 预备知识

2.0.1 多cache一致性算法——监听法
2.0.1.1 MSI协议
  • Modified 已修改:缓存中的数据和内存中的数据不一致,最新的数据只存在于当前的缓存块当中
  • Shared 共享:缓存数据和内存中的一致
  • Invalidated 已失效:该缓存块无效

每个块都有如下三种状态,由CPU对块的不同操作在如下状态图上跳转。

注意,read/write miss信号会指明块编号,监听时会对适当的块编号做出反应。

在这里插入图片描述

每个处理器上都有一个模块在总线上监听,并对接收到的信号(块编号一致)作出反应,进行如下跳转。

在这里插入图片描述

2.0.1.2 MESI协议

相较于之前多了一个exclusive,解决重复步骤的问题。

在这里插入图片描述

2.0.1.3 本题讲解

本题的“占用”好像地位类似于上面的“已修改”,可以认为是基于MSI协议进行的。

2.0.2 多cache一致性算法——目录法
2.0.2.1 有中心的目录法

视频介绍的是一种有中心的目录法,它所有的块状态都存在中心结点上,更新时都需要与中心结点进行交互。这与我们的问题有一些差别,后面会提到,但是模式有相似之处。

在这里插入图片描述

在这里插入图片描述

2.0.2.2 本题讲解

本题是一种去中心分布式的目录法,存储器分布式地存储在各个结点上(事实上,这样会更好)。与上面所给出的有一定区别。此外,本题还引入了独占(Exclusive),接下来我来讲解本题的做法。

在这里插入图片描述

根据每一次的具体任务,会有三类结点(任务不一样,需要重新划分)

  • 宿主H(记录我想要操作的这个缓存块目录的所在结点)
  • 本地L(处理操作的CPU与Cache所在的结点)
  • 远端R(其它与这个操作有关系的结点)

举例:如在上图中,此时在CPU-C上写块6,那么宿主结点是A,本地结点是C,远端结点是D。

下面是不存在替换的情况(即Cache的这个位置本来是空的,不会覆盖原有的)

  • 读,命中:不做处理
  • 写,命中:不做处理
  • 读,不命中:
    • 与宿主结点H通信,若H的目录为【空】或【共享】,从H的存储器发数据给L,H的目录中标记【共享】L;本地L的Cache标记【共享】
    • 与宿主结点H通信,若H的目录为另一节点R【独占】,H先从R处取回数据,放在H存储器,从H的存储器发数据给L,H的目录中解除R【独占】,标记【共享】RL,本地L的Cache标记【共享】
  • 写,不命中:
    • 与宿主结点H通信,若H的目录为【空】,从H的存储器发送数据给L,H的目录中标记【独占】L;本地L的Cache标记【独占】
    • 与宿主结点H通信,若H的目录为另一节点M【独占】,H发【作废】信号给M,M将该数据块送还给H,M的Cache标记为【作废】,取消掉这个块的存在,H再发数据给L,H的目录中解除M【独占】,添加L【独占】,L的Cache标记为【独占】
    • 与宿主结点H通信,若H的目录为另一两个R【共享】,H发【作废】信号给所有的R,所有的R将Cache标记为【作废】,并取消掉这个快的存在,H再发数据给L,H的目录中解除R的【共享】,添加L【独占】,L的Cache标记为【独占】

看下面这个例子,此时如果写入6,会覆盖掉10,此时在上面的步骤之前还要加一个写回与修改目录的操作。

在这里插入图片描述

写回并修改共享集:如上图中,L结点(D)向10所在的R‘结点(B)通信,把10的最新值传回去,并要求取消掉块10目录中的L【独占】标记。然后把L结点的Cache-2,即块10在的那块清空,此时情况转化为了上面的情况,可以按照前面列出来的例程处理。

总结:如果存在替换的情况,要先做写回并修改共享集。然后先跟宿主机H通信,确定是哪种情况,然后再做相应的操作。凡是写不命中,都是用【独占】解决,相当于在目录上开了个声明:“最新的副本在我这,想要的来问我要”。凡是读不命中,都用【共享】来解决。凡是要在目录中删除一项【独占】标记,都必须先把最新的副本拿回来,再删除。

2.1 cache一致性算法-监听法模拟

1) 利用监听法模拟器进行下述操作,并填写下表

【注意】

  • 用I代表Invalidated,为“无效”
  • 用S代表Shared,为“共享”
  • 用E代表Exclusive,为“独占”
  • 举例:A5:I->S表示A处理器上的块5原来标记“无效”,现在改为“共享”
所进行的访问是否发生了替换?是否发生了写回?监听协议进行的操作与块状态改变具体事件
CPU A 读第5块××A5:I->S读不命中,发送读不命中信号,将块5从主存读入Cache A1
CPU B 读第5块××B5:I->S读不命中,发送读不命中信号,将块5从主存读入CacheB1
CPU C 读第5块××C5:I->S读不命中,发送读不命中信号,将块5从主存读入CacheC1
CPU B 写第5块××B5:S->E; A5:S->I; C5:S->I写命中,让其他CPU的块5失效
CPU D 读第5块×B5:E->S; D5:I->S读不命中,发送读不命中信号,CPUB接收到该信号,发送给CPUD块5,CPUD将块5读入CacheD1
CPU B 写第21块×B5:S->I; B21:I->E写不命中,将块21写入CacheB1,替换块5,发送写失效信号
CPU A 写第23块××A23:I->E写不命中,将块23写入CacheA3,发送写失效信号
CPU C 写第23块×A23:E->I; C23:I->E写不命中,将块23写入CacheA3,发送写失效信号,CPUA将块写回主存
CPU B 读第29块×B29:I->S读不命中,发送读不命中信号,将块29从主存读入CacheB1,替换掉块21
CPU B 写第5块×B29:S->I; B5:I->E; D5:S->I写不命中,发送写不命中信号,将块5写入CacheB1,替换掉块29,块29为独占,先将其写回。写入块5后发送写失效信号

2) 请截图,展示执行完以上操作后整个cache系统的状态

在这里插入图片描述

2.2 cache一致性算法-目录法模拟

1) 利用目录法模拟器进行下述操作,并填写下表

所进行的访问监听协议进行的操作存储器块状态改变Cache块状态改变
CPU A 读第6块读不命中,块6在A的存储器中,读取到缓存。块6目录:添加ACacheA块6:无效->共享
CPU B 读第6块读不命中,块6在A的存储器中,读取到缓存。块6目录:添加BCacheB块6:无效->共享
CPU D 读第6块读不命中,块6在A的存储器中,读取到缓存。块6目录:添加DCacheD块6:无效->共享
CPU B 写第6块写命中,更新CPU-A的目录中块6为CPU-B独占,告知CPU-A,CPU-D该块失效。块6目录:删除ABD,添加B(独占)CacheA、CacheD块6:共享->无效; CacheB块6:独占->共享
CPU C 读第6块读不命中,访问目录得知CPU-B独占块6,CPU-A从CPU-B的缓存取回块6写回,将该块交给CPU-C。块6目录:解除独占,添加CCacheB块6:共享->独占; CacheC块6:无效->共享
CPU D 写第20块写不命中,块20在C的存储器上,读取到缓存并写入新块。块20目录:添加D(独占)CacheD块20:无效->独占
CPU A 写第20块写不命中,块20在C的存储器上,读取目录发现CPU-D独占该块,CPU-C从CPU-D取回块20写回。块20目录:删除D,添加ACacheD块20:独占->无效; CacheA块20:无效->独占
CPU D 写第6块写不命中,块6在A的存储器上,读取目录发现B和C共享此块20,CPU-A通知B和C该块写失效,设置为CPU-D独占,新块写入CPU-D的缓存。块6目录:删除BC,添加DCacheB块6:共享->无效;CacheC块6:共享->无效;CacheD块6:无效->独占;
CPU A 读第12块读不命中,将块20写回C的存储器并清除目录中对块20的独占态。读取B的存储器上的块12,并更新相应目录。块20目录:删除A; 块12目录:添加ACacheA块12:无效->共享

2) 请截图,展示执行完以上操作后整个cache系统的状态

在这里插入图片描述

2.3 思考题

1) 目录法和监听法分别是集中式和基于总线,两者优劣是什么?

监听法基于总线,通过广播信号来实现写失效,优点是不需要额外的存储空间维护一致性信息,缺点是可扩展性差,处理器数量越多,总线通信的压力就越大。

目录法采用集中式的目录维护一致性信息,增加了存储开销。一致性信息是集中式的存储在目录中,但目录结构本身是分布式的,因此具有可拓展性。目录法最大的优点是可以实现在分布式的系统中,不需要总线。

3 实验总结

对缓存一致性有了更深入的了解,具体是掌握了监听法(MSI和MESI),目录法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/659266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

摸鱼大数据——Hive表操作——复杂类型

1、hvie的SerDe机制 其中ROW FORMAT是语法关键字,DELIMITED和SERDE二选其一。本次我们主要学习DELIMITED关键字相关知识点 如果使用delimited: 表示底层默认使用的Serde类:LazySimpleSerDe类来处理数据。 如果使用serde:表示指定其他的Serde类来处理数据,支持用户自…

无需安装的在线PS:打开即用

为什么想用在线PS网页版?Photoshop常用于平面设计,是不少设计师接触过的第一款设计软件。作为一款平面设计工具,ps功能太多,并且没有在线版,这不仅需要设计师花费时间学习软件,还需要设计师具备一定的设计能…

Ant Design 动态增减form表单,第二三项根据第一项选中内容动态展示内容

效果图: 选中第一项下拉框,第二第三项展示 点击添加条件,第二条仍然只展示第一项select框 后端返回数据格式: ruleList:[{name:通话时长,key:TALK_TIME,type:’INT‘,unitName:秒,operaObj:[{name:>,value:>…

[JAVASE] String类 StringBuffer类 StringBuilder类

目录 一.String类 1.1 String字符串不可变的原因 1.2 字符串中的比较方法 1.2.1 equals 1.2.2 compareTo 与 compareToIgnoreCase 1.3 字符串中的查找方法 1.3.1 charAt 1.3.2 indexOf 与 lastIndexOf 1.4 字符串中的转换方法 1.4.1 valueOf 1.4.2 toUpperCase 与 to…

msi安装mysql8 启动失败,提示只有在任务处于完成状态(RanToCompletion、Faulted 或 Canceled)时才能释放它。

解决方案: 1.打开服务,找到安装的mysql 2. 右击,打开属性,进入【登录】选项卡,选择本地系统账户。 3. 点击确定-->应用 4.服务中选择开始服务 5.服务启动成功后,在安装步骤中继续点击执行

熵值法(熵权法)

熵值法(Entropy Method)是一种多属性决策分析方法,主要用于权重确定、排序和评价。它在风险评估、资源配置、环境管理等领域得到广泛应用。熵值法的核心思想是基于信息熵的概念,利用信息熵来度量各属性对决策的贡献程度&#xff0…

串口环保212设备 转 profinet IO协议项目案例

1 文档说明 数采仪通过串口输出环保212的数据,vfbox网关通过串口采集数采仪的数据。网关把采集的数据转换成Profinet IO从站数据。 2 测试数采仪的串口数据 测试数采仪的串口有数据输出,并且需要知道输出的数据内容。 把数采仪的串口(232或…

【记录】打印|无需排版,生成证件照打印PDF,打印在任意尺寸的纸上(简单无损!)

以前我打印证件照的时候,我总是在网上找在线证件照转换或者别的什么。但是我今天突然就琢磨了一下,用 PDF 打印应该也可以直接打印出来,然后就琢磨出来了,这么一条路大家可以参考一下。我觉得比在线转换成一张 a4 纸要方便的多&am…

AI视频教程下载:ChatGPT API、HTML、CSS 和 JS开发AI聊天机器人

在课程中,你将开启一段令人兴奋的聊天机器人开发之旅,并装备自己创建智能对话代理所需的技能和知识。 利用 ChatGPT API、HTML、CSS 和 JavaScript 的强大功能,你将学习如何设计和构建吸引用户并提供个性化体验的聊天机器人界面。深入探讨聊天机器人开发的基础知识,了解对话设…

给转行产品经理的小白的一些建议

哈喽我是小源,毕业在教培大厂做了1年的班主任,下午1点上班,被优化后gap3月找到了自己的本命岗位——产品经理! 其实这个转变也挺机缘巧合的,朋友和我都是教培行业,她是成人职教类,我是k111类&a…

SWM181系列应用

一、SWM181系列 ISP功能 1.1、注意:ISP引脚为B0,VCC,GND是UART-RX、UART-TX 下载引脚。所有型号的UART-RX - - > A0,UART-TX - - > A1。 1.2、注意:板级设计必须留出ISP引脚,防止调试过程中芯片锁死后…

Java——执行流程

一、执行流程 1、示例 //第一个Java程序 public class Hello{public static void main(String[] args){System.out.println("Hello World!");} } 编译: 执行: 我们可以看到这里的是类名,而不是字节码文件名 Hello.class &#…

Android manifest清单文件意外权限来源和合并规则

问题背景 当自写APP发现无缘无故多申请了多个权限,其中一个就是:android.permission.WAKE_LOCK. 一想就知道如果并非自己在APP main中引入的,那就是依赖的库清单文件导入进来的. 定位问题 定位手段 1.manifest-merger-buildVariant-report.txt 根据其内容可知, WAKE_LOCK 权…

分布式专题

一:分布式事务 1、理论基础 分布式事务主要区分本地事务 什么是本地事务(Local Transaction)?本地事务也称为数据库事务或传统事务(相对于分布式事务而言)。尤其对于数据库而言,为了数据安全…

图形学初识--矩阵和向量

文章目录 前言正文向量什么是向量?向量涉及哪些常见计算?1、取模2、归一化3、向量加法4、向量减法5、向量与标量乘6、向量点乘(内积)7、向量投影 向量有哪些基本应用? 矩阵什么是矩阵?矩阵涉及哪些常见计算…

【数据结构】冒泡排序、直接插入排序、希尔排序详解!

文章目录 1. 冒泡排序🍎2. 直接插入排序🍎3. 希尔排序(缩小增量排序)🍎 1. 冒泡排序🍎 🐧 基本思想: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 大的数据…

使用docker部署项目

一、docker私有镜像仓库 1、docker私有镜像仓库 库(Repository)是集中存放镜像的地方,又分为公共镜像和私有仓库。 当我们执行docker pull xxx的时候,它实际上是从registry.docker.com这个地址去查找,这就是Docker公…

基于稀疏辅助信号平滑的心电信号降噪方法(Matlab R2021B)

基于形态成分分析理论(MCA)的稀疏辅助信号分解方法是由信号的形态多样性来分解信号中添加性的混合信号成分,它最早被应用在图像处理领域,后来被引入到一维信号的处理中。 在基于MCA稀疏辅助的信号分析模型中,总变差方…

交互设计如何助力传统技艺在当代复兴?

背景介绍 榫卯是中国传统木工中一种独特的接合技术,它通过构件间的凸凹部分相互配合来实现两个或多个构件的紧密结合。这种结构方式不依赖于钉子或其他金属连接件,而是利用木材自身的特性,通过精巧的设计和工艺,实现构件间的稳定…

【MAC】Spring Boot 集成OpenLDAP(含本地嵌入式服务器方式)

目录 一、添加springboot ldap依赖: 二、本地嵌入式服务器模式 1.yml配置 2.创建数据库文件:.ldif 3.实体类 4.测试工具类 5.执行测试 三、正常连接服务器模式 1.yml配置 2.连接LDAP服务器配置类,初始化连接,创建LdapTem…