gpt4 book ai didi

arm - ARM在进入向量表时是使用物理地址还是虚拟地址?

转载 作者:行者123 更新时间:2023-12-04 15:53:10 30 4
gpt4 key购买 nike

当启用分页并发生异常时,是否会发生转换表遍历以访问地址 0x00000000 处的异常向量表?

  1. 如果仍然启用分页,那么用户模式进程和向量表如何共享地址 0x00000000 - TTBR(转换表基址寄存器)不会在异常进入时更新并且 TTBR 不是分组寄存器(我们不是在这里谈论安全和非安全世界之间的切换)。
  2. 如果否,那么我们必须使用物理寻址输入异常,在这种情况下现在禁用分页?

最佳答案

When paging is enabled and an exception occurs does a translation table walk occur to access the exception vector table at address 0x00000000?

几乎所有的ARM CPU都有配置异常表地址的方法。所以在大多数系统中,异常向量表不在地址 0x00000000。但是,在发生异常时启用 MMU。 TLB(MMU/页表缓存)将包含向量表物理地址。

在某些 SOC 中,引导向量表可能位于 0x0,但这通常由引导代码重新配置。

  1. If paging is still enabled then how do user mode processes and the vector table both share address 0x00000000 - the TTBR (translation table base register) does not get updated on exception entry and the TTBR is not a banked register (we are not talking here about switching between secure and non-secure worlds).

如果你想要地址为 0x00000000 的向量表,那么除非你禁止它,否则用户空间将看到它。禁止访问 0x0 可能是防止使用 NULL 指针的理想设计。许多操作系统没有从 0x0 开始运行的用户空间,而是像 0x8000 这样的地址。

基于参数的用户空间故障非常有用,因为您可以在开发进程时捕获 NULL 指针访问。我建议始终将其保留,但有些人允许对生产代码进行 NULL 访问。

  1. If no then we must enter exceptions using physical addressing in which case is paging now disabled?

没有启用分页,因为缓存可能也已打开。如果一些访问是物理的而另一些是虚拟的,CPU 的加载/存储单元会更复杂;特别是当缓存由传统 ARM CPU 中的虚拟地址填充时。

关于arm - ARM在进入向量表时是使用物理地址还是虚拟地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53100104/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com