HNU_CA_实验3--多cache一致性算法

参考:
芜湖韩金轮_HNU计算机体系结构-实验3:多cache一致性算法
A橙_计算机体系结构实验三-缓存一致性

一、实验目的

  • 熟悉cache一致性模拟器(监听法和目录法)的使用,并且理解监听法和目录法的基本思想,加深对多cache一致性的理解。
  • 做到给出指定的读写序列,可以模拟出读写过程中发生的替换、换出等操作,同时模拟出cache块的无效、共享和独占态的相互切换。

二、实验说明

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

  • 缓存一致性:不同CPU共享存储器中的某一数据,如何在各自的缓存Cache保证该数据的一致性;
  • 监听法:每个CPU的Cache,都可以通过总线监听其他CPU对共享数据的读写操作;
    • 以下图为例,当前CPU A对共享数据块x进行读/写操作
    • 此时其他CPU(这里是CPU B)会通过总线监听CPU A的操作,并做出写回、不变等操作;
没有其他CPU的Cache中有块xCPU B共享块xCPU B独占块xCache A需要替换块y(CPU A共享)Cache A需要替换块y(CPU A独占)
当前CPU A读块x主存–>Cache A(读不命中)【A-共享】主存–>Cache A(读不命中)【A、B-共享】Cache B–>主存,主存–>Cache A【A、B-共享】x:主存–>Cache A【A-共享】y:Cache A–>主存; x:主存–>Cache A【A-共享】
当前CPU A写块x主存–>Cache A(写不命中)【A-独占】主存–>Cache A(写不命中);Cache A作废Cache B的x【A-独占、B-无效】Cache B–>主存,主存–>Cache A【A-独占、B-失效】x:主存–>Cache A【A-独占】y:Cache A–>主存;x:主存–>Cache A【A-独占】
  • 目录法主存中每个块维护一个目录的共享集合;集中式地发送指令,以保证Cache的一致性;
    • CPU的Cache对块的读/写都请求主存中的该目录
    • 然后目录根据该块的共享集合发送写回、取值、作废、返回值等指令
    • 主存发送给CPU的Cache请求的块

三、实验内容

1、cache一致性算法-监听法模拟

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

步骤所进行的访问是否发生了替换?是否发生了写回?监听协议进行的操作块状态改变
1CPU A 读第5块CPU A读不命中;Cache A发送读不命中信号, 将块5从主存读入Cache A 1Cache A 1由无效变为共享
2CPU B 读第5块CPU B读不命中;Cache B发送读不命中信号, 将块5从主存读入Cache B 1Cache B 1由无效变为共享
3CPU C 读第5块CPU C读不命中;Cache C发送读不命中信号, 将块5从主存读入Cache C 1Cache C 1由无效变为共享
4CPU B 写第5块CPU B写命中; CacheB发送作废信号,使其他CPU的块5失效Cache B 1由共享变为独占; Cache A 1、C 1由共享变为无效
5CPU D 读第5块是(4-Cache B 1中的块5写回)CPU D读不命中;Cache D发送读不命中信号CPU B将块5写入主存,然后CPU D将块5从主存读入Cache D 1;【【如果优化的话】:Cache D发送读不命中信号,CPU B将块5写到总线,然后CPU D将块5从总线读入Cache D 1;然后CPU B将块5写入主存】;Cache B 1由独占变为共享;Cache D 1由无效变为共享
6CPU B 写第21块是(Cache B 1中块5换成块21)CPU B写不命中;Cache B发送写不命中信号,从主存中加载块21到缓存B 1中,替换块5Cache B 1由共享变为独占;
7CPU A 写第23块CPU A写不命中; Cache A发送写不命中信号,从主存中加载块23到缓存A 3中;Cache A 1由无效变为独占;
8CPU C 写第23块是(7-Cache A 3中的块23写回)CPU C写不命中;Cache C发送写不命中信号CPU A将块23写入主存(写回),然后CPU C将块23从主存读入Cache C 3,然后CPU C写Cache C 3中的块23(这里不写回);【【如果优化的话】:Cache C发送写不命中信号CPU A将块23写到总线,然后CPU C将块23从总线读入Cache C 3;然后CPU A将块23写入主存;然后CPU C写Cache C 3中的块23;Cache A 3由独占变为无效;Cache C 3由无效变为独占
9CPU B 读第29块是(Cache B 1中块21换成块29)是(6-Cache B 1中的块21写回)CPU B读不命中;Cache B发送读不命中信号,换出Cache B 1中找第21块,写回到主存; 将块29从主存读入Cache B 1Cache B 1由独占变为共享
10CPU B 写第5块是(Cache B 1中块29换成块5)CPU B写不命中;Cache B发送写不命中信号访存并加载块5到Cache B 1中,替换块29;同时Cache D 1中的块5失效;Cache B写入Cache B 1的块5;Cache B 1由共享变为独占; Cache D 1由共享变为无效
  • 替换部分,两篇文章有些出入:
    • 如1中CPU A 读第5块,韩金轮写的“替换 Cache A的块1”,A橙_写的“否”;
    • 这里采用后者-冷不命中:一开始高速缓存里是空的,那么也就不用替换已有的块。
  • 写回部分,考虑两篇文章在9/10的出入
    • 9.Cache B 1的块21会写回:因为6的时候写块21,这里块21换出去;
    • 10.Cache B 1的块29不会写回:因为9的时候Cache B 1的块29只是读,没有脏,不用写回;
