收藏 分享(赏)

计算机组成原理cache论文-缓存一致性的解决方案 p10.doc

上传人:cjc2202537 文档编号:1051452 上传时间:2018-06-08 格式:DOC 页数:10 大小:104.50KB
下载 相关 举报
计算机组成原理cache论文-缓存一致性的解决方案 p10.doc_第1页
第1页 / 共10页
计算机组成原理cache论文-缓存一致性的解决方案 p10.doc_第2页
第2页 / 共10页
计算机组成原理cache论文-缓存一致性的解决方案 p10.doc_第3页
第3页 / 共10页
计算机组成原理cache论文-缓存一致性的解决方案 p10.doc_第4页
第4页 / 共10页
计算机组成原理cache论文-缓存一致性的解决方案 p10.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、缓存一致性的解决方案摘要:随着计算机技术的飞速发展,CPU 时计算机组成的核心部分,提高 CPU 的性能一直是一个很重要的课题,所以 CPU 从单核提高到多核,但是总会有一些技术上的难题需要解决,这其中,Cache 的一致性问题的解决就推动计算机多核的发展,解决一致性人们提出了一些协议,这其中比较好的解决方案是 MESI 协议,MESI 协议通过监视机制,实时监视总系的事务,当修改某一缓存时,通过通知其它同样持有同一内容的缓存来保持缓存的一致性。这一协议是目前比较好的解决缓存一致性问题的解决方案,本篇文章就这一经典协议做了分析与总结。关键词:缓存 一致性 窥探 协议引言现代的 CPU 上,大部

2、分都需要通过缓存来进行内存访问,由于物理架构的原因,CPU 没有管脚直接连到内存,所以 CPU 的读/写(以及取指令)单元正常情况下不能进行直接内存访问。相反,CPU 和一级缓存通讯,而一级缓存才能和内存通讯 。而现在又大多有了二级缓存,甚至三级缓存。缓存是分段(line)的,即下文要用的“缓存段” (cache line) ,当我们提到”缓存段”的时候,就是指一段和缓存大小对齐的内存,而不关心里面的内容是否真正被缓存进去。当 CPU 看到一条读内存指令时,它会把内存地址传递给一级数据缓存,一级数据缓存会检查它是否有这个内存地址对应的缓存段,没有的话,它会把对应的缓存段加载进来。如果进行的是读

3、操作,这就很简单,所有级别的缓存都遵循以下规律:在任意时刻,任意级别缓存中的缓存段的内容,等同于它关联内存中的内容。如果进行写操作,情况就会变得复杂些,一般分为两种基本的写模式:直写(write-through)和回写(write-back) 。直写简单一点:透过缓存,直接把数据写到下一级内存中,如果对应的段被缓存了,就更新缓存中的内容,同样遵循前面的定律:缓存中的段永远和它关联内存的内容匹配。回写相对复杂一些,回写模式下不会立即把数据传递给下一级,而是仅仅修改本级缓存中的内容,并将其标记为“脏段” , “脏段”会在触发回写,就是将缓存段中的内容传递给下一级,然后脏段又变干净了,即当一个脏段被

4、丢弃了,总是要进行一次回写,在回写模式中,去掉了“任意时刻”这个修饰词,而是以相对弱化的条件代替它:缓存段干净时,缓存段的内容和内存一致;缓存段是脏段时,缓存段中的内容最终要回写到内存中,也就是说可以允许关联内存不和缓存内容同步,但最终要同步。问题由来在计算机中,Cache 的出现是为了 CPU 访问内存的速度,只有一个 CPU 时,不会出现必将难处理的情况,但是有多个 CPU 时,会出现一个难解决的问题:Cache 的一致性如何保证。具体情况是,多组缓存会共同持有一块内存的内容,如果某一缓存修改了这块内存的内容,那么其它缓存中就不知道这个情况,就会造成缓存的不一致问题,想要解决问题,如果让多

