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),目录法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A2B V2.0协议学习笔记(非正式版本)

一、说明 A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。 A2B V2.0总线相对V1.0主要变化点: 速率提升,高达98.304Mbps,全双工模式 编码方式,由之前的曼彻斯特编码变为QPSK(正交相移键控)编码,每个符合2bit数据,因此…

随手记:多行文本域存数据有换行,回显数据换行展示

1.在新增的时候存储数据 <el-input type"textarea"v-model"XXXX"></el-input> 2.详情页返回的数据&#xff1a; replace一顿操作确实复杂 最快的方法直接写个样式:style"white-space: pre-line" 即可行内或者class样式都可以 …

秋招突击——算法打卡——5/28——复习{Z字形变换、两数之和}——新做:{整数反转、字符串转整数}

文章目录 复习Z字形变换实现代码参考代码 两数之和复习代码 新作整数反转个人实现实现代码 参考做法字符串转换整数个人解法 分析总结 复习 Z字形变换 实现代码 这里使用了他的思想&#xff0c;但是没有用他的代码&#xff0c;虽然已经比上次简洁了&#xff0c;但是还是不够&…

【日记】终于鼓起勇气买了吹风机!(356 字)

正文 好忙。今天比昨天还要忙&#xff0c;水都没喝几口。嗯&#xff0c;好像只喝了两口。 今天补了一份印鉴卡&#xff0c;销了一个户&#xff0c;变了一个户&#xff0c;弄了一大堆资料找人签字&#xff0c;还顺带要解决一个押品的历史遗留问题。 中午睡得好香&#xff0c;都不…

如何理解和使用 this 关键字

this 关键字是许多编程语言中的一个核心概念&#xff0c;在面向对象编程&#xff08;OOP&#xff09;中尤为重要。在JavaScript、Java、C、C#等语言中&#xff0c;this 扮演着至关重要的角色。理解 this 的意义和用法&#xff0c;对于编写清晰、有效的代码至关重要。 什么是th…

超分论文走读

codeFormer 原始动机 高度不确定性&#xff0c;模糊到高清&#xff0c;存在一对多的映射纹理细节丢失人脸身份信息丢失 模型实现 训练VQGAN 从而得到HQ码本空间作为本文的离散人脸先验。为了降低LQ-HQ映射之间的不确定性&#xff0c;我们设计尽量小的码本空间和尽量短的Code…

运营推广最容易被忽略的细节!用短链接推广必须要掌握这些要点!

短链接是目前很多企业进行网络推广最常用的方式之一&#xff0c;是引流转化的重要桥梁&#xff0c;很多工作者可能觉得用短链接推广&#xff0c;只需要简简单单的把生成好的短链接放上去就行&#xff0c;但是实际上有很多细节要点是需要着重注意的&#xff0c;今天小编就围绕这…

[AIGC] Nginx常用变量详解

Nginx非常强大&#xff0c;其主要功能包括HTTP服务器、反向代理、负载均衡等。Nginx的配置中有许多内置的变量&#xff0c;你可以在配置文件中使用这些变量进行灵活的配置。在本篇文章中&#xff0c;我们将介绍一些Nginx中常见的变量&#xff0c;包括proxy_add_header。 常见变…

redis显示RDB error

报错问题&#xff1a;"RDB error" 是指在Redis的RDB持久化过程中出现了错误。Redis的RDB持久化是通过将内存中的数据集快照保存到磁盘中的一种方式。如果在这个过程中遇到问题&#xff0c;Redis会记录一条包含"RDB error"的日志信息。上图错误&#xff0c;…

【论文复现】——基于随机抽样与特征值法的点云平面稳健拟合方法

目录 一、算法原理1、论文概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的GPT爬虫。 一、算法原理 1、论文概述 针对点云数据含有异常值且传统拟合方法拟合结果不理想的情况,本文提出…

FL Studio21.2.5中文版电子音乐制作的强大工具

