【方辉专栏】ARM64体系结构编程与实践学习笔记(十) 缓存一致性介绍
发布时间:2022-08-02

摘要: 本文主要对缓存一致性的相关知识进行介绍。

关键字:Armv8、体系结构、缓存一致性、Cache、MESI


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 状态,那么从系统中的其他缓存读取数据将从缓存中获取更新的数据。按照惯例,这是通过首先将数据写入主存储器,然后在执行读取之前将高速缓存行更改为共享状态来完成的。
  • 当另一个高速缓存读取该行时,具有处于独占状态的行的高速缓存必须将该行移动到共享状态。
  • 共享状态可能不准确。如果一个缓存丢弃了共享行,另一个缓存可能不知道它现在可以将该行移动到独占状态。



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


关于亿道电子

亿道电子技术有限公司(英文名称:Emdoor Electronics Technology Co.,Ltd)是国内资深的研发工具软件提供商,公司成立于 2002 年,面向中国广大的制造业客户提供研发、设计、管理过程中使用的各种软件开发工具,致力于帮助客户提高研发管理效率、缩短产品设计周期,提升产品可靠性。

20 年来,先后与 Altium、ARM、Ansys、QT、Adobe、Visu-IT、Minitab、Testplant、EPLAN、HighTec、GreenHills、PLS、Ashling、MSC Software 、Autodesk、Source Insight、TeamEDA、MicroFocus等多家全球知名公司建立战略合作伙伴关系,并作为他们在中国区的主要分销合作伙伴服务了数千家中国本土客户,为客户提供从芯片级开发工具、EDA 设计工具、软件编译以及测试工具、结构设计工具、仿真工具、电气设计工具、以及嵌入式 GUI 工具等等。亿道电子凭借多年的经验积累,真正的帮助客户实现了让研发更简单、更可靠、更高效的目标。


欢迎关注“亿道电子”公众号

了解更多研发工具软件知识