【发布时间】:2015-10-02 19:49:56
【问题描述】:
我对 ARM MMU 的理解比较低,想了解一下 ARM MMU 中页表是如何组织的。
页表是在系统启动时创建的,可以认为是线性一维数组,其中每个条目长 4 字节,但我不明白页表中 1 MB SECTION 对应的是什么?
如果我们有三级页表,我们的第一级页表(PGD) 包含这个 1 MB 部分还是它(1 MB 部分)只是第三级页表 (PTE) 的一部分?
以下语句的含义:
页表的开始是 0x40200000,每个条目是 4 字节长,每个条目对应一个 1MB 的内存段。页表中的第一个条目(0x40200000)表示当您尝试访问 0x00000000 到 0x00100000 范围之间的内存时会发生什么,第二个条目(表中 0x40200004 处的 4 个字节)表示内存范围 0x00100000 到 0x00200000 等。
因此,要找到与内存区域 0x40200000 到 0x40200000+1MB(即第 402 MB 内存)相关联的页表 – 您需要遍历页表列表 402 个条目 – 但每个条目有 4 个字节长,因此您需要将此数字计时 4。
【问题讨论】:
-
从技术上讲,3 级页表根本不会有 1MB 段 - 1MB 段意味着“经典”的 2 级短描述符格式,而 3 级意味着 LPAE 长描述符格式,其中块大小为 2MB 和 1GB。关于“节”是在更一般意义上的“区域”中使用,还是在“1 级块条目”的特定 ARM 术语中使用,这里也可能存在一些歧义——1 级表条目仍然描述 1MB 区域内存,但指向一个 2 级表,该表将 1MB 进一步划分为 4KB 页面。
-
感谢您的 cmets,正确地说,在 1 级 PT 中,您可以将 1 GB 块/部分作为映射到物理地址的 PT 条目,在这种情况下,可以跳过第 2 级和第 3 级还是在 1 级 PT 中,我们可以将指针作为指向 2 级表的条目?
-
这是一个相关问题; How does ARM emulate the dirty bit... 和 Page table entry (PTE) descriptor in Linux kernel for ARM。您需要指定哪个 PTE(Linux 或 ARM)以及是否使用 LPAE(大地址空间)以及可能的特定架构。您标记了 linux-kernel,而信息的来源可能使其具有不同的含义。
-
感谢@artlessnoise 调查,我不知道 Linux 和 ARM PTE 之间的区别?所以不确定这些标签。