PTE 和结构页面的详细信息

问题描述 投票:0回答:1

据我了解,当用户空间进程访问某个虚拟地址时,MMU 会尝试查找所请求虚拟地址的 PTE。在 PTE 中,有编码后的

struct page
的 PFN 和一些标志。

此时,我的问题是:如果翻译后的地址指向

struct page
,那么物理内存到底是如何访问的?我认为
struct page
只是页面描述符,而不是空的物理内存区域。

linux memory memory-management linux-kernel
1个回答
4
投票

当用户空间进程访问某个虚拟地址时,MMU 会尝试查找所请求虚拟地址的 PTE

是的,这是正确的。页表向下走到特定的 PTE(如果有)。

在 PTE 中有编码后的

struct page
的 PFN 和一些标志。

其实不然。 PTE 包含虚拟地址转换为的“实际物理内存页”的 PFN(页帧号)。换句话说,它指向物理内存中的实际页面,而不是对应的struct page


如果翻译后的地址指向
struct page

,那么物理内存到底是如何访问的?我认为

struct page
只是页面描述符,而不是空的物理内存区域。

翻译后的地址

指向struct page,它指向物理内存。事实上,

struct page
只是系统用来跟踪页面的性质和状态的“描述符”,并存储在其他地方。
所有

struct page

结构都存储在某个特定的内存区域中,这取决于底层架构。您可以在 Mel Gorman 的书“Understanding the Linux Virtual Memory Manager”的

第 2 章:描述物理内存中阅读更多相关信息(尽管要小心并仔细检查,因为它是旧资源,情况可能已经改变) .
一旦有了PTE(

pte_t

),就可以使用

pte_page()
来获取对应的
struct page
的地址。该地址是使用一组宏(例如
__pfn_to_page()
)计算的,这些宏基本上最终索引了一个
mem_section
,其中包含指向
struct page
.section_mem_map
)数组的指针。有一个
struct mem_section
的全局数组,每个PTE PFN都有一个部分索引
编码在其中
,用于选择正确的部分。

© www.soinside.com 2019 - 2024. All rights reserved.