Arm Cortex A9内存访问

加内什·卡尔布尔

我想知道ARM内核(Cortex-A系列处理器)访问内存的顺序吗?从内核生成的虚拟地址直接到内存,以及从内存传输到内核的指令/数据。考虑到内核已经为某些数据/指令生成了虚拟地址,而TLB却未命中,那么地址如何到达主存储器(如果我没记错的话,是DRAM)以及数据如何通过L2和L1缓存到达内核。

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

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

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

虚假的噪音

tl; dr-随便你。ARM具有高度的灵活性,并且SOC供应商和/或系统程序员可以根据最终设备的功能和需求,使内存子系统做很多不同的事情。

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

有些术语是

  1. PoC -连贯点。
  2. PoU -统一点。
  3. 强烈下令
  4. 设备
  5. 普通的

许多MMU属性和缓存可能会受到不同的CP15和配置寄存器的影响。例如,L1缓存中数据的“专有配置”永远不会在L2中,这使得干净编写自修改代码和其他动态更新特别困难因此,即使对于特定的Cortex-A模型,系统配置也可能会发生变化(写回/直写,写分配/不写分配,可缓冲,不可缓存等)。

一般DDR核心记忆体的典型顺序是:

  1. 解决病毒-> PHY
    1. 微型TLB存在吗?是的,有`phys`
    2. TLB存在吗?是的,有`phys`
    3. 表走。有“ phys”或故障。
  2. 访问标记为可缓存?是的,是2.1。没有步骤4。
    1. 在L1缓存中?是2b。
    2. 如果读取返回数据。如果写入,则填充数据并标记为空白(回写)。
  3. 在二级缓存中?是的3.1
    1. 如果读取返回数据。如果写入,则填充数据并标记为空白(回写)。
  4. 在AXI总线上运行物理周期(可能会路由到子总线)。

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

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

在正常情况下,这些只是缓存命中。如果它是“直写”和“写”的,则该值将在高速缓存中更新并写入内存。如果是“回写”,则值将在高速缓存中更新并标记为脏。注意1:如果是读操作,则使用高速缓存(两种情况下)。

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

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

MMU主要将为缓存提供信息以解析地址。MMU可能会说使用/不使用缓存。它可能告诉缓存可以“组合”在一起写入(可写缓冲),但不应无限期地存储它们,等等。因此,许多MMU说明符可以有选择地更改缓存的行为。由于未定义Cortex-A缓存参数(取决于每个SOC制造商),因此通常,特定MMU位在不同系统上可能具有替代行为。

注意1:“脏高速缓存”可能具有排除访问信息strexldrex类型访问的其他“广播”

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ARM Cortex A9第二执行单元

来自分类Dev

ARM Cortex-M 内存访问

来自分类Dev

ARM Cortex A7:避免使用内存贴面吗?

来自分类Dev

什么是ARM Cortex CPU的内存保护策略?

来自分类Dev

ARM cortex A9中的处理器间中断(如何在Linux中为软件生成的中断(ARM)编写处理程序?)

来自分类Dev

为什么GCC会对ARM Cortex-A9产生非法的未对齐访问

来自分类Dev

在Zynq中发送处理器间中断(arm-v7 / cortex-a9)

来自分类Dev

ARM Cortex-A9软件生成的中断仅触发一次

来自分类Dev

像cortex-a9这样的ARM处理器是否使用微码?

来自分类Dev

您可以帮助我了解ARM Cortex-A9上的缓存行为吗?

来自分类Dev

未对齐的访问会导致ARM Cortex-M4出错

来自分类Dev

ARM Cortex-M3启动代码

来自分类Dev

ARM Cortex M3:原子写入

来自分类Dev

在ARM Cortex-A上启用MMU的问题

来自分类Dev

多核ARM A9上的NOP

来自分类Dev

如何使用C的内联汇编器访问ARM Cortex M3的r11寄存器

来自分类Dev

ARM Cortex-R4F,缓存和MPU

来自分类Dev

想要用C ++编写Arm Cortex交叉汇编器

来自分类Dev

检索ARM Cortex M0上异常的返回地址

来自分类Dev

ARM Cortex M4硬故障-浮点

来自分类Dev

Ocaml是否适用于ARM cortex M4?

来自分类Dev

如何释放ARM Cortex M3堆栈

来自分类Dev

确定ARM Cortex-M系列上函数的返回地址

来自分类Dev

ARM Cortex M0的程序等效项是什么?

来自分类Dev

ARM Cortex A53-硬件虚拟化功能

来自分类Dev

重新分配覆盖变量(Zynq SoC(Cortex A9)上的Xilinx SDK)

来自分类Dev

ARM Cortex M3上的int64_t原子

来自分类Dev

适用于ARM Cortex-m3的llsr和llsl(64位移位)

来自分类Dev

在ARM Cortex-a8 BeagleBone Black上计算时钟周期计数

Related 相关文章

热门标签

归档