gpt4 book ai didi

memory-management - ARM Linux 页表布局

转载 作者:行者123 更新时间:2023-12-04 08:36:55 24 4
gpt4 key购买 nike

我已经阅读了多篇有关该主题的文章,包括以下内容,但对我来说仍然很模糊: 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 个条目(每个 2 级 HW 页表一个)。

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

如果有人能详细解释一下这个划分背后的逻辑就好了....

最佳答案

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

Linux 只是假装节大小是 2MB,而不是硬件实际的 1MB,通过成对分配一级表项,这样对应的二级表就可以一起放在一个页面中,避免浪费,并使页表内存的管理变得非常简单。

关于memory-management - ARM Linux 页表布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38343748/

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