【问题标题】:What is 1 Mb section in Page table?页表中的 1 Mb 部分是什么?
【发布时间】: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 之间的区别?所以不确定这些标签。

标签: arm64 mmu


【解决方案1】:

首先,在 ram 中的已知位置有一个表,使用驱动 mmu 的物理地址。我更喜欢文档的图表版本而不是表格。

当 mmu 被启用并且有来自处理器的访问、获取或数据、读取或写入时,将从该虚拟地址中提取一些位并将其添加到上述 mmu 表的基地址中。 mmu 表中内存位置的内容告诉 mmu 如何处理该访问。有些条目是唯一的访问,有些则必须再次进行第二次 mmu 表访问,从一级访问中获取一些位并将这些位添加到上述 mmu 表基地址以获得第二个条目。

在一天结束时,您将拥有这个带有基地址的 mmu 表(必须在某个边界上对齐)。来自处理器访问的虚拟地址中的位用于索引该表。表中的最终值表示将虚拟地址转换为物理地址的替换地址位,以及一些指示可缓存与否的控制位,以及权限等。他们将术语应用于 1MB 或任何理想情况下基于表中一个条目控制的 ram 数量的术语。但是当然 16MB 功能具有误导性,因为您需要 16 个 1MB 条目才能使用它(但是如果您忽略 16mb 术语并严格查看地址位以及它们来自哪里或去哪里,您就会知道控制了多少 ram通过每个 mmu 表条目)。

所以他们说的是某人在某个时间点创建的某些表。表位置的物理地址是 0x40200000。 1MB 大小的条目(对于 arm,我认为您可以查看条目的低两位以确定它是什么类型,但我必须查看,并且不同的架构添加了不同的功能,因此没有一个适合所有人的规则,您必须查看您的核心文档)是 4 个字节或一个字宽,并且 AFAIK mmu 表中的所有条目都是一个字宽。所以他们说一个特定的条目是虚拟地址空间中从 0x00000000 到 0x000FFFFF 的 1MB 内存,并且 mmu 表将其映射到某个物理地址。他们显示的下一个条目可能是 1MB 虚拟地址空间 0x00100000 到 0x001FFFFF 等等。

【讨论】:

  • 好的,感谢您的回答。我认为每个单词(32 位)条目都包含一个指向主内存中 1 MB 部分的指针(物理地址)。如果 CPU 生成虚拟地址 0x00000100 ,它映射在主内存中的 1 MB 部分中,并且可以从页表的第一个条目中引用?
  • 所以随机选择一个 armv6 trm VA[31:20] 来确定单词大小的一级页表的索引。对于地址 0x00000100 VA[31:20] 全为零,因此表中的第一个条目用于该 1MB 地址空间。我正在查看的低两位和位 18 确定从那里做什么。如果 mmu 表中条目中数据的低两位是 2'b10 并且第 18 位是 0,那么它是一个 1MB 页面,如果 18 是 1 那么它是一个 16mb 页面,但您需要 16 个条目。无论如何,对于较低位的 2b10,物理位和控制来自该字
  • 对于地址 0x001xxxxx 那么 VA[31:20] 是 0x001 所以这是 mmu 表中的第二个条目(偏移量 VA[31:20]*4 = 0x4)
  • 如果您将 mmu 表视为(32 位)字数组,那么 VA[31:20] 是该数组的索引,0x000 是索引 0 或 word[0] 第一个一,索引 1 是 word[1] 或第二个等等...
  • 例如,如果使用我正在查看的 trm(它们确实有所不同并且是传统模式),如果 VA[31:20] 第一个查找条目的低两个数据位是 2b01 那么你有查看粗页表,您从第一次查找中获取数据位 [31:10],这些是 mmu 表的偏移量,您添加到该偏移量 VA[19:12] 和低两位第二个条目告诉你页面的大小,有替换物理地址位等等。
猜你喜欢
  • 2015-04-23
  • 2020-10-30
  • 2018-06-19
  • 2017-05-25
  • 2014-04-15
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多