上一期中我们介绍了ARMv8-A架构中的地址转换机制和访问控制机制,这一期我们将考察ARMv8-A架构中的应用级内存模型(Application Level Memory Model)。
一、ARMv8-A架构的应用内存模型
应用级内存模型指的是从应用软件的视角来观察和操作处理器的内存行为而形成的模型。ARM v8-A 架构中的内存主要有两种类型:
-
Normal类型:对该种类型的内存可以进行常见的读写操作或只读操作,系统中大部分内存都是这种类型;
-
Device类型:对该种类型的内存进行读写可能具有连带效应(side-effects,指对一个内存位置的读写操作会影响其它内存位置)或者从该种内存中的一个位置装载的值可能随着装载的次数而变化。通常内存映射外设(指使用访问内存的方法来访问的外设)会采用这种内存类型。
Normal类型和Device类型的内存有不同的内存属性[2]:
上表中Shareability是与一致性有关的内存属性,用来指示一个内存位置对于一些处理器是否是可共享的。共享意味着需要硬件保证一个内存位置中的内容对一定范围内可访问该位置的多个处理器是一致。Shareability属性有Non-shareable、InnerShareable和Outer Shareable三个选项,其含义为:
-
Non-shareable:该内存位置一般只能被唯一处理器访问,如果还有其他处理器能访问该位置,可能需要软件用缓存一致性指令来保证缓存一致性[3];
-
Inner Shareable: 该内存位置可以被InnerShareability domain 中的所有处理器访问,并且硬件保证该位置在这些处理器间的数据一致性,InnerShareability domain中的处理器一般被同一个虚拟机监视器或操作系统控制;
-
Outer Shareable: 该内存位置可以被OuterShareability domain中的所有处理器访问,并且硬件保证该位置在这些处理器间的数据一致性,InnerShareability domain 是OuterShareability domain的一个子集,但不要求是真子集。
内存属性Cacheability表示一个内存位置是否可以被分配到缓存中,这个内存属性有Non-cacheable、Write-ThrouthCacheable和Write-BackCacheable三种选项,其含义为:
-
Non-cacheable:不使用缓存,直接更新内存;
-
Write-Throuth Cacheable:同时更新缓存和内存;
-
Write-BackCacheable:先更新缓存,替换时将修改过的块写回内存。
一般来说,靠近处理器的缓存延迟较少但容量较小、价格较高。ARMv8架构采取多层存储来平衡容量和延迟,从而提升整体性能。下图体现了一个典型的ARMv8架构处理器的多级存储系统[1]:
ARMv8架构中存储一致性的内容较为复杂,涉及指令的使用和一致性模型,因此我们专门使用两期来介绍。
二、结语
本期我们考察了ARMv8-A架构的缓存机制,下一期中我们分析一下ARMv8架构的存储一致性模型。
参考文献
-
ARM® Architecture Reference Manual ARMv8, for ARMv8-A architecture profile
-
https://blog.csdn.net/shenhuxi_yu/article/details/90617675
-
https://www.cnblogs.com/zhengshuangxi/p/11180610.html