Linux SPARSEMEM内存模型真的很稀疏吗?

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

我试图了解Linux SPARSEMEM内存模型如何工作。据我了解,当设置SPARSEMEM_VMEMMAP时,存在第二个映射,将不同的(可能是断开连接的)部分的mem_maps粘合在一起,从而使PFNpage结构之间的映射是连续的。到目前为止一切顺利。

问题是,如果物理内存确实有漏洞,那么从PFN/page到物理地址的映射应该需要一些自定义的映射,而不是简单的线性代数,对吗?

但是在下面的代码(内核5.3)中,看起来似乎很简单:

/include/asm-generic/memory_model.h
#define __phys_to_pfn(paddr)    PHYS_PFN(paddr)
/include/linux/pfn.h
#define PFN_PHYS(x) ((phys_addr_t)(x) << PAGE_SHIFT)
/include/linux/types.h
typedef u64 phys_addr_t;

这是否意味着物理地址空间仍然需要连续并且不允许出现空洞?还是我想念这里的东西?谢谢!

c linux memory memory-management linux-kernel
1个回答
0
投票
Sparsemem使用数组提供不同的pfn_to_page()物理内存的每个SECTION_SIZE区域的转换。这是是什么让mem_map []被切碎。
© www.soinside.com 2019 - 2024. All rights reserved.