(a1)CPU A 读第5块
  • 未替换:5%4=1,CPU A到缓存A 1中找第5块,冷不命中访存并加载到缓存A 1中。
  • 未写回:这里是“”。
  • 监听协议进行的操作与块状态改变
    • CPU A读不命中;
    • Cache A发送读不命中信号, 将块5从主存读入Cache A1
    • Cache A 1由无效变为共享
      在这里插入图片描述
(b2)CPU B 读第5块
  • 未替换:5%4=1,CPU B到缓存B 1中找第5块,冷不命中访存并加载到缓存B 1中。
  • 未写回:这里是“”。
  • 监听协议进行的操作与块状态改变
    • CPU B读不命中;
    • CacheB发送读不命中信号, 将块5从主存读入CacheB1
    • Cache B 1由无效变为共享在这里插入图片描述
(c3)CPU C 读第5块
  • 未替换:5%4=1,CPU C到缓存C 1中找第5块,冷不命中访存并加载到缓存C 1中。
  • 未写回:这里是“”。
  • 监听协议进行的操作与块状态改变
    • CPU C读不命中;
    • Cache C发送读不命中信号, 将块5从主存读入Cache C1
    • Cache C 1由无效变为共享
      在这里插入图片描述
(d4)CPU B 写第5块
  • 未替换:5%4=1,CPU A到缓存B 1中找第5块,命中
  • 未写回:这里采用的“写回
    • 直写:在CPU写Cache的时候就写回主存;
    • 写回:等其他CPU再次访问该数据的时候,才写回到主存; 在这里插入图片描述
  • 监听协议进行的操作与块状态改变
    • CPU B写命中
    • CacheB发送作废信号,使其他CPU的块5失效
    • Cache B 1由共享变为独占; Cache A 1、C 1由共享变为无效

在这里插入图片描述

(e5)CPU D 读第5块
  • 未替换:5%4=1,CPU D到缓存D 1中找第5块,冷不命中
  • 写回:CPU B等到其他CPU再次访问该数据,此时写回到主存;
  • 监听协议进行的操作与块状态改变
    • CPU D读不命中;
    • Cache D发送读不命中信号,CPU B将块5写入主存,然后CPU D将块5从主存读入Cache D 1
      • 【如果优化的话】:Cache D发送读不命中信号,CPU B将块5写到总线,然后CPU D将块5从总线读入Cache D 1;然后CPU B将块5写入主存
    • Cache B 1由独占变为共享;Cache D 1由无效变为共享
      在这里插入图片描述
(f6)CPU B 写第21块
  • 替换:5%4=1,CPU B到缓存B 1中找第21块,这里已经有了第5块,冲突不命中访存并加载块21到缓存D 1中,替换块5。
  • 未写回:采用“写回”,会等其他CPU再次访问该数据的时候,才写回到主存;
  • 监听协议进行的操作与块状态改变
  • CPU B写不命中
  • Cache B发送写不命中信号,从主存中加载块21到缓存B 1中,替换块5
  • Cache B 1由共享变为独占;
    在这里插入图片描述
(g7)CPU A 写第23块
  • 未替换:23%4=3,写不命中
  • 未写回:采用“写回”,会等其他CPU再次访问块23的时候,才写回到主存;
  • 监听协议进行的操作与块状态改变
  • CPU A写不命中
  • Cache A发送写不命中信号,从主存中加载块23到缓存A 3中
  • Cache A 1由无效变为独占;
    在这里插入图片描述
