在Arm架构中,data caches是物理标记(physically tagged)的。物理地址包括该行来自哪个地址空间,如下所示:
对于NP:0x800000的缓存查找永远不会命中使用SP:0x800000标记的缓存行。这是因为NP:0x800000和SP:0x800000是不同的地址。
这也影响缓存维护操作。考虑前面图表中的示例数据缓存。如果虚拟地址va1映射到物理地址0x800000,当软件从非安全状态发出DC IVAC, va1(通过虚拟地址进行数据或统一缓存行使失效)操作时会发生什么?
答案是,在非安全状态下,所有虚拟地址都会转换为非安全物理地址。因此,va1映射到NP:0x800000。缓存仅在包含指定地址的行上操作,本例中为NP:0x800000。包含SP:0x800000的行不受影响。
检查您的知识
如果我们从安全状态执行相同的操作,va1仍然映射到NP:0x800000,哪些缓存行会受到影响?
与先前的示例类似,缓存使无效包含指定物理地址的行,即NP:0x800000。操作来自安全状态的事实并不重要。
是否可能在从非安全状态针对安全行的情况下通过虚拟地址执行缓存操作?