5、个 CPU 公用一个缓存,每当有指令时,让这些 CPU 一个一个执行指令,所以每次只有一个 CPU 在执行指令,虽然这样可以解决缓存不一致问题,但这样会太浪费时间,效率太低,问题的根源在于有多组缓存,而上面的方法是一组缓存,所以如果将多组缓存看成一组缓存,看似很难实现,但这确实是可行的,为了实现这样的想法,缓存一致性协议就应运而生了,这个协议就是能够保证缓存内容的一致性,使多核的效率很大地提高。缓存一致性协议又有好几种,目前多数计算机都采用的使“窥探(snooping) ”协议,这就是本文的主要讲的协议。“窥探”机制窥探一种是缓存中的窥探器监视总线事务的机制,它的目标是为了处理好缓存一致性的问

6、题,这个机制是 Ravishankar 和 Goodman 在 1983 年提出的。当一个特定的数据被多个缓存共享时,并且有一个处理器要修改这个共享数据,那么必须要通知其它拥有这个数据拷贝的缓存。否则,就会违背缓存一致性。这个数据更改通知就可以通过监视总线来完成。所有的监视器监视总线上的每个事务,如果总线上有一个修改共享缓存块事务,相应的监视器就会确保缓存的一致性。所谓的修改也就是在上面有提到两种写模式,在直写模式下,没有问题,因为写操作一执行,它的效果是立即显现的,不会有停留。但是如果存在回写模式,就会出现问题,因为有可能在写指令执行过后很久,才会触发回写,数据被写回内存中去(这是由于回写机

7、制决定的) 在这段时间内,就可能会出现其它处理器的缓存也去写这块内存,这样就情况就变得不好处理。在回写模型中,如果仅仅把写操作信息通知给其它处理器是不够的,由于回写机制会有时间延迟,所以我们还要做的是,在修改之前就要通知其它处理器,这样就可以避免其它处理器也去写这块内存。具体想法有了,人们就提出来解决这个问题的目前最有效的方案,就是 MESI 协议(Modified 、Exclusive、Shared、Invalid) 。MESI 协议MESI 是四种缓存状态英文首字母的缩写,并且规定多核体统中的 cache line 都只处于这四种状态。 已修改(Modified)缓存段,表明 cache

8、line 对应的 memory 仅在一个 Cache中被缓存了,而且其在 Cache 中的缓存与在内存中的值也是不一致的! 独占(Exclusive)缓存段,表明 cache line 对应的 memory 仅在一个 Cache 中被缓存了,并且其在缓存中的内容与内存中的内容一致。 共享(Shared)缓存段,表明 cache line 对应的 memory 在多个 Cache 中被缓存了,并且所有缓存中的内容与在内存中的内容一致。 失效(Invalid)缓存段,表明当前缓存段无效。操作状态的转换基于两个激发。第一个激发是:处理器本身发出读或写请求,当一个 CPU 在 Cache 中有一个缓存

9、段,并且CPU 需要从这个缓存段中读或写。第二个激发是:来自于其它处理器,没有该缓存段或者在本 Cache 里已经更新数据,而在其它处理器中的 Cache 还没有更新。总线请求被“窥探器”一直窥探着。写操作:如果 cache line 是 M 或 E 状态,那么它只能被写。也即在这两种状态下,处理器是独占 cache line 的,所以不会有任何冲突。如果是 S 状态,必须先发送 Requerst-For-Ownership 让其它 Cache 中关联到同一内存地址的 cache line 变为 I 状态后才能被写。读操作:一个缓存中有 M 状态的 cache line,必须“窥探 ”所有内存

