【方辉专栏】ARM64体系结构编程与实践学习笔记(十) 缓存一致性介绍

0 评论

1. 缓存一致性

缓存一致性是指在采用层次结构存储系统的控制器系统中保证高速缓冲存储器中数据与主存储器中数据相同的机制。

缓存一致性关注的是同一个数据在多个高速缓存和内存中的一致性问题。解决高速缓存的一致性的方法主要是总线监听协议。

缓存一致性根据系统设计的复杂度可以分为两大类:

多核之间的缓存一致性,通常指CPU簇内的处理器内核之间的缓存一致性。
系统之间的缓存一致性,包括CPU簇之间的缓存一致性及全系统间的缓存一致性。

 2. MESI协议

 缓存一致性方案可以通过多种标准方式进行操作。大多数 ARM 处理器使用 MOESI 协议,而 Cortex-A9 使用 MESI 协议。

MESI是四个单词首字母缩写Modified修改,Exclusive独占,Shared共享,Invalid无效,下面就简要介绍一下这四种状态。

M:表示当前CPU的高速缓存中的变量副本是独占的,而且和主存中的变量值不一致,而且别的CPU的flag不可能是这个状态。如果别的CPU想要读取变量的值,不能直接读主内存中的值,而是需要将处于M状态的变量刷新回主内存才可以。
E:表示当前CPU的高速缓存中的变量副本是独占的,别的CPU高速缓存中该变量的副本不能处于该状态,但是,处于E状态的高速缓存变量的值和主内存中的变量值是一致的。
S:处于S状态表示CPU中的变量副本和主存中数据一致,而且多个CPU都可以处于S状态,举例,当多个CPU读取主内存的值的时候高速缓存的flag就处于S状态。
I:表示当前CPU的高速缓存的变量副本处于不合法状态,不可以直接使用,需要从主内存重新读取,flag的初始状态就是I。

该协议的标准实现规则如下:

仅当高速缓存行处于已修改或独占状态时才能进行写入。如果处于 Shared 状态,则必须先使所有其他缓存的副本失效。写入将行移动到修改状态。
缓存可以随时丢弃共享行,变为无效状态。修改后的行首先被写回。
如果一个缓存保持一行处于 Modified 状态,那么从系统中的其他缓存读取数据将从缓存中获取更新的数据。按照惯例,这是通过首先将数据写入主存储器,然后在执行读取之前将高速缓存行更改为共享状态来完成的。
当另一个高速缓存读取该行时,具有处于独占状态的行的高速缓存必须将该行移动到共享状态。
共享状态可能不准确。如果一个缓存丢弃了共享行,另一个缓存可能不知道它现在可以将该行移动到独占状态。

 

相关软件
使用 DS-5,可以轻松地为基于 arm 处理器的平台开发 Linux 应用程序。它降低了学习难度,缩短了开发和测试周期,帮助您快速生成可靠的应用程序。 经济实惠的专业解决方案,适用于以 C/C++ 开发 Linux 和 Android 应
相关阅读