B2.1 About the Arm Memory Model的解析与讨论

242 阅读2分钟

大家好,

如第一篇文章所说,今天开始ARM架构的解析与讨论。重点关注架构层面,Memory Model、Exception、Interrupt等。个人见解,可能有偏颇,欢迎大家指正。

ARM架构解析与讨论,基于DDI0487G_b_armv8_arm.pdf版本中A64部分。(不讨论A32部分)

在文章中,会逐个章节讨论。

本文是B2 The AArch64 Application Level Memory Model章节中的B2.1 About the Arm Memory Model节的overview内容。是B2章节内容的开始。

[原文]:

[解析与讨论]:

ARM架构的memory model是weak memory model,它允许memory访问的可见与完成的顺序与程序实际顺序不一致。这里提到的可见与完成,对于Store指令来说,可见与完成由两方面含义:

(1) 本地可见,即执行此Store指令的处理器可见。任何与此地址相关的read都能看到Store的数据。

(2) 全局可见,即在一个Coherence Domain下,多个Observer都可能看到。

这里讨论的可见指的是全局可见。

一般来说,处理器要进行memory访问,需要执行Load/Store等指令。

从程序执行顺序看,Load/Store指令的生命周期是:

(1) 对于Load指令:一般来说,Fetch->Decode->Read Memory->Write Back->Retire. 如果架构允许Load指令产生异步异常,生命周期可以为:Fetch->Decode->Start to Read Memory->Retire.

(2) 对于Store指令:Fetch->Decode->Commit To Store Buffer->Complete->Retire

从memory访问可见与完成角度看,由Load/Store指令产生的Memory访问的生命周期略有不同:

(1) 对于Load指令:一般来说,Fetch->Decode->Read Memory->Write Back. Write Back写回目的寄存器后,Load指令的memory访问达到了可见及完成。

(2) 对于Store指令:一般来说,Fetch->Decode->Commit To Store Buffer->Write Memory-> Get Write Response. Get Write Response后,Store指令的memory访问达到了可见及完成。比如对于Non-Cacheable/Device的访问,从PoS或者Main Memory返回的BRESP (ACE协议)或者TXRSP(CHI协议)后,Store指令的memory访问达到了可见及完成。对于Cacheable的访问,拿到了Cacheline的Ownership即达到了可见,写进Cache后,达到了完成。

综上,可以看到:

(1) 对于Load指令,一般来说,程序顺序和memory访问的可见与完成顺序是一样的。

对于Store指令,一般来说,程序顺序和memory访问的可见与完成顺序是不一样的。这也是为什么Weak Memory Model架构中需要Barrier的原因。

\

版权声明©

本文内容是作者原创,如果转载、复制、传播本文内容,请先征得作者同意,并注明出处。