ARMv8-A Memory systems

0x00 Intro

Firmware(or BootLoad)最重要的作用之一就是初始化系统的存储设备。使得处理器能将非易失性存储设备上的代码搬运到RAM中。存储器的初始化涉及到MMU的配置,以及相关指令的使用。为了深刻理解这些指令和配置背后的逻辑,特地学习整理了ARM v8架构的存储系统。
在研究过程中找到了一份ARM官方文档《ARMv8-A Memory Systems Version 1.0》,所以这篇文章其实也是对这份文档的理解过程。主要内容和该文档基本一致,希望原汁原味的可以直接看官方文档。另外,为了减少歧义有些地方直接使用原词汇来表达。

0x01 Memory Model

Memory Model有很多种类型,具体可以参考这篇文章: Jeff Preshing <Weak vs. Strong Memory Models>
ARMv8-A采用的是weakly ordered model。这意味着内存的真实访问顺序和程序编码的load/strore操作顺序并不完全一致

  • 针对读操作,处理器和系统相关硬件通过重组存储器的读顺序来提高数据吞吐量。
  • 针对写操作,通过重组写顺序来降低处理器和外部存储器之间的带宽需求,即降低写操作的时延。

ARMv8-A硬件上通过以下技术来实现memory reorder:

  1. Multiple issue of instructions
    处理器在一个cycle中可以发射和执行多条指令。比如某些指令可能会stall,那后续指令就会先执行。这会导致execute order和program order不一致的情况
  2. Out-of-order execution
    因为指令多发射技术,当相互之间没有依赖关系的指令可以乱序执行。这使得某些指令stall时,不依赖这条指令的其它指令可以继续执行。这也会改变program order
  3. Speculation
    当处理器遇到条件指令时,可处理可以在获得条件之前自己预测一个条件,然后根据这个预测条件去取指并并执行。如果预测正确能提升速度。预取指令的操作就会改变program order
  4. Speculative loads
    如果是通过推测执行的方式从cacheable位置执行load指令,那推测执行的load指令可能会导致cache line的刷新。因为是推测执行的,如果预测条件是错的,那这个cache更新也是多余的。分支预测技术是推测执行技术的基础。因为分支预测后执行的命令就是推测执行的过程。推测执行会将原本非必须的数据提前更新到cache中,这也是导致spectre漏洞的原因。
  5. Load and store optimizations
    处理器在外部memory进行读写会有比较长的时延,为了减少频繁操作降低时延,处理器可能会把几条stores合并成一个访问操作来降低时延。
  6. External memory system
    如果一个设备(slave device)可以被多个其它设备(master device)同时访问。不同master device访问同一个slave device所需要的cycles不同,这也可能会导致大家看到的数据不一致的问题。
  7. Cache coherent multi-core processing
    不同core看到的cache更新顺序可能会不一样,外部memory也如此。
  8. Optimizing compilers
    编译优化也可以重组指令执行顺序。

0x02 Memory type

ARMv8-A定义了两大memory类型,分别是Normal和Device。所有的memory都被配置为这两种类型中的一种。

Normal memory

Normal memory包括 RAM、Flash、ROM。这种类

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值