我有一个MESI协议问题。假设我有两个核心(核心1和2),每个核心都有自己的二级缓存。当两个内核具有相同的数据并且高速缓存行处于状态S时,意味着它们都具有干净的数据和相同的数据。在t = 0时,内核1写入缓存行,内核1将切换到M(已修改),而内核2最终将处于I(无效)状态。在物理世界中,完成此交易需要时间。假设缓存2知道缓存1更新了缓存行需要5秒钟。
假设在t = 2时,核心2写入相同的缓存行并切换到M状态。来自内核2的写操作将在t = 7(2 + 5)时通知给内核1。然后,核心2需要在t = 5时使高速缓存2无效,而核心1会在t = 7时使行无效。现在两行都无效,并且内核1和内核2写入的数据丢失。这显然不遵循协议。我的逻辑有什么问题,以及如何防止这种废话?
答案 0 :(得分:1)
两个内核必须彼此同意才能进行更新。您可以通过史努比或基于目录的协议来执行此操作。因此,在您的示例中,缓存不能更改其状态,而可以请求更改。谁赢得仲裁,谁就可以更改为修改,而另一个人则无效。
These slides似乎很好地概括了它。您想看一下第20张幻灯片以史努比协议为例。