【计算机组成与体系结构Ⅱ】多Cache一致性的模拟分析(实验)

news2024/12/23 14:32:30

实验八:多Cache一致性的模拟分析

一、实验目的

1:加深对多 Cache 一致性的理解。

2:进一步掌握解决多 Cache一致性的目录协议和监听协议的基本思想。

3:掌握在各种情况下, 目录协议和监听协议是如何工作的,能给出要进行什么样的操作以及 状态的变化情况。

二、实验平台

多 Cache一致性目录协议模拟器和监听协议模拟器

三、实验内容和步骤

Part I:多 Cache 一致性目录协议的模拟与分析

1:掌握多 Cache一致性目录协议模拟器的使用方法

点击【帮助】——【使用说明】,即可查看目录法模拟器的使用方法。

【0:基本显示】

该模拟器模拟4个CPU(A、B、C、D)访存的工作过程。每个CPU中都有一个Cache,该Cache包含4个块,其块地址为0~3。分布式共享存储器中有32个块,其块地址为0~31。Cache中每个块的状态用色块来表示,其中灰色表示“无效”状态,淡青色表示“共享”,橘红色表示“独占”。主存中块的状态由其右边的目录项的颜色来表示,未缓冲状态由黄色来表示,其他两种状态同Cache块。

对于每个CPU,可以指定所要进行的访问是读还是写(从列表中选),并在输入框中输入所要访问的主存块号,然后用鼠标点击在其右边的标有+的按钮,模拟器就将开始演示该在执行过程中,模拟器会在窗口的左上角显示相关的信息。

该模拟器的主菜单有4个:配置,操作,统计,帮助。

【1:配置】

该菜单用于进行配置参数的显示与设置。你可以修改动画播放速度:把游标往右边拖搜可提高播放速度,往左边拖拽可降低播放速度。你还可以选择是否进行优化传块。优化传块是指当要访问的块在某个Cache中,且处于独占状态时,可以不用等该块写回主存后再从主存调块,而是可以直接将该块传送给发出访问请求的结点。


本模拟器采用直接映象方法和写回法。

【2:操作】

可以通过该菜单中的选项来控制模拟器的执行。该菜单下有以下3个选项:单步执行、连续执行、复位。

  1. 单步执行:选用该方式后,点击鼠标或点击左上角的“步进”按钮,都会使模拟器前进一步。
  2. 连续执行:选用该方式后,用鼠标点击标有+的按钮,模拟器会连续演示整个过程,直至该访问结束。
  3. 复位:使模拟器复位,回到初始状态。

【3:统计】

该菜单用于显示模拟器的统计结果,包括各处理机的访问次数、命中次数、不命中次数以及命中率。

【4:帮助】

该菜单下有“关于”和“使用说明”两个选项。

2:对于以下访问序列, 写出目录协议所进行的操作

所进行的访问

目录协议所进行的操作

CPU A 读第 6 块

CPU读Cache A

Cache A不命中

本地向宿主发读不命中(A,6)消息

宿主把数据块送给本地

共享集合为{A}

CPU读Cache A第2行

CPU B 读第 6 块

CPU读Cache B

Cache B不命中

本地向宿主发读不命中(B,6)消息

宿主把数据块送给本地

共享集合为{A,B}

CPU读Cache B第2行

CPU D 读第 6 块

CPU读Cache D

Cache D不命中

本地向宿主发读不命中(D,6)消息

宿主把数据块送给本地

共享集合为{A,B,D}

CPU读Cache D第2行

CPU B 写第 6 块

CPU写Cache B

Cache B命中

本地向宿主发写命中(B,6)消息

宿主向远程结点A发作废(6)消息

宿主向远程结点D发作废(6)消息

共享集合为{B}

CPU写Cache B第2行

CPU C 读第 6 块

CPU读Cache C

Cache C不命中

本地向宿主结点发读不命中(C,6)消息

宿主给远程发取数据块(6)的消息(写回)

远程把数据块送给宿主结点(写回ing)

宿主把数据块送给本地结点(写回主存后再写cache)

共享集合为{B,C}

CPU读Cache C第2行

CPU D 写第 20 块

CPU写Cache D

Cache D不命中

本地向宿主结点发写不命中(D,20)消息

宿主把数据块送给本地结点

共享集合为{D}

CPU写Cache D第0行

CPU A 写第 20 块

