1

在 ARMv7 VMSA MMU 中,存在 ttbr0 和 ttbr1 指向的两组转换表。ttbr0 或 ttbr1 指向的表将用于转换的虚拟地址范围由“N”字段 TTBCR 寄存器设置。

现在,如果我将此 TTBCR.N 设置为 7,则 ttbr0 处的转换表覆盖的地址范围为 0x00000000 - 0x2000000

所以 0x2000000 之后的第一个地址(即 0x2000004?)将使用 ttbr1 处的转换表进行转换。根据 ARMv7 VMSA 中的短描述符格式,转换表可以具有节 (1MB) 区域和超节 (16MB) 映射区域。

我的问题是如果我在地址位置放置一个超级部分会发生什么,比如 0x1600000。

根据理论,那么 0x1600000 到 0x2600000 范围内的地址将映射到物理地址 0x1600000。(但是,这不起作用,因为转换表本身在 0x2000000 处发生变化?)

那么在这种情况下会发生什么?在这种情况下,ttbr1 的第一个条目应该放什么?

4

1 回答 1

0

我认为这是一个编程错误,页表不应该像这样设置,其中一个区域的地址块与另一个重叠。考虑到这一点,您已将 VA 0x1600000 设置为 16 MB 之前的 16 MB 超级部分并说您访问位置 0x1600000 ,现在您的 TLB 将有一个从 0x1600000 开始的 16MB 部分的虚拟到物理映射。接下来说您访问内存位置 0x2000000 ,这里将首先查找 TLB 并找到匹配的条目,不页表遍历将发生。您可能已将 0x2000000 向前映射到其他一些物理地址空间,然后此类访问可能会寻址到意外位置。

于 2013-11-20T06:51:45.373 回答