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

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

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

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

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

那么,属于内核数据段的物理页面是否可交换? unswappable?

PS研究论文可以在这里find: https : //www.cs.cmu.edu/~arvinds/pubs/secvisor.pdf

请search“移动”,你会发现它。

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

Solutions Collecting From Web of "在Linux中,属于内核数据段的物理内存页是否可交换?"

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


kmalloc()和其他内核数据分配来自slab / slub等。内核为用户空间获取数据的地方。 Ergo 页面经常在内核数据段和用户空间之间移动 。 这是对的。 它没有说任何关于交换。 这是一个单独的问题,你不能推断任何东西。

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

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

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

像这样的概念性问题的问题,

  1. 它可以与Linux版本不同。
  2. 它可以与Linux配置不同。
  3. 随着Linux的发展,建议可能会改变。

对于某些情况,linux-mm代码不能交换,也不能有任何中断处理程序。 有可能在某个时间点,内核代码和/或数据可以交换。 我不认为这是模块加载/卸载之外的最新情况(对于是否调用这个交换 ,它是相当迂腐/深奥的)。

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

你可以给这个research papaer的链接吗?

据我所知(仅从学校的UNIX讲座和实验室中),内核空间的页面已经被分配给内核,具有简单的,固定的映射算法,并且它们都被固定。 内核打开分页模式后(x86的CR0&CR3的位操作)将会有第一个用户模式的进程,为内核分配的页面将不在用户空间的可用页面集合中。

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

用户空间和内核空间之间的可交换内存和页面移动之间没有连接。 一个页面是否可以被交换完全取决于它是否被固定。 固定页面没有交换,因此它们的映射被认为是永久性的。

那么,属于内核数据段的物理页面是否可交换? unswappable?

通常内核使用的页面是固定的,所以不能交换。