Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 为什么MESI协议需要独占状态_Caching_Computer Architecture_Mesi - Fatal编程技术网

Caching 为什么MESI协议需要独占状态

Caching 为什么MESI协议需要独占状态,caching,computer-architecture,mesi,Caching,Computer Architecture,Mesi,我现在正在学习缓存一致性,但我不太了解MESI协议中独占状态的功能,因为我认为MSI也可以很好地工作 MSI协议的问题是,默认情况下,所有数据都以共享状态加载,即使它不是共享的。当我们将缓存块X从共享状态移动到修改状态时,我们必须向其他缓存发送一个信号,使它们的块X副本无效;如果他们没有块X的副本,那么我们就不必要地浪费总线带宽/周期 程序的常见情况是读取并可能修改未与其他线程共享的数据。通过引入排他状态,我们可以区分这些非共享(排他)数据。当我们修改大部分数据时,我们不必发出多余的无效信号。M

我现在正在学习缓存一致性,但我不太了解MESI协议中独占状态的功能,因为我认为MSI也可以很好地工作

MSI协议的问题是,默认情况下,所有数据都以共享状态加载,即使它不是共享的。当我们将缓存块X从共享状态移动到修改状态时,我们必须向其他缓存发送一个信号,使它们的块X副本无效;如果他们没有块X的副本,那么我们就不必要地浪费总线带宽/周期


程序的常见情况是读取并可能修改未与其他线程共享的数据。通过引入排他状态,我们可以区分这些非共享(排他)数据。当我们修改大部分数据时,我们不必发出多余的无效信号。MESI在功能上与MSI相同,但在常见情况下更为优化。

我了解MESI如何避免第一条不必要的失效消息。但是,我不认为这是一个整体节约。假设C1第一次请求块B。为了让C1将该块标记为独占,难道不需要等待所有其他缓存确认它们也没有副本吗?@Zack我们有L2目录,对吗?它告诉我们该块存储在哪些其他缓存中。如果我们看到二级缓存目录是空的(对于该块),那么我们只是在E状态下加载该块。哪个目录?我以为MSI/MESI在窥探协议。