首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM Linux页面表布局

ARM Linux页面表布局
EN

Stack Overflow用户
提问于 2016-07-13 06:04:19
回答 2查看 4.3K关注 0票数 3

我读过多篇关于这个主题的文章,包括下面的文章,但我仍然不太清楚:分配

ARM Linux内核页表

Linux内核ARM翻译表库(TTB0和TTB1)

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

但是在32位ARM linux方面,这个部门是11-9-12。其中,L1转换表由2048个条目组成,每个条目为8个字节。在这里,两个4个字节的条目被合并在一起,并且在内存中一个一个地排列出指向的第二级转换表,这样在第二级而不是256个级别上就有512个条目。此外,由于Linux内存管理期望各种非本机标志ARM,我们为linux页表定义了512个条目(每个二级HW页表一个)。

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

如果有人能详细解释这一分工背后的逻辑,那就太好了.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-13 22:06:19

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

Linux只是假装节的大小是2MB,而不是硬件的实际1MB,方法是对第一级条目进行成对分配,这样相应的第二级表可以放在一个页面中,避免浪费,并使页表内存的管理非常简单。

票数 3
EN

Stack Overflow用户

发布于 2016-07-16 14:29:17

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

我认为误解是L2表所占用的内存与它映射的内存。必须为一个表分配物理内存,并使其对称(4K大小),使其与所有页面相同。现在这个4k页面可以是四个ARM MMU L2页面表。但是,我们需要一些额外的信息来模拟Linux通用MMU代码所需的脏、年轻和访问比特。所以Linux L2 (PTE目录)的布局是,

  1. Linux PTE n
  2. Linux n+1
  3. 手臂PTE n
  4. ARM PTE n+1

在L1级别上,对每个条目(n/n+1)进行配对,以便指向上面的第3项和第4项。pgtable-2level.h文件对布局有详细的注释(对于您版本的Linux来说应该是正确的)。

请参阅:蒂姆关于ARM MM的笔记

ARM Linux内核中的页表条目(PTE)描述符

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38343748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档