我想知道ARM内核(Cortex-A系列处理器)访问内存的顺序吗?从内核生成的虚拟地址直接到内存,以及从内存传输到内核的指令/数据。考虑到内核已经为某些数据/指令生成了虚拟地址,而TLB却未命中,那么地址如何到达主存储器(如果我没记错的话,是DRAM)以及数据如何通过L2和L1缓存到达内核。
如果所需的数据/指令已在L1缓存中怎么办?
如果所需的数据/指令已在二级缓存中怎么办?
我对缓存和MMU通信感到困惑。
tl; dr-随便你。ARM具有高度的灵活性,并且SOC供应商和/或系统程序员可以根据最终设备的功能和需求,使内存子系统做很多不同的事情。
首先,MMU具有明确指示如何使用缓存的字段。我建议阅读《Cortex-A系列程序员指南》的第9章缓存和第10章内存管理单元。
有些术语是
许多MMU属性和缓存可能会受到不同的CP15和配置寄存器的影响。例如,L1缓存中数据的“专有配置”永远不会在L2中,这使得干净编写自修改代码和其他动态更新特别困难。因此,即使对于特定的Cortex-A模型,系统配置也可能会发生变化(写回/直写,写分配/不写分配,可缓冲,不可缓存等)。
一般DDR核心记忆体的典型顺序是:
如果所需的数据/指令已在L1缓存中怎么办?
如果所需的数据/指令已在二级缓存中怎么办?
在正常情况下,这些只是缓存命中。如果它是“直写”和“写”的,则该值将在高速缓存中更新并写入内存。如果是“回写”,则值将在高速缓存中更新并标记为脏。注意1:如果是读操作,则使用高速缓存(两种情况下)。
系统的设备内存设置可能完全不同(例如,内存映射的USB寄存器,可共享的世界内存,多核/ cpu缓冲区等)。通常,设置将取决于系统成本,性能和功耗。即,直写式缓存更易于实现(功耗更低,成本更低),但性能通常较低。
我对缓存和MMU通信感到困惑。
MMU主要将为缓存提供信息以解析地址。MMU可能会说使用/不使用缓存。它可能告诉缓存可以“组合”在一起写入(可写缓冲),但不应无限期地存储它们,等等。因此,许多MMU说明符可以有选择地更改缓存的行为。由于未定义Cortex-A缓存参数(取决于每个SOC制造商),因此通常,特定MMU位在不同系统上可能具有替代行为。
注意1:“脏高速缓存”可能具有排除访问信息strex
和ldrex
类型访问的其他“广播” 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句