当前位置:文档之家› 基于总线监听的Cache一致性协议分析_汤伟

基于总线监听的Cache一致性协议分析_汤伟

2009年第7期

福建电脑

基于总线监听的Cache一致性协议分析

汤伟,李俊峰

(安阳师范学院河南安阳455000)

【摘要】:片内多处理器系统是当前计算机体系结构研究的热点问题之一。与传统的多处理机系统一样,Cache一致性问题也是片内多处理器系统必须首先解决的问题。本文首先介绍了片内多处理器系统中的Cache一致性问题及其解决方法,然后着重讨论了两种基于总线监听的Cache一致性协议:MSI协议和MESI协议,并对它们进行了分析比较。

【关键词】:片内多处理器;Cache一致性;监听协议;MSI协议;MESI协议

0、引言

随着体系结构的不断进步和生产工艺的快速发展,存储器的访问速度与处理器的运算速度之间的差距越来越显著,使得访存速度成为提高处理器性能的瓶颈。因此,现代计算机都在处理器和主存之间增加了高速缓冲存储器Cache,以弥补处理器与主存之间速度的差异。由此也带来了一个新的问题--Cache 一致性问题。

另一方面,受集成电路制造工艺、体系结构等的影响,单处理器的性能难以进一步提升。因此,片内多处理器得到了快速的发展。片内多处理器的发展也使得Cache一致性问题更为突出。

1、Cache一致性问题及其解决方法

单处理器系统中,Cache一致性问题是指Cache与主存之间数据的一致性问题,而在片内多处理器系统中,每个处理器都有自己私有的Cache,所有处理器共享主存,Cache一致性问题也就变成了多个Cache之间以及Cache与主存之间的数据一致性问题。

单处理器系统中,Cache一致性问题只存在于Cache与主存之间,可通过写贯穿、写回等写策略较好地加以解决,而在片内多处理器系统中,Cache一致性问题存在于多个Cache之间以及Cache与主存之间,解决Cache一致性问题也就需要从两个方面入手,一方面涉及处理器所采用的写策略,另一方面涉及处理器所采用的Cache一致性协议。常用的写策略有写贯穿、写回等。常用的Cache一致性协议可分为两大类:目录协议和监听协议。由于监听协议能使用己经存在的物理连线(通往存储器的总线)来查询Cache的状态,所以在设计中比较常用。监听协议又可分为两类:写更新协议和写无效协议。写更新协议是,某处理器要更新它的Cache中某个共享块时,要在总线上广播具体的修改字及地址,含有该数据块副本的各个Cache同时予以更新;写无效协议是,某处理器要更新它的Cache中某个共享块时,无需广播具体的修改字,只需给出修改字的地址和其它必要的指示信息,使其它Cache中该数据块的副本无效,然后再更新该Cache块。由于在基于总线的片内多处理器系统中总线是最紧张的资源,写无效协议不会给总线带来太大的压力,所以写无效协议几乎已经成为所有实现机制中选择的协议。

2、基于总线监听的Cache一致性协议

基于总线的片内多处理器系统中,常用MSI协议、MESI协议等协议来维护多个Cache中数据的一致性。

2.1MSI协议

MSI协议是一种写无效协议,它利用三个状态来区别Cache 块的状态,分别为:

(1)M:已修改状态,也称为脏状态。该状态表明,该Cache块已被处理器修改过,其中的数据是系统中唯一正确的数据,主存中的相应数据是过时的,其它Cache中该数据块的副本也都是无效的。

(2)S:共享状态。该状态表明,该Cache块未被处理器修改,主存中的相应数据是最新的,其它Cache中也可能有该数据块的有效副本。

(3)I:无效状态。该状态表明,该Cache块中的数据无效。

Cache块的MSI状态除了受本地处理器存储器读写操作的影响之外,还受共享总线上其它处理器存储器读写操作的影响。

(1)本地处理器存储器读写操作对Cache块MSI状态的影响

读命中时,Cache块的状态只可能是已修改状态或共享状态,此时不必访问主存,由Cache提供数据,Cache块的状态不变。

读未命中时,可能是因为要访问的数据不在Cache中,也可能是因为要访问的数据在Cache中,但处于无效状态,此时需要访问主存,取得数据,同时将数据所在主存块调入Cache,Cache 块的状态变为共享状态。

写命中时,若命中的是处于已修改状态的Cache块,则直接更新该Cache块,Cache块的状态不变;若命中的是处于共享状态的Cache块,则在更新该Cache块之前,本地处理器先发出一个写无效信号,使其它Cache中该数据块的副本无效,然后再更新该Cache块,Cache块的状态变为已修改状态。

写未命中时,可能是因为要访问的数据不在Cache中,也可能是因为要访问的数据在Cache中,但处于无效状态,此时需要访问主存,取得数据,同时将数据所在主存块调入Cache,再更新Cache块,Cache块的状态变为已修改状态。本地处理器在访问主存的同时,还会发出一个"读是用于写"信号,供其它处理器监听。

(2)共享总线上其它处理器存储器读写操作对Cache块MSI状态的影响

共享总线上其它处理器读未命中时,需要访问主存取得数据;写命中处于共享状态的Cache块时,会广播一个写无效信号;写未命中时,也需要访问主存,取得数据,同时还会发出一个"读是用于写"信号,所有这些操作本地处理器都可以监听到。

本地处理器若监听到其它处理器正在读本处理器的Cache 中处于已修改状态的Cache块,则抢先将该Cache块写回主存,以确保其它处理器从主存中获得的数据是最新的数据,然后再将该Cache块的状态转换为共享状态。

本地处理器若监听到其它处理器正在读本处理器的Cache 中处于共享状态的Cache块,则不改变该Cache块的状态。

本地处理器若监听到其它处理器正在写本处理器的Cache 中处于共享状态的Cache块,则将该Cache块的状态转换为无效状态。

本地处理器若监听到其它处理器正在写本处理器的Cache 中处于已修改状态的Cache块,也抢先将该Cache块写回主存,然后再将该Cache块的状态转换为无效状态。

MSI协议各个状态之间的转换如图1所示:

MSI协议中共享状态包含了两种情况:其一是仅一个Cache 中有某个数据块的副本;其二是有两个或两个以上的Cache中有同一数据块的副本。不管是那种情况,写命中处于共享状态的Cache块时,都需要在更新该Cache块之前,发出一个写无效信号。对于第二种情况,发出一个写无效信号是必要的,而对于第

58

相关主题