如果处理器执行读取操作而缓存行仍在另一个处理器的存储缓冲区中,会发生什么情况

问题描述 投票:0回答:1

在MESI协议的背景下,引入存储缓冲区和失效队列,对变量的写操作可以暂时存储在存储缓冲区中,等待相关缓存行的到来。那么如果另一个处理器执行读操作会发生什么呢?除非之前执行的写操作完成,否则读操作会被阻塞吗?

我知道收到失效请求的处理器必须保证在执行失效之前不会发送额外的 MESI 消息。但是如果失效消息已经被处理了怎么办?

caching consistency mesi
1个回答
0
投票

这取决于您使用的协议。某些协议(如 AXI 和 ACE)不允许启动相同的缓存行操作。在这种情况下,您将确定 HartX 是否从任何其他 Hart 收到有关缓存行的请求,该其他 Hart 的请求具有优先级,并且 AXI&ACE 协议会解释这些情况以及要做什么。

如果您尝试使用自定义协议,并且 Hart 在缓存行中启动操作,则所有 Hart 都应该看到所有请求,包括自己的请求。因此任何 Hart 都可以通过总线的仲裁逻辑决定哪个请求优先。

我猜你正在尝试实现一些自定义协议。

在您的情况下,开始失效的 HartX 的行为取决于 HartX 首先收到的请求。

  • 情况 1:如果 HartX 发送了无效,并且 HartX 在收到自己的无效请求之前收到了来自任何其他 hart 的读取请求,则它应该使用其未更改的数据来响应此请求,而不是使用它将写入的数据.

  • 情况2:如果HartX发送了无效请求,并且HartX收到了自己的无效请求。当 HartX 收到来自任何其他 hart 的读请求后,HartX 应该等待最新的数据,在收到后应该执行写操作,然后应该用写入的数据响应该读请求。

© www.soinside.com 2019 - 2024. All rights reserved.