(h8)CPU C 写第23块
  • 未替换:23%4=3,写不命中
  • 写回:CPU A等到其他CPU再次访问该数据块23,此时写回到主存;
  • 监听协议进行的操作与块状态改变
    • CPU C写不命中
    • Cache C发送写不命中信号CPU A将块23写入主存,然后CPU C将块23从主存读入Cache C 3,然后CPU C写Cache C 3中的块23
      • 【如果优化的话】:Cache C发送写不命中信号CPU A将块23写到总线,然后CPU C将块23从总线读入Cache C 3;然后CPU A将块23写入主存;然后CPU C写Cache C 3中的块23
    • Cache A 3由独占变为无效;Cache C 3由无效变为独占
      在这里插入图片描述
(i9)CPU B 读第29块
  • 替换:29%4=1,CPU B到缓存B 1中找第29块,冲突不命中
  • 写回:CPU B需要换出CacheB 1中找第21块,此时写回到主存;
  • 监听协议进行的操作与块状态改变
    • CPU B读不命中
    • CacheB发送读不命中信号,换出CacheB 1中找第21块,写回到主存; 将块29从主存读入CacheB 1
    • Cache B 1由独占变为共享
      在这里插入图片描述
(j10)CPU B 写第5块
  • 替换:5%4=1,CPU A到缓存B 1中找第5块,但这里是块29,冲突/写不命中
  • 未写回:换出的块29仅,不需要写回;
  • 监听协议进行的操作与块状态改变
    • CPU B写不命中
    • Cache B发送写不命中信号访存并加载块5到Cache B 1中,替换块29;同时Cache D 1中的块5失效;Cache B写入Cache B 1的块5
    • Cache B 1由共享变为独占; Cache D 1由共享变为无效
      在这里插入图片描述

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

在这里插入图片描述

2、cache一致性算法-目录法模拟

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

步骤所进行的访问监听协议进行的操作共享集合变化块状态改变
1CPU A 读第6块CPU A读不命中; Cache A发送读不命中信号主存主存向本地结点A发块6块6:{A}Cache A 2由无效变为共享
2CPU B 读第6块CPU B读不命中;Cache B发送读不命中信号主存主存向本地结点B发块6块6:{A,B}Cache B 2由无效变为共享
3CPU D 读第6块CPU D读不命中;Cache D发送读不命中信号主存主存向本地结点D发块6块6:{A,B,D}Cache D 2由无效变为共享
4CPU B 写第6块CPU B写命中;Cache B发送作废信号主存主存向远程结点A、D发作废消息块6:{B}Cache A 2由共享变为无效;Cache D 2由共享变为无效;Cache B 2由共享变为独占
5CPU C 读第6块CPU C读不命中;Cache C发送读不命中信号主存主存取Cache B 2的块6,再发给Cache C 2块6:{B,C}Cache B 2由独占变为共享;Cache C 2由无效变为共享
6CPU D 写第20块CPU D写不命中;Cache D发送写不命中信号主存主存向本地结点D发块20块20:{D};Cache D 0由无效变为独占
7CPU A 写第20块CPU A写不命中;Cache A发送写不命中信号主存主存从远程结点D作废块20,然后主存向本地结点A发块20块20:{A}Cache A 0由无效变为独占;Cache D 0由独占变为无效
8CPU D 写第6块CPU D写不命中;Cache D发送写不命中信号主存主存向远程结点B、C发作废信号块,然后主存向本地结点D发块6;块6:{D}Cache B 2、C 2由共享变为无效;Cache D 2由无效变为独占
9CPU A 读第12块CPU A读不命中;Cache A写回块20给主存,然后发送读不命中信号主存主存向本地结点A写块12块20:{ };块12:{A}Cache A 0由独占变为共享

注:下面的截图中,为了保留左上角的步骤,可能截图过早使得共享集合未及时改变,可以以文字版的说明为准;

(a1)CPU A 读第6块
  • 监听协议进行的操作与块状态改变
    • CPU A读不命中
    • Cache A发送读不命中信号主存主存向本地结点A发块6;
    • 存储器中块6的共享集合为{A}
    • Cache A 2由无效变为共享
      在这里插入图片描述
(b2)CPU B 读第6块
  • 监听协议进行的操作与块状态改变
    • CPU B读不命中
    • Cache B发送读不命中信号主存主存向本地结点B发块6
    • 存储器中块6的共享集合为{A,B}
    • Cache B 2由无效变为共享
      在这里插入图片描述
(c3)CPU D 读第6块
  • 监听协议进行的操作与块状态改变
    • CPU D读不命中
    • Cache D发送读不命中信号主存主存向本地结点D发块6;
    • 存储器中块6的共享集合为{A,B ,D}
    • Cache D 2由无效变为共享
      在这里插入图片描述