CPU写Cache A

Cache A不命中

本地向宿主结点发写不命中(A,20)消息

宿主给远程结点发送取并作废(20)的消息

远程把数据块送给宿主结点(写回),把Cache中的该块作废

宿主把数据块送给本地结点

共享集合为{A}

CPU写Cache A第0行

CPU D 写第 6 块

CPU写Cache D

Cache D不命中

本地向宿主结点发写不命中(D,6)消息

宿主给远程结点发送取并作废(6)的消息

宿主给远程结点发送取并作废(6)的消息

宿主把数据块送给本地结点

共享集合为{D}

CPU写Cache D第2行

CPU A 读第 12 块

CPU读Cache A

Cache A不命中

本地向被替换块的宿主结点发写回(替换第20块后需要写回,因为只有1个副本)并修改共享集(A,20)消息

本地向宿主结点发读不命中(A,12)消息

宿主把数据块送给本地结点

共享集合为{A}

CPU读Cache A第0行


【访问序列】


【Cache模拟器统计信息】

3:自己编写一个访问序列, 写出目录协议所进行的操作

所进行的访问

是否发生替换

是否发生写回

目录协议所进行的操作

CPU A 读第 5 块

读cache A,不命中

本地:向宿主结点发读不命中(A,5)消息

宿主:把数据块送给本地结点

共享集合为:{A}

数据送入cache A的第1行,由CPU A读取

CPU B 读第 5 块

读cache B,不命中

本地:向宿主结点发读不命中(B,5)消息

宿主:把数据块送给本地结点

共享集合为:{A,B}

数据送入cache B的第1行,由CPU B读取

CPU C 读第 5 块

读cache C,不命中

本地:向宿主结点发读不命中(C,5)消息

宿主:把数据块送给本地结点

共享集合为:{A,B,C}

数据送入cache C的第1行,由CPU C读取

CPU B 写第 5 块

写cache B,命中

本地:向宿主结点发写命中(B,5)消息

宿主:向远程结点A发作废(5)消息

宿主:向远程结点C发作废(5)消息

共享集合为:{B}

CPU B写cache B第1行【独占】

CPU D 读第 5 块

读cache D,不命中

本地:向宿主结点发读不命中(D,5)消息

宿主:给远程结点发取数据块(5)的消息

远程:把数据块送给宿主结点【cache B第1行对应的主存第5块,写回主存】

宿主:把数据块送给本地结点

共享集合为:{B,D}

数据送入cache D的第1行,由CPU D读取

CPU B 写第 21 块

写cache B,不命中

本地:向被替换块的宿主结点发修改共享集(B,5)消息【cache B第1行对应的主存第5块替换为第21块】

本地:向宿主结点发写不命中(B,21)消息

宿主:把数据块送给本地结点

共享集合为:{B}

CPU B写cache B第1行【独占】

CPU A 写第 23 块

写cache A,不命中

本地:向宿主结点发写不命中(A,23)消息

宿主:把数据块送给本地结点

共享集合为:{A}

CPU A写cache A第3行【独占】

CPU C 写第 23 块

写cache C,不命中

本地:向宿主结点发写不命中(C,23)消息

宿主:给远程结点发送取并作废(23)的消息

远程:把数据块送给宿主结点,把cache中的该块作废【cache A第3行对应的主存第23块,写回主存】

宿主:把数据块送给本地结点

共享集合为:{C}

CPU C写cache C第3行【独占】

CPU B 读第 29 块

读cache B,不命中

本地:向被替换块的宿主结点发写回并修改共享集(B,21)消息【cache B第1行对应的主存第21块替换为第29块,并写回主存第21块】

本地:向宿主结点发读不命中(B,29)消息

宿主:把数据块送给本地结点

共享集合为:{B}

数据送入cache B的第1行,由CPU B读取

CPU B 写第 5 块

写cache B,不命中

本地:向被替换块的宿主结点发修改共享集(B,29)消息【cache B第1行对应的主存第29块替换为第5块】

本地:向宿主结点发写不命中(B,5)消息

宿主:向远程结点发作废(5)消息

宿主:把数据块送给本地结点

共享集合为:{B}

CPU B写cache B第1行【独占】

 


【访问序列】


【Cache模拟器统计信息】

4:根据上述结果,画出相关的状态转换图(仅画出与上表有关的部分)

