阅读445 返回首页    go 阿里云 go 技术社区[云栖]


计算机体系结构5_缓存一致性协议

一,AMD64缓存一致性协议

        通过缓存一致性协议保证各个缓存之间,缓存与主存之间,多处理器之间的数据一致性。AMD64的缓存一致性协议为MOESI(modified, owned, 

exclusive,shared,invalid)协议。

               

                 当cache line没有保存有效的数据时,被称作invalid,有效的数据可以来自主存或者其他处理器的缓存。

                 

                 当cache line保存的数据为最近,最新的,被拷贝的数据在主存中也为最近,最新的数据,同时其他处理器没有持有此数据的拷贝,

                 称作exclusive

                  

                 当cache line保存的数据为最近,最新的,其他处理器持有此数据的拷贝,称作shared。当其他处理器以owned模式持有此数据,则当前数

                 据在主存中也为最近最新的。

                 

                  当cache line保存的数据为最近,最新的,在主存中的数据为过时的,没有其他处理器持有此数据的拷贝,称作modified

                  

                  当cache line保存的数据为最近,最新的,称作owned。owned与shared相似之处在于,其他处理器可以持有此数据最近,最新的拷贝,

                  与shared不同在于,主存中此数据可能为过时的。一份数据只可以有一个处理器持有其owned状态,其他处理器对此数据持有shared状态。

二,AMD64缓存一致性状态图

        下图为软件观点的,多种访存操作驱动的MOESI状态图:

                          

                 

                     为了保证内存的一致性,其他具有内部缓存的处理器在缓存数据时,需要获取最新的数据拷贝,此拷贝可以在主存中或者在其他

                     处理器的内部缓存中。当一个设备访存miss时,探测其他设备的是否持有此数据最新的拷贝,此操作称作probe。如果其他设备、

                     中持有此数据最新的拷贝,它将其提供给请求设备,否则主存提供最新的数据。

                     

                     主要有两类设备probe方式:

                         read probe,指示其他设备请求数据出于读意图。

                         write probe,指示其他设备请求数据出于修改意图。

                      图7-2指出,由probe导致的状态转移包含probe的发起设备和接收设备。一些read probe由那些打算缓存此数据的设备发起,另外一些

                      发起的read probe并不是为了缓存此数据,如I/O设备。

                      

                      读命中不会导致MOESI状态转移,写命中通常导致MOESI状态转移到modified状态。如果cache line已经为modified状态,写命中不会改变

                      它的状态。

    参考:

             AMD64 Architecture Programmer’s Manual Volume 2: System Programming

最后更新:2017-04-03 14:54:06

  上一篇:go 平方根是否为整数
  下一篇:go 信息系统项目管理师考试之历年真题资源大放送(附带个人珍藏论文)