10、关联 Cache 的读操作,并且监听到读操作后,可以使读操作延迟,然后写回主存并将该 cache line 置为 S 状态。若是 E 状态的 cache line,同样“窥探”所有内存关联 Cache 的读操作,并在监听到读操作后将其状态有 E 置为 S 状态。一个缓存中有 S 状态的 cache line,必须监听来自其它缓存的弃用或申请主权广播,在收到广播后弃用该 cache line,置其于 I 状态。Read For Ownership 是一个缓存一致性里组合一个读和一个丢弃的广播的操作。该操作是一个处理器尝试写一个处于 S 或 I 状态的 cache line,这个操作引起所有其它缓

11、存置这样的cache line 于状态 I,一个这个操作是独占的,它给缓存带来数据并丢弃其它所有的 cache line。结论本文就为解决缓存一致性的 MESI 协议进行了分析,通过 MESI 协议能够很好地处理多核情况下缓存一致性的问题,是比较好的解决方式,是值得程序员们深入理解的一套协议。PaperPass 检测报告简明打印版比对结果(相似度):26.13%编号:VIP20161028213615649标题:计算机组成原理 cache 论文长度:2611 字符(不计空格)句子数:83 句时间:2016-10-28 21:36:15对比库:学术期刊、学位论文、会议论文、互联网资源相似资源列表

12、:1.相似度:11.86%篇名:Cache 中被缓存了,并且所有缓存中的内容与在内存中的内容一致。 2.相似度:88.89%篇名:MESI 协议3.相似度:6.25%篇名:MESI 是四种缓存状态英文首字母的缩写,并且规定多核体统中的 cache line 都只处于这四种状态。 4.相似度:15.52%篇名:Read For Ownership 是一个缓存一致性里组合一个读和一个丢弃的5.相似度:47.89%篇名:U 没有管脚直接连到内存,所以 CPU 的读/写(以及取指令)单元正常情况下不能进6.相似度:11.27%篇名:ache 的读操作,并且监听到读操作后,可以使读操作延迟,然后写回主存

13、并将该 cache line 置为 S 状态。 7.相似度:34.29%篇名:e-through)和回写(write-back) 。 8.相似度:43.42%篇名: 在这段时间内,就可能会出现其它处理器的缓存也去写这块内存,这样就情况就变得9.相似度:16.67%篇名:“ 窥探”机制10.相似度:15.38%篇名: 一个缓存中有 S 状态的 cache line,必须来自其它缓存的监听弃用或申请主11.相似度:18.42%篇名: 不好处理。在回写模型中,如果仅仅把写操作信息通知给其它处理器是不够的,由于回12.相似度:19.64%篇名: 个修改共享缓存块事务,相应的监视器就会确保缓存的一致性。

14、13.相似度:18.42%篇名: 中的内容,并将其标记为“脏段” , “脏段”会在触发回写,就是将缓存段中的内容传14.相似度:26.15%篇名: 仅在一个 Cache 中被缓存了,并且其在缓存中的内容与内存中的内容一致。 15.相似度:12.12%篇名: 仅在一个 Cache 中被缓存了,而且其在 Cache 中的缓存与在内存中的值也是不一致的!16.相似度:15.79%篇名: 令执行过后很久,才会触发回写,数据被写回内存中去(这是由于回写机制决定的)17.相似度:17.81%篇名: 以每次只有一个 CPU 在执行指令,虽然这样可以解决缓存不一致问题,但这样会太浪费时间,效率太低, 18.相

15、似度:8.70%篇名:会出现必将难处理的情况,但是有多个 CPU 时,会出现一个难解决的问题:Cache 的一致性如何保证。 19.相似度:29.63%篇名: 共享(Shared )缓存段,表明 cache line 对应的 memory 在多个20.相似度:48.28%篇名: 关键词:缓存 一致性 窥探 协议21.相似度:13.16%篇名: 具体情况是,多组缓存会共同持有一块内存的内容,如果某一缓存修改了这块内存的内22.相似度:14.06%篇名: 写操作:如果 cache line 是 M 或 E 状态,那么它只能被写。也即在这两种状23.相似度:10.53%篇名: 写机制会有时间延迟,所

