手臂皮质a9内存访问

时间:2015-04-15 02:14:06

标签: arm cpu-cache mmu cortex-a

我想知道ARM内核(Cortex-A系列处理器)访问内存的顺序?从核心到内存生成的虚拟地址和从内存传输到核心的指令/数据。考虑到核心为某些数据/指令生成了一个虚拟地址,并且TLB未命中,那么地址如何到达主存储器(如果我没有错误则是DRAM)以及数据如何通过L2和L1缓存进入核心。

如果所需的数据/指令已经在L1缓存中怎么办?

如果所需的数据/指令已经存在于L2缓存中,该怎么办?

我对缓存和MMU通信感到困惑。

1 个答案:

答案 0 :(得分:1)

tl; dr - 无论你想要什么。 ARM非常灵活,SOC供应商和/或系统程序员可能会根据终端设备的功能和需求,使内存子系统做很多不同的事情。

首先,MMU具有明确规定如何使用缓存的字段。我建议阅读 Cortex-A系列程序员指南第9章高速缓存第10章内存管理单元

有些术语是,

  1. PoC - 一致性。
  2. PoU - 统一点。
  3. Strongly ordered
  4. Device
  5. Normal
  6. 许多MMU属性和缓存可能受到不同CP15和配置寄存器的影响。例如,一个独家配置'对于L1高速缓存中的数据永远不会在L2中使得干净地编写自修改代码和其他动态更新变得特别困难。因此,即使对于特定的Cortex-A模型,系统配置也可能会改变(回写/直写,写分配/无写分配,可缓冲,不可缓存等)。

    通用DDR核心存储器的典型序列是

        
    1. 解决virt - >的PHY
    2.   
          
      1. Micro TLB存在?是的,有`phys`
      2.   
      3. TLB在场?是的,有`phys`
      4.   
      5. 桌子走路。有`phys`或错误。
      6.      
      7. 访问标记可缓存?是的2.1。没有第4步。
      8.   
            
        1. 在L1缓存中?是2b。
        2.   
        3. 如果读取返回数据。如果写入填充数据并标记drity(写回)。
        4.      
        5. 在L2缓存中?是3.1
        6.   
              
          1. 如果读取返回数据。如果写入填充数据并标记drity(写回)。
          2.      
          3. 在AXI总线上运行物理周期(may route to sub-bus)。
          4.   

            如果所需的数据/指令已经在L1缓存中怎么办?

                 

            如果所需的数据/指令已经存在于L2缓存中,该怎么办?

            对于正常情况,这些只是缓存命中。如果它是一个直写的'并且'写'然后在缓存中更新该值并将其写入内存。它是回写'该值在缓存中更新并标记为脏。 Note1 如果是读取,则使用缓存(在这两种情况下)。

            对于设备内存(即内存映射USB寄存器,全局可共享内存,多核/ cpu缓冲区等),系统可能设置完全不同。设置通常取决于系统成本性能功耗。即,直写缓存更容易实现(功耗更低,成本更低),但性能往往更低。

              

            我对缓存和MMU通信感到困惑。

            主要是MMU将为缓存提供解析地址的信息。 MMU可以说使用/不使用缓存。它可能会告诉缓存它可以帮助' gang'一起写(write-bufferable),但不应无限期地存储它们等等。因此许多MMU说明符可以有选择地改变缓存的行为。由于未定义Cortex-A高速缓存参数(由每个SOC制造商决定),通常情况下特定MMU位可能在不同系统上具有替代行为。

            注1 :'脏缓存'可能有额外的广播' strexldrex类型访问的排除监视器信息。