gpt4 book ai didi

linux - 在Linux中,属于内核数据段的物理内存页是否可交换?

转载 作者:IT王子 更新时间:2023-10-29 00:53:05 26 4
gpt4 key购买 nike

我问是因为我记得所有属于内核的物理页面都固定在内存中,因此不可交换,就像这里所说的:http://www.cse.psu.edu/~axs53/spring01/linux/memory.ppt

但是,我正在阅读一篇研究论文,并感到困惑,因为它说,“(物理)页面经常在内核数据段和用户空间之间移动。”

它还提到,相比之下,物理页面不会在内核代码段和用户空间之间移动。

我想如果一个物理页有时属于内核数据段有时属于用户空间,那一定意味着属于内核数据段的物理页是可交换的,这与我目前的理解不符。

那么,属于内核数据段的物理页是可交换的吗?不可交换?

附言该研究论文可在此处获取: https://www.cs.cmu.edu/~arvinds/pubs/secvisor.pdf

请搜索“move between”,您会找到它。

附言再次,[3G + 896M]到4G的虚拟内存区域属于内核,用于映射ZONE_HIGHMEM(x86 32位Linux,3G + 1G设置)中的物理页面。在这种情况下,内核可能首先将该区域中的一些虚拟页面映射到托管当前进程页表的物理页面,修改一些页表条目,并取消映射虚拟页面。这样,物理页面可能有时属于内核,有时属于用户空间,因为它们在取消映射后不属于内核,因此变得可交换。是这个原因吗?

最佳答案

tl;dr - 内存池和交换是不同的概念。你不能从一个中扣除另一个。


kmalloc() 和其他内核数据分配来自 slab/slub 等。内核为用户空间获取数据的相同位置。因此 页面经常在内核数据段和用户空间之间移动。这是对的。它没有说任何关于交换的事情。那是一个单独的问题,您无法推断出任何东西。

内核代码通常在启动时填充并标记为只读,之后永远不会更改。因此,物理页面不会在内核代码段和用户空间之间移动

为什么你认为因为某些东西来自同一个池子,所以它是一样的?网络套接字也来自同一个内存池。这是一个关注点分离linux-mm(内存管理系统)处理交换。可以固定页面(不可交换)。检查静态内核内存(这可能包括 .bss.data)是一个简单的范围检查。内存通常在 linux-mm 层固定并标记为不可交换。 linux-mm 可以将用户数据(其分配来自同一个池)标记为可交换。例如,即使没有交换,用户空间文本仍然是可交换的,因为它由 inode 支持。对于只读数据,缓存要简单得多。如果数据被交换,它在 MMU 表中被标记为这样,并且故障处理程序必须区分交换和 SIGBUS;这是 linux-mm 的一部分。

还有 no-mm(或没有 MMU)的 Linux 版本,这些版本永远不会交换任何东西。理论上,有人可能能够交换内核数据;但为什么它在内核中? Linux 方式是使用模块 并且只在需要时加载它们。当然,linux-mm 数据是内核数据,希望您能看到交换它的问题。

像这样的概念题的问题,

  1. 它可能因 Linux 版本而异。
  2. 它可能因 Linux 配置而异。
  3. 建议会随着 Linux 的发展而改变。

可以肯定的是,linux-mm 代码是不可交换的,也不是任何中断处理程序。在某个时间点,内核代码和/或数据可能会被交换。我认为这不是模块加载/卸载之外的当前情况(关于您是否称其为 swapping 是相当迂腐/深奥的)。

关于linux - 在Linux中,属于内核数据段的物理内存页是否可交换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29738696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com