16、以我们还要做的是,在修改之前就要通知其它处理器,这样就24.相似度:23.53%篇名: 决一致性人们提出了一些协议,这其中比较好的解决方案是MESI 协议,MESI 协25.相似度:3.77%篇名:前最有效的方案,就是 MESI 协议(Modified、Exclusive、Shared、Invalid) 。 26.相似度:21.05%篇名: 可以避免其它处理器也去写这块内存。具体想法有了,人们就提出来解决这个问题的目27.相似度:10.53%篇名: 回写模式中,去掉了“任意时刻”这个修饰词,而是以相对弱化的条件代替它:缓存段28.相似度:13.16%篇名: 回写相对复杂一些,回写模式下不会立即

17、把数据传递给下一级,而是仅仅修改本级缓存29.相似度:15.79%篇名: 在上面有提到两种写模式,在直写模式下,没有问题,因为写操作一执行,它的效果是30.相似度:12.31%篇名: 在计算机中,Cache 的出现是为了 CPU 访问内存的速度,只有一个 CPU 时,不 31.相似度:39.53%篇名: 失效(Invalid )缓存段,表明当前缓存段无效。 32.相似度:15.71%篇名: 如果让多个 CPU 公用一个缓存,每当有指令时,让这些 CPU一个一个执行指令,所33.相似度:33.33%篇名: 如果进行写操作,情况就会变得复杂些,一般分为两种基本的写模式:直写(writ34.相似度:

18、7.89%篇名:如果进行的是读操作,这就很简单,所有级别的缓存都遵循以下规律:在任意时刻,任35.相似度:16.13%篇名: 存中,也就是说可以允许关联内存不和缓存内容同步,但最终要同步。 36.相似度:13.16%篇名: 容,那么其它缓存中就不知道这个情况,就会造成缓存的不一致问题,想要解决问题, 37.相似度:38.46%篇名: 已修改(Modified)缓存段,表明 cache line 对应的 memory38.相似度:34.21%篇名: 干净时,缓存段的内容和内存一致;缓存段是脏段时,缓存段中的内容最终要回写到内39.相似度:31.25%篇名: 广播的操作。该操作是一个处理器尝试写一

19、个处于 S 或 I 状态的 cache line40.相似度:14.47%篇名: 当一个特定的数据被多个缓存共享时,并且有一个处理器要修改这个共享数据,那么必41.相似度:100.00%篇名: 必须先发送 Requerst-For-Ownership 让其它 Cache 中关联42.相似度:27.69%篇名: 态下,处理器是独占 cache line 的,所以不会有任何冲突。如果是 S 状态, 43.相似度:18.75%篇名: 总线请求被“窥探器”一直窥探着。 44.相似度:59.26%篇名: 意级别缓存中的缓存段的内容,等同于它关联内存中的内容。45.相似度:60.53%篇名: 我们提到”缓

20、存段”的时候,就是指一段和缓存大小对齐的内存,而不关心里面的内容46.相似度:65.79%篇名: 据缓存,一级数据缓存会检查它是否有这个内存地址对应的缓存段,没有的话,它会把对应的缓存段加载进来。 47.相似度:40.00%篇名: 摘要:随着计算机技术的飞速发展,CPU 时计算机组成的核心部分,提高 CPU 的性48.相似度:43.84%篇名: 是否真正被缓存进去。当 CPU 看到一条读内存指令时,它会把内存地址传递给一级数49.相似度:20.37%篇名: 是独占的,它给缓存带来数据并丢弃所有其它的 cache line。 50.相似度:39.47%篇名: 更新缓存中的内容,同样遵循前面的定律

21、:缓存中的段永远和它关联内存的内容匹配。 51.相似度:16.18%篇名: 本文就为解决缓存一致性的 MESI 协议进行了分析,通过MESI 协议能够很好地处52.相似度:3.92%篇名:权广播,在收到广播后弃用该 cache line,置其于 I 状态。 53.相似度:10.81%篇名: 段,并且 CPU 需要从这个缓存段中读或写。 54.相似度:16.67%篇名: 状态的转换基于两个激发。 55.相似度:37.25%篇名: 独占(Exclusive)缓存段,表明 cache line 对应的 memory56.相似度:21.13%篇名: 现代的 CPU 上,大部分都需要通过缓存来进行内存访

22、问,由于物理架构的原因,CP57.相似度:21.05%篇名: 理多核情况下缓存一致性的问题,是比较好的解决方式,是值得程序员们深入理解的一套协议。 58.相似度:32.89%篇名: 直写简单一点:透过缓存,直接把数据写到下一级内存中,如果对应的段被缓存了,就59.相似度:28.95%篇名: 看似很难实现,但这确实是可行的,为了实现这样的想法,缓存一致性协议就应运而生了, 60.相似度:17.11%篇名: 知就可以通过监视总线来完成。所有的监视器监视总线上的每个事务,如果总线上有一61.相似度:7.89%篇名:窥探一种是缓存中的窥探器监视总线事务的机制,它的目标是为了处理好缓存一致性的62.相似

23、度:10.53%篇名: 立即显现的,不会有停留。但是如果存在回写模式,就会出现问题,因为有可能在写指63.相似度:17.65%篇名: 第一个激发是:处理器本身发出读或写请求,当一个 CPU 在Cache 中有一个缓存64.相似度:7.04%篇名:第二个激发是:来自于其它处理器,没有该缓存段或者在本Cache 里已经更新数据65.相似度:17.65%篇名: 缓存一致性协议又有好几种,目前多数计算机都采用的使“窥探(snooping) ”协议,这就是本文的主要讲的协议。 66.相似度:17.74%篇名: 缓存是分段(line )的,即下文要用的“缓存段” (cache line) ,当67.相似度

24、:16.44%篇名: 能一直是一个很重要的课题,所以 CPU 从单核提高到多核,但是总会有一些技术上的68.相似度:18.33%篇名: 若是 E 状态的 cache line,同样“窥探”所有内存关联 Cache的读操作69.相似度:38.89%篇名: 行直接内存访问。相反,CPU 和一级缓存通讯,而一级缓存才能和内存通讯 。而现在又大多有了二级缓存,甚至三级缓存。 70.相似度:10.53%篇名: 议通过监视机制,实时监视总系的事务,当修改某一缓存时,通过通知其它同样持有同一内容的缓存来保持缓存的一致性。 71.相似度:10.94%篇名: 读操作:一个缓存中有 M 状态的 cache lin

25、e,必须“窥探”所有内存关联 C72.相似度:18.42%篇名: 这一协议是目前比较好的解决缓存一致性问题的解决方案,本篇文章就这一经典协议做了分析与总结。 73.相似度:20.97%篇名: 这个协议就是能够保证缓存内容的一致性,使多核的效率很大地提高。 74.相似度:21.05%篇名: 递给下一级,然后脏段又变干净了,即当一个脏段被丢弃了,总是要进行一次回写,在75.相似度:15.79%篇名: 问题的根源在于有多组缓存,而上面的方法是一组缓存,所以如果将多组缓存看成一组缓存, 76.相似度:21.15%篇名: 问题,这个机制是 Ravishankar 和 Goodman 在 1983 年提出

26、的。77.相似度:22.54%篇名: 难题需要解决,这其中,Cache 的一致性问题的解决就推动计算机多核的发展,解78.相似度:15.79%篇名: 须要通知其它拥有这个数据拷贝的缓存。否则,就会违背缓存一致性。这个数据更改通79.相似度:19.05%篇名: ,并在监听到读操作后将其状态有 E 置为 S 状态。 80.相似度:32.43%篇名: ,而在其它处理器中的 Cache 还没有更新。 81.相似度:15.38%篇名: ,这个操作引起所有其它缓存置这样的 cache line 于状态 I,一个这个操作全文简明报告:缓存一致性的解决方案摘要:随着计算机技术的飞速发展,CPU 时计算机组成的

27、核心部分,提高 CPU 的性能一直是一个很重要的课题,所以 CPU 从单核提高到多核,但是总会有一些技术上的难题需要解决,这其中,Cache 的一致性问题的解决就推动计算机多核的发展,解决一致性人们提出了一些协议,这其中比较好的解决方案是 MESI 协议,MESI 协议通过监视机制,实时监视总系的事务,当修改某一缓存时,通过通知其它同样持有同一内容的缓存来保持缓存的一致性。这一协议是目前比较好的解决缓存一致性问题的解决方案,本篇文章就这一经典协议做了分析与总结。关键词:缓存 一致性 窥探 协议引言现代的 CPU 上,大部分都需要通过缓存来进行内存访问,由于物理架构的原因,CPU 没有管脚直接连

28、到内存,所以 CPU 的读/写(以及取指令)单元正常情况下不能进行直接内存访问。相反,CPU 和一级缓存通讯,而一级缓存才能和内存通讯 。而现在又大多有了二级缓存,甚至三级缓存。缓存是分段(line)的,即下文要用的“缓存段” (cache line) ,当我们提到”缓存段”的时候,就是指一段和缓存大小对齐的内存,而不关心里面的内容是否真正被缓存进去。当 CPU 看到一条读内存指令时,它会把内存地址传递给一级数据缓存,一级数据缓存会检查它是否有这个内存地址对应的缓存段,没有的话,它会把对应的缓存段加载进来。如果进行的是读操作,这就很简单,所有级别的缓存都遵循以下规律:在任意时刻,任意级别缓存中

29、的缓存段的内容,等同于它关联内存中的内容。如果进行写操作,情况就会变得复杂些,一般分为两种基本的写模式:直写(write-through)和回写(write-back) 。直写简单一点:透过缓存,直接把数据写到下一级内存中,如果对应的段被缓存了,就更新缓存中的内容,同样遵循前面的定律:缓存中的段永远和它关联内存的内容匹配。回写相对复杂一些,回写模式下不会立即把数据传递给下一级,而是仅仅修改本级缓存中的内容,并将其标记为“脏段” , “脏段”会在触发回写,就是将缓存段中的内容传递给下一级,然后脏段又变干净了,即当一个脏段被丢弃了,总是要进行一次回写,在回写模式中,去掉了“任意时刻”这个修饰词,而

30、是以相对弱化的条件代替它:缓存段干净时,缓存段的内容和内存一致;缓存段是脏段时,缓存段中的内容最终要回写到内存中,也就是说可以允许关联内存不和缓存内容同步,但最终要同步。问题由来在计算机中,Cache 的出现是为了 CPU 访问内存的速度,只有一个 CPU 时,不会出现必将难处理的情况,但是有多个 CPU 时,会出现一个难解决的问题:Cache 的一致性如何保证。具体情况是,多组缓存会共同持有一块内存的内容,如果某一缓存修改了这块内存的内容,那么其它缓存中就不知道这个情况,就会造成缓存的不一致问题,想要解决问题,如果让多个 CPU 公用一个缓存,每当有指令时,让这些 CPU 一个一个执行指令,

31、所以每次只有一个 CPU 在执行指令,虽然这样可以解决缓存不一致问题,但这样会太浪费时间,效率太低,问题的根源在于有多组缓存,而上面的方法是一组缓存,所以如果将多组缓存看成一组缓存,看似很难实现,但这确实是可行的,为了实现这样的想法,缓存一致性协议就应运而生了,这个协议就是能够保证缓存内容的一致性,使多核的效率很大地提高。缓存一致性协议又有好几种,目前多数计算机都采用的使“窥探(snooping) ”协议,这就是本文的主要讲的协议。“窥探”机制窥探一种是缓存中的窥探器监视总线事务的机制,它的目标是为了处理好缓存一致性的问题,这个机制是 Ravishankar 和 Goodman 在 1983

32、年提出的。当一个特定的数据被多个缓存共享时,并且有一个处理器要修改这个共享数据,那么必须要通知其它拥有这个数据拷贝的缓存。否则,就会违背缓存一致性。这个数据更改通知就可以通过监视总线来完成。所有的监视器监视总线上的每个事务,如果总线上有一个修改共享缓存块事务,相应的监视器就会确保缓存的一致性。在上面有提到两种写模式,在直写模式下,没有问题,因为写操作一执行,它的效果是立即显现的,不会有停留。但是如果存在回写模式,就会出现问题,因为有可能在写指令执行过后很久,才会触发回写,数据被写回内存中去(这是由于回写机制决定的) 在这段时间内,就可能会出现其它处理器的缓存也去写这块内存,这样就情况就变得不好

33、处理。在回写模型中,如果仅仅把写操作信息通知给其它处理器是不够的,由于回写机制会有时间延迟,所以我们还要做的是,在修改之前就要通知其它处理器,这样就可以避免其它处理器也去写这块内存。具体想法有了,人们就提出来解决这个问题的目前最有效的方案,就是 MESI 协议(Modified、Exclusive、Shared、Invalid) 。MESI 协议MESI 是四种缓存状态英文首字母的缩写,并且规定多核体统中的 cache line 都只处于这四种状态。 已修改(Modified)缓存段,表明 cache line 对应的 memory 仅在一个 Cache中被缓存了,而且其在 Cache 中的缓

34、存与在内存中的值也是不一致的! 独占(Exclusive)缓存段,表明 cache line 对应的 memory 仅在一个 Cache 中被缓存了,并且其在缓存中的内容与内存中的内容一致。 共享(Shared)缓存段,表明 cache line 对应的 memory 在多个 Cache 中被缓存了,并且所有缓存中的内容与在内存中的内容一致。 失效(Invalid)缓存段,表明当前缓存段无效。操作状态的转换基于两个激发。第一个激发是:处理器本身发出读或写请求,当一个 CPU 在 Cache 中有一个缓存段,并且CPU 需要从这个缓存段中读或写。第二个激发是:来自于其它处理器,没有该缓存段或者在

35、本 Cache 里已经更新数据,而在其它处理器中的 Cache 还没有更新。总线请求被“窥探器”一直窥探着。写操作:如果 cache line 是 M 或 E 状态,那么它只能被写。也即在这两种状态下,处理器是独占 cache line 的,所以不会有任何冲突。如果是 S 状态,必须先发送 Requerst-For-Ownership 让其它 Cache 中关联到同一内存地址的 cache line 变为 I 状态后才能被写。读操作:一个缓存中有 M 状态的 cache line,必须“窥探 ”所有内存关联 Cache 的读操作,并且监听到读操作后,可以使读操作延迟,然后写回主存并将该 cac

36、he line 置为 S 状态。若是 E 状态的 cache line,同样“窥探”所有内存关联 Cache 的读操作,并在监听到读操作后将其状态有 E 置为 S 状态。一个缓存中有 S 状态的 cache line,必须来自其它缓存的监听弃用或申请主权广播,在收到广播后弃用该 cache line,置其于 I 状态。Read For Ownership 是一个缓存一致性里组合一个读和一个丢弃的广播的操作。该操作是一个处理器尝试写一个处于 S 或 I 状态的 cache line,这个操作引起所有其它缓存置这样的cache line 于状态 I,一个这个操作是独占的,它给缓存带来数据并丢弃所有其它的 cache line。结论本文就为解决缓存一致性的 MESI 协议进行了分析,通过 MESI 协议能够很好地处理多核情况下缓存一致性的问题,是比较好的解决方式,是值得程序员们深入理解的一套协议。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报