在当今的数字音乐时代&#xff0c;电子音乐已经成为了全球音乐市场中不可或缺的一部分。越来越多的音乐爱好者开始尝试自己动手创作电子音乐&#xff0c;而FL Studio 21中文版正是为他们量身打造的一款强大工具。作为一个音频制作爱好者&#xff0c;我深知一个好的数字音频工作…

apexcharts数据可视化之雷达图

apexcharts数据可视化之雷达图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础雷达图多组数据雷达图雷达图标记点 基础雷达图 import ApexChart from react-apexcharts;export function BasicRadar() {// 数据序列const series [{name…

10分钟掌握FL Studio21中文版,音乐制作更高效!

FL Studio 21中文版是Image Line公司推出的一款深受欢迎的数字音频工作站软件&#xff0c;在音乐制作领域享有盛誉。这个版本特别针对中文用户进行了本地化处理&#xff0c;旨在提供更加便捷的用户体验和操作界面。本次评测将深入探讨FL Studio 21中文版的功能特点、使用体验及…

【计算机网络】P1 计算机网络概念、组成、功能、分类、标准化工作以及性能评估指标

目录 1 什么是计算机网络2 计算机网络的组成2.1 组成部分上2.2 工作方式上2.3 功能组成上 3 计算机网络的功能3.1 数据通信3.2 资源共享3.3 分布式处理3.4 提高可靠性3.5 负载均衡 4 计算机网络的分类4.1 按分布范围分类4.2 按传输技术分类4.3 按照拓扑结构分类4.4 按使用者分类…

【FL Studio至尊版:音乐制作界的“瑞士军刀”】

​ 导语&#xff1a;在音乐制作领域&#xff0c;有一款软件被誉为“瑞士军刀”&#xff0c;它就是FL Studio。本文将为您揭示FL Studio的四大爆点&#xff0c;带您领略这款软件的独特魅力。 一、FL Studio&#xff1a;音乐制作界的“瑞士军刀” FL Studio&#xff0c;全称F…

Linux Tcpdump抓包入门

Linux Tcpdump抓包入门 一、Tcpdump简介 tcpdump 是一个在Linux系统上用于网络分析和抓包的强大工具。它能够捕获网络数据包并提供详细的分析信息&#xff0c;有助于网络管理员和开发人员诊断网络问题和监控网络流量。 安装部署 # 在Debian/Ubuntu上安装 sudo apt-get install…

Java网络编程:UDP通信篇

目录 UDP协议 Java中的UDP通信 DatagramSocket DatagramPacket UDP客户端-服务端代码实现 UDP协议 对于UDP协议&#xff0c;这里简单做一下介绍&#xff1a; 在TCP/IP协议簇中&#xff0c;用户数据报协议&#xff08;UDP&#xff09;是传输层的一个主要协议之一&#xf…

3.Spring Cloud LoadBalancer 入门与使用

3.Spring Cloud LoadBalancer 入门与使用 1.什么是 LoadBalancer?1.1负载均衡分类1.2 常见负载均衡策略 2.为什么要学 LoadBalancer?3.如何使用?4.默认负载均衡策略5.随机负载均策略5.1 创建随机负载均衡器5.2 设置随机负载均衡器 (局部设置)5.3 设置全局负载均衡器 6.Nacos…

基础—SQL—DML(数据操作语言)修改和删除

一、引言 接着上次博客&#xff0c;这次讲解DML语句中的修改数据和删除数据操作。 二、DML—修改数据 UPDATE 表名 SET 字段名1值1 ,字段名2值2 , ...[ WHERE 条件]; 注意&#xff1a;修改语句的条件可以有&#xff0c;也可以没有。如果没有条件&#xff0c;则会修改整张表的…

为什么就是不显示呢?

为了练习JavaScript中函数的使用方法&#xff0c;写了下面的关于Date&#xff08;&#xff09;函数的使用&#xff0c;奇怪的是&#xff0c;网页中就是不显示相关内容&#xff0c;为什么呢&#xff1f;&#xff1f;&#xff1f; <!DOCTYPE html> <html lang"en&…