Linux __获取免费页面、物理地址和交换

Linux __获取免费页面、物理地址和交换,linux,memory-management,linux-kernel,swap,Linux,Memory Management,Linux Kernel,Swap,假设调用\u get\u free\u page以请求内核在区域\u NORMAL区域中有一个空闲页面,因此使用GFP\u kernel标志。我们知道返回的地址是内核逻辑地址,因此该逻辑地址的页表中存在一个“永久”映射,物理地址是用宏\uuu pa计算的。我的问题是:如果该页存在永久映射,那么该页是否可以交换到磁盘?如果是的话,我想当它再次在内存中交换时,它每次都会放在同一个页面框架中……这是正确的吗 如果在内核中分配一个页面,该页面在内核中具有\uu get\u free\u page,则该页

假设调用
\u get\u free\u page
以请求内核在
区域\u NORMAL
区域中有一个空闲页面,因此使用
GFP\u kernel
标志。我们知道返回的地址是内核逻辑地址,因此该逻辑地址的页表中存在一个“永久”映射,物理地址是用宏
\uuu pa
计算的。我的问题是:如果该页存在永久映射,那么该页是否可以交换到磁盘?如果是的话,我想当它再次在内存中交换时,它每次都会放在同一个页面框架中……这是正确的吗

如果在内核中分配一个页面,该页面在内核中具有
\uu get\u free\u page
,则该页面不可交换。在Linux中,
struct页面
跟踪不可交换的物理页面。交换用户空间映射及其内容级别的工作;因此,如果用户空间内存被调出,内容可能会被调回另一个物理页面。但该物理页面将映射到相同的用户空间虚拟地址


Linux中的内核内存是不可交换的。

如果在内核中分配一个包含
\uu get\u free\u page
的页面,那么它是不可交换的。在Linux中,
struct页面
跟踪不可交换的物理页面。交换用户空间映射及其内容级别的工作;因此,如果用户空间内存被调出,内容可能会被调回另一个物理页面。但该物理页面将映射到相同的用户空间虚拟地址


内核内存在Linux中不可交换。

谢谢罗兰。因此,由于
mmap
匿名区域是通过
struct page
跟踪的,因此它是不可交换的?不,用户空间映射内存是可交换的。发生的情况是,页面内容被写入交换,PTE(页面表条目)被标记为“不存在”,并且底层的
struct页面
被返回到空闲列表以供重用。如果用户空间访问交换出的映射,则会分配一个新页面,并从swap.Ok读回旧内容。我问这个问题是因为您编写了
struct page
跟踪不可交换的物理页面,并且使用
struct page
跟踪匿名
mmap
ed区域(共享或不共享)。你可以更正你的答案,它可能会有用。非常感谢。我不明白我在哪里说过mmap区域是用结构页跟踪的。几乎所有mmap区域(包括异常内存)都是用户空间虚拟地址到结构页的映射。正如我所说,交换发生在页面内容上,而不是页面本身。你没有这么说,书籍是这么说的。我的意思是,如果你说用
struct page
跟踪的每个物理页面都是不可交换的,例如,匿名
mmap
“被跟踪的页面是用
struct page
跟踪的,这意味着在进程地址空间中被跟踪的物理页面
mmap
”是不可交换的。我错了吗?谢谢罗兰。因此,由于
mmap
匿名区域是通过
struct page
跟踪的,因此它是不可交换的?不,用户空间映射内存是可交换的。发生的情况是,页面内容被写入交换,PTE(页面表条目)被标记为“不存在”,并且底层的
struct页面
被返回到空闲列表以供重用。如果用户空间访问交换出的映射,则会分配一个新页面,并从swap.Ok读回旧内容。我问这个问题是因为您编写了
struct page
跟踪不可交换的物理页面,并且使用
struct page
跟踪匿名
mmap
ed区域(共享或不共享)。你可以更正你的答案,它可能会有用。非常感谢。我不明白我在哪里说过mmap区域是用结构页跟踪的。几乎所有mmap区域(包括异常内存)都是用户空间虚拟地址到结构页的映射。正如我所说,交换发生在页面内容上,而不是页面本身。你没有这么说,书籍是这么说的。我的意思是,如果你说用
struct page
跟踪的每个物理页面都是不可交换的,例如,匿名
mmap
“被跟踪的页面是用
struct page
跟踪的,这意味着在进程地址空间中被跟踪的物理页面
mmap
”是不可交换的。我错了吗?