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)目录法和监听法分别是集中式和基于总线,两者优劣是什么?

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

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

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

  • 优:
    • 可以实现在分布式的系统中;
    • 不需要总线广播一致性信息, 总线压力小
  • 劣:
    • 目录增加了存储开销,随着核数增加时目录的开销变大;
  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值