【问题标题】:ARM MMU and ARM Linux page table walkARM MMU 和 ARM Linux 页表遍历
【发布时间】:2015-01-19 06:48:02
【问题描述】:

我对 linux 如何利用 ARMv7 MMU 硬件进行 3 级页表遍历有点困惑。 MMU 只有 2 个寄存器 ttbr0 和 ttbr1(一个用于内核,另一个用于用户空间)。 mmu怎么知道linux的多级页表遍历?

谢谢, 高压

【问题讨论】:

  • 软件页表遍历与硬件页表遍历的工作方式完全相同——给定一个基地址,查找相关条目并将其解码为故障、映射或地址下一级表(并重复)。您确实知道多级页表的一般工作原理,对吧?
  • 我不完全理解。我的意思是做软件页表遍历,每次获取/加载是不是太多了?不应该只由硬件完成吗?我试图阅读许多链接,但无法完全理解。你能提供一些有意义的链接来理解这个主题吗?

标签: linux arm mmu


【解决方案1】:

如果虚拟地址的高位N 全部为零,则转换从TTBR0 开始,否则从TTBR1 开始。 N 来自TTBCR。 TTBRn 寄存器包含一级表基地址的物理地址。加载第一级表的相应条目,该条目的各个位确定转换是否使用二级表,如果是,则其物理地址是什么。

MMU 可以配置为使用短描述符(32 位物理地址)或长描述符(40 位物理地址)。使用短描述符时,最多只能使用两级转换表。使用长描述符时,可以分为三个级别。

这会忽略第 2 阶段的转换(管理程序)。所有内容都记录在 ARMARM for v7-A&R 部分 B3.3 中: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0406c/index.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 2016-09-26
    • 2014-11-18
    • 1970-01-01
    相关资源
    最近更新 更多