【问题标题】:In Linux, physical memory pages belong to the kernel data segment are swappable or not?在Linux中,属于内核数据段的物理内存页是否可交换?
【发布时间】:2015-06-26 15:15:57
【问题描述】:

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

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

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

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

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

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

请搜索“移动之间”,你会找到它。

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

【问题讨论】:

  • 给出链接或完整报价
  • 我添加了论文链接。

标签: linux memory-management linux-kernel kernel


【解决方案1】:

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


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

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

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

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

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

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

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

【讨论】:

  • 我认为 kmalloc() 只会在 1GB 内核区域(对于 x86 平台)分配内存,不会存储用户数据。您说“内核获取用户空间数据的同一个地方”。这是什么意思?您的意思是 1GB 内核区域中的一些内存可能属于用户级应用程序?
  • 1GB是虚拟地址。我的意思是可以分配任何虚拟地址的内存的物理页面(和地址/池)。
【解决方案2】:

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

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

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

通常内核使用的页面是固定的,因此不可交换。

【讨论】:

    【解决方案3】:

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

    能否给个这个research papaer的链接?

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

    【讨论】:

    • 这里有一个链接可能有用:xv6 memory
    • 我在论文中添加了一个链接。并感谢您提供 xv6 内存参考 :)
    猜你喜欢
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2012-07-23
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多