(d4)CPU B 写第6块
  • 监听协议进行的操作与块状态改变
    • CPU B写命中
    • Cache B发送作废信号主存主存向远程结点A、D发作废消息;
    • 存储器中块6的共享集合为{B}
    • Cache A 2由共享变为无效;Cache D 2由共享变为无效;Cache B 2由共享变为独占
      在这里插入图片描述
(e5)CPU C 读第6块
  • 监听协议进行的操作与块状态改变
    • CPU C读不命中
    • Cache C发送读不命中信号主存主存取Cache B 2的块6,再发给Cache C 2
    • 存储器中块6的共享集合为{B,C}
    • Cache B 2由独占变为共享;Cache C 2由无效变为共享
      在这里插入图片描述
(f6)CPU D 写第20块
  • 监听协议进行的操作与块状态改变
    • CPU D写不命中
    • Cache D发送写不命中信号主存主存向本地结点D发块20;
    • 存储器中块20的共享集合为{D}
    • Cache D 0由无效变为独占
      在这里插入图片描述
(g7)CPU A 写第20块
  • 监听协议进行的操作与块状态改变
    • CPU A写不命中
    • Cache A发送写不命中信号主存主存从远程结点D作废块20,然后主存向本地结点A发块20;
    • 存储器中块20的共享集合为{A}
    • Cache A 0由无效变为独占;Cache D 0由独占变为无效
      在这里插入图片描述
(h8)CPU D 写第6块
  • 监听协议进行的操作与块状态改变
    • CPU D写不命中
    • Cache D发送写不命中信号主存主存向远程结点B、C发作废信号块,然后主存向本地结点D发块6;
    • 存储器中块6的共享集合为{D}
    • Cache B 2、C 2由共享变为无效;Cache D 2由无效变为独占
      在这里插入图片描述
(i9)CPU A 读第12块
  • 监听协议进行的操作与块状态改变
    • CPU A读不命中
    • Cache A写回块20给主存,然后发送读不命中信号主存主存向本地结点A写块12;
    • 存储器中块20的共享集合为{ },块12的共享集合为{A}
    • Cache A 0由独占变为共享
      在这里插入图片描述

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

在这里插入图片描述

3、思考题

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

监听法-基于总线:通过广播信号来实现写失效

  • 优:
    • 不需要额外的存储空间;
    • 核数较少时,总线压力较小,成本低,效果好。
  • 劣:
    • 可扩展性差,能够连接的处理器数目有限
    • 处理器数量越多,总线通信的压力大:总线冲突增加, 监听带宽成为瓶颈

目录法-集中式:使用目录维护一致性信息

  • 优:
    • 可以实现在分布式的系统中;
    • 不需要总线广播一致性信息, 总线压力小
  • 劣:
    • 目录增加了存储开销,随着核数增加时目录的开销变大;
### HNU 2024 春季 计算机系统 实验1 引导材料与验收标准 根据已知的信息,HNU(湖南大学)在2024年春季学期的计算机系统课程中,除了第一个实验之外,其余实验均基于卡内基梅隆大学编写的教材《CSAPP》(深入理解计算机系统)的相关配套实验[^1]。然而,关于实验1的具体引导材料和验收标准并未直接提及。 通常情况下,高校开设此类基础课程时,首个实验往往用于帮助学生熟悉开发环境以及基本工具链的操作流程。对于HNU而言,可以推测实验1的主要目标可能包括但不限于以下几个方面: #### 1. **实验目的** - 帮助学生掌握计算机系统的底层原理。 - 学习并熟练使用GNU工具链(如GCC、GDB等)或其他指定开发工具。 - 提供初步实践机会,让学生了解如何编写简单的C程序及其对应的汇编代码转换过程。 #### 2. **引导材料** 虽然具体文档未被公开说明,但依据惯例,实验1可能会涉及以下内容: - C语言基础知识复习:变量声明、指针操作、数组处理等内容。 - GNU工具链介绍:安装配置指南、命令行参数详解。 - 示例代码分析:提供一段简单代码作为案例,指导学生逐步完成调试任务。 ```c // 示例代码片段 int main() { int a = 5; int b = 10; int result = add(a, b); printf("Result: %d\n", result); return 0; } int add(int x, int y) { return x + y; } ``` #### 3. **验收标准** 验收标准通常是衡量学生是否达到预期学习成果的重要指标。以下是可能的标准项: - 正确运行给定测试用例,并提交相应结果文件。 - 编写一份详细的实验报告,记录每一步骤的操作细节及遇到的问题解决方- 对特定函数或模块进行性能优化尝试,并对比前后差异效果。 需要注意的是,上述内容仅为合理推断,实际要求应以学校官方发布的正式通知为准。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值