Linux arm:ARM Linux页表布局

我已经阅读了有关此主题的多篇文章,包括以下内容,但对我来说仍然很模糊:http://elinux.org/Tims_Notes_on_ARM_memory_allocation

ARM Linux kernel page table Linux kernel ARM Translation table base (TTB0 and TTB1)

ARM 硬件在 L1 转换表中有 4096 个 4 字节的条目。每个条目翻译内存中的 1MB 区域。在第二级,它有 256 个 4 字节的条目。每个第二级条目翻译内存中的 4KB 页面。因此,根据这一点,任何虚拟地址都必须分为 12-8-12,以映射到上述方案。

但是在 32 位 ARM linux 端,此划分为 11-9-12。其中 L1 转换表由 2048 个条目组成,每个条目为 8 个字节。这里将两个 4 字节的条目连接在一起,并在内存中一个接一个地布置指向的第二级转换表,因此在第二级而不是 256 级,有 512 个条目。此外,由于 Linux 内存管理期望各种非 ARM 本机的标志,因此我们为 linux 页表定义了 512 个条目(

现在的问题是 Linux 不强制 PGD / PMD / PTE 大小(但是它强制页面大小为 4K。因此 PAGE_SHIFT 设置为 12),那么为什么我们选择 11-9-12 布局(即 PGD 为 11 位,HW PTE 为 9 位)。只是为了确保 512HW + 512Linux PTE 与页面边界对齐?

如果有人能详细解释这种划分背后的逻辑,那就太好了……

3

正如您所说,在 ARM 短描述符格式中,每个第二级页表的大小为 1KB。即使只有 2KB 的关联阴影页表,也意味着分配给第二级表的每个页面的 50 % 将被完全浪费。

Linux 只是假装部分大小为 2MB,而不是硬件的实际 1MB,通过成对分配第一级条目,以便相应的第二级表对可以一起保存在一个页面中,避免浪费,并保持页表内存的管理非常简单。

2

ARM Linux and dirty bits应该有所有的答案。主要是,PTE 表有额外的信息来模拟位,导致您观察到的布局。

我认为一个误解是 L2 表占用的内存与其映射的内存。您必须为 L2 表分配物理内存,并使其对称(4K 大小)使其与所有页面相同。现在,此 4k 页面可能是四个 ARM MMU L2 页表。但是,我们需要一些其他信息来模拟dirtyyoungLinux 访问的 M

Linux PTE [n]

Linux PTE [n + 1]

预位 PTE [n]

预位 PTE [n + 1]

在 L1 级别,每个条目都是成对的(n/n+1),因此它指向上面的项目 3 和 4。pgtable-2level.h文件对布局有详细的注释(对于您的 Linux 版本应该是正确的)。

See:Tim's notes on ARM MM
         Page table entry (PTE) descriptor in Linux kernel for ARM

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(775)
美的10匹一拖二空调故障代码:Windows 10选择性键盘故障
上一篇
Linux运维项目经验范例:如何将.vpd文件导入可视化范例项目
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(5条)