5:目录协议的基本思想是什么?

目录协议的核心:物理存储器中共享数据块的状态及相关信息存在目录中。

PART II:多 Cache 一致性监听协议的模拟与分析

1:掌握多 Cache 一致性监听协议模拟器的使用方法


点击【帮助】——【使用说明】,即可查看目录法模拟器的使用方法。

2:对于以下访问序列,写出监听协议所进行的操作

所进行的访问

是否发生替换

是否发生写回

监听协议所进行的操作

CPU A 读第 5 块

CPU读Cache A

Cache A不命中

总线不命中

数据从存储器第5块送入Cache A第1块

CPU读Cache A第1块,显示共享

CPU B 读第 5 块

CPU读Cache B

Cache B不命中

总线不命中

数据从存储器第5块送入Cache B第1块

CPU读Cache B第1块,显示共享

CPU C 读第 5 块

CPU读Cache C

Cache C不命中

总线不命中

数据从存储器第5块送入Cache C第1块

CPU读Cache C第1块,显示共享

CPU B 写第 5 块

CPU写Cache B

Cache B命中

总线作废

Cache A第1块和Cache B第1块作废

存储器第5块tag,送入Cache B第1块

CPU写Cache B第1块,显示独占

CPU D 读第 5 块

CPU读Cache D

Cache D不命中

Cache B写回存储器第5块

数据从存储器第5块送入Cache D第1块

CPU读Cache D第1块,显示共享

Cache B第1块,显示共享

CPU B 写第 21 块

CPU写Cache B

Cache B不命中

总线写不命中

存储器第21块tag,送入Cache B第1块,发生块内替换

CPU写Cache B第1块,显示独占

CPU A 写第 23 块

CPU写Cache A

Cache A不命中

总线写不命中

存储器第23块tag,送入Cache A第3块

CPU写Cache A第3块,显示独占

CPU C 写第 23 块

CPU写Cache C

Cache C不命中

总线写不命中

Cache A写回存储器第23块

存储器第23块tag,送入Cache C第3块

CPU写Cache C第3块,显示独占

CPU B 读第 29 块

CPU读Cache B

Cache B不命中

Cache B写回存储器第21块

总线读不命中

数据从存储器第29块送入Cache B第1块,发生块内替换

CPU读Cache B第1块,显示共享

CPU B 写第 5 块

CPU写Cache B

Cache B不命中

总线写不命中

存储器第5块tag,送入Cache B第1块

总线作废Cache C第1块

CPU写Cache B第1块,显示独占


【访问序列】


【Cache模拟器统计信息】

3:自己编写一个访问序列, 写出监听协议所进行的操作

所进行的访问

是否发生替换

是否发生写回

监听协议所进行的操作

CPU A 读第 6 块

读cache A,不命中

向总线发送不命中

数据从存储器第6块送入cache A第2行

CPU A读cache A第1行,显示共享

CPU B 读第 6 块

读cache B,不命中

向总线发送不命中

数据从存储器第6块送入cache B第2行

CPU B读cache B第1行,显示共享

CPU D 读第 6 块

读cache D,不命中

向总线发送不命中

数据从存储器第6块送入cache D第2行

CPU D读cache D第1行,显示共享

CPU B 写第 6 块

写cache B,命中

向总线发送(6)作废消息

作废掉cache A第2行、cache D第2行

CPU B写cache B第2行,显示独占

CPU C 读第 6 块

读cache C,不命中

向总线发送不命中

将cache B第2行对应的(6)写回存储器

数据从存储器第6块送入cache C第2行

CPU C读cache C第2行,显示共享

CPU D 写第 20 块

写cache D,不命中

向总线发送不命中

数据从存储器第20块送入cache D第0行

CPU D写cache D第0行,显示独占

CPU A 写第 20 块

写cache A,不命中

向总线发送不命中

将cache D第0行对应的(20)写回存储器

作废掉cache D第0行

数据从存储器第20块送入cache A第0行

CPU A写cache A第0行,显示独占

CPU D 写第 6 块

写cache D,不命中

向总线发送不命中

数据从存储器第6块送入cache D第2行

作废掉cache B第2行、cache C第2行

CPU D写cache D第2行,显示独占

CPU A 读第 12 块

读cache A,不命中

将cache A第0行对应的(20)写回存储器

向总线发送不命中

数据从存储器第12块送入cache A第0行

CPU A读cache A第0行,显示共享


【访问顺序】


【Cache模拟器统计信息】

4:根据上述结果,画出相关的状态转换图(仅画出与上表有关的部分)

5:监听协议的基本思想是什么?

    监听协议的核心:Cache中保存各块的共享状态,共享总线,总线监听。

四、实验总结

1:监听协议是基于总线的。在监听协议中,所有的缓存控制器都通过总线来监听其他缓存控制器的操作。当一个缓存控制器修改了共享数据时,它会通过总线发送一个信号,让其他缓存控制器将对应的缓存行置为无效。这样,其他缓存控制器在需要访问这个缓存行时,就会重新从内存中读取最新的数据,保证了数据的一致性。

2:目录协议是集中式的。在目录协议中,每个缓存控制器都维护了一个目录表,用于记录共享数据的状态和位置。当一个缓存控制器修改了共享数据时,它会向目录表发送一个更新请求,将对应的缓存行置为无效或者共享状态。其他缓存控制器在需要访问这个缓存行时,需要先向目录表发出请求,获取该数据的状态和位置信息,然后根据相应的状态进行操作。

3:监听协议的特点分析:
    优点:核数较少时,总线压力较小,成本低,效果好。
    缺点:需要通过总线广播一致性相关信息. 总线上能够连接的处理器数目有限。当核数增多时,总线冲突增加, 监听带宽成为瓶颈。

4:目录协议的特点分析:
    优点:使用集中目录来记录每个cache块的状态,不需要总线广播一致性信息, 总线压力小。
    缺点:需要维护目录数据结构, 随着核数增加时目录的开销变大。

5:在设计和选择cache一致性协议时,需要综合考虑系统规模、性能需求、开销以及硬件限制等方面的因素。不同的协议适用于不同的场景。

6:实现cache一致性的关键——跟踪记录共享数据块的状态。

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

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

相关文章

内网穿透的应用-使用Docker搭建一个Wiki.Js知识库系统并实现分享他人远程创作

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整…

vue3的创建及认识

1、创建项目 使用creat-vue搭建vue3项目 2、认识creat-vue create-vue是Vue官方新的脚手架工具,底层切换到了 vite (下一代前端工具链),为开发提供极速响应 3、创建create-vue项目 npm init vuelatest 4、认识vue3 首先熟悉一下v…

【Axure高保真原型】文字翻页效果

今天和大家分享选择文字翻页效果的原型模板,我们通过这个模板实现类似翻书的效果。鼠标点击右箭头,可以翻开下一页,点击左箭头翻开上一页;当然我们也可以通过鼠标拖动的操作进行翻页,鼠标想左拖动时,翻开下…

3d音响按键怎么建立模型---模大狮模型网

要建立3D音响按键的模型,您可以按照以下步骤进行: 选择建模软件:首先,选择一个三维建模软件,如Blender、3ds Max或Maya。这些软件都提供了丰富的建模工具和功能,适合用于创建复杂的三维模型。 参考图像&am…

基于 Hologres+Flink 的曹操出行实时数仓建设

本文整理自曹操出行实时计算负责人林震基于 HologresFlink 的曹操出行实时数仓建设的分享,内容主要分为以下六部分: 曹操出行业务背景介绍曹操出行业务痛点分析HologresFlink 构建企业级实时数仓曹操出行实时数仓实践曹操出行业务成果分析未来展望 一、曹…

C语言中的字符串操作函数自定义实现:标准版与限定长度版

目录 1. 标准字符串操作函数自定义实现 (a) 自定义strcpy函数 (b) 自定义strcat函数 (c) 自定义strcmp函数 2. 限定长度字符串操作函数自定义实现 (a) 自定义strncpy函数 (b) 自定义strncat函数 (c) 自定义strncmp函数 对字符串的操作是不可或缺的一部分。标准库提供了…

论文阅读 Vision Transformer - VIT

文章目录 1 摘要1.1 核心 2 模型架构2.1 概览2.2 对应CV的特定修改和相关理解 3 代码4 总结 1 摘要 1.1 核心 通过将图像切成patch线形层编码成token特征编码的方法,用transformer的encoder来做图像分类 2 模型架构 2.1 概览 2.2 对应CV的特定修改和相关理解 解…

Dobbo --- HelloWorld项目搭建

Dobbo-HelloWorld 1. demo -- spring方式集成1.1 实现步骤 2. demo -- springboot方式集成2.1 实现provider2.2 实现consumer2.3 项目测试 1. demo – spring方式集成 dubbo官方文档 提供一个可被调用的接口 提供方:实现接口的方法逻辑,启动应用程序&a…

【JavaEE】文件操作: File 类的用法和 InputStream, OutputStream 的用法

目录 1. File 概述 1.1 File的属性 1.2 File的构造方法 1.3 File的方法 2.读文件 2.1 InputStream 概述 2.2 FileInputStream 概述 2.3 正确打开和关闭文件的方式 2.4 不同方式读取文件代码示例 2.4 另一种方法:利用 Scanner 进行字符读取 3.写文件 3.1 OutputStre…

【架构】docker实现3主3从架构配置【案例1/4】

一,集群规划及准备工作 架构实现:Redis3主3从 二,搭建命令 第一步,创建6台服务: docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --clust…

redis原理(四)redis命令

目录 一、字符串命令: 二、列表命令: 三、集合命令: 四、散列命令: 五、有序集合命令: 六、redis发布与订阅命令: 七、事务命令 八、其他命令 1、排序:SORT 2、键的过期时间&#xff…

SSH隧道技术

SSH隧道 简介 SSH隧道是一种通过SSH协议在两个网络节点之间建立安全通信的技术。它可以用于多种用途,包括加密和保护敏感数据传输、绕过防火墙限制、远程访问内部服务等。 应用: 端口转发:SSH隧道可以将本地端口转发到远程主机上&#xf…

如何使用视频下载助手获取公众号视频链接

微信公众号视频链接如何提取呢?今天就来说视频下载助手提取微信公众号的视频链接! 1:公众号获取视频下载助手二维码,并长按添加 2:找到需要下载的公众号带有视频的文章并转发给视频下载助手 3:提取完成后用户可以在视频下载助手中点击返回提取好的视频并…

Springboot智慧校园电子班牌统一管理平台源码

借助AIoT智能物联、云计算技术打造智慧绿色校园,助力实现校园教务管理、教师管理、学籍管理、考勤、信息发布、班级文明建设、校园风采、家校互通等场景功能,打造安全、便捷、绿色的智慧校园。 前后端分离架构 1、使用springbootvue2 2、数据库&#xff…

1.2 虚拟环境

1.2 虚拟环境 创建好应用目录之后,接下来该安装Flask了。安装Flask最便捷的方法是使用虚拟环境。 虚拟环境是Python解释器的一个私有副本,在这个环境中你可以安装私有包,而且不会影响系统中安装的全局Python解释器。 虚拟环境非常有用&…

力扣刷MySQL-第四弹(详细讲解)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…

[labelme]labelme如何将标注的json格式转成png的mask文件掩码文件

labelme工具不仅仅具有标注功能,而且可以将json文件转化为png的分割训练文件,如果您是一个类别则可以直接用labelme_json_to_dataset进行转换最后提取对应的掩码文件即可进行语义分割训练。如果您是>2个类别则不推荐使用labelme工具进行转换&#xff…

无心剑七绝《腊八粥香》

七绝腊八粥香 欣逢腊八粥浓香 五谷丰登聚宝庄 祈福心诚情不尽 佳肴共品待春芳 2024年1月18日 平水韵七阳平韵 这首七言绝句《腊八粥香》以腊八节为背景,描绘了人们欢庆腊八、祈福迎新的情景。 首句“欣逢腊八粥浓香”,开门见山地点明了主题——腊八节&a…

2023年山东省职业院校技能大赛高职组信息安全管理与评估 模块二(正式赛)

2023年山东省职业院校技能大赛高职组信息安全管理与评估 模块二 模块二竞赛项目试题 根据信息安全管理与评估技术文件要求,模块二为网络安全事件响应、数字取证调查和 应用程序安全。本文件为信息安全管理与评估项目竞赛-模块二试题。 介绍 竞赛有固定的开始和结…

23巴黎胶囊下架对贴纸刀枪市场有何影响?

短短一个国庆假期,CS2上线了,卡价暴跌了,最长一届巴黎胶囊也终于下架,阿努比斯收藏包成为常驻饰品,再看我们充值卡价也大降特降,国庆假期好不热闹。 那么胶囊价格到底是受哪些因素影响?胶囊下架…