当前页面的 kpagecount 为零

kpagecount of a present page is zero

对于设置了 present bit 的页面,如何让 kpagecount 等于 zero

根据 linux 文档:

  • /proc/kpagecount. This file contains a 64-bit count of the number of times each page is mapped, indexed by PFN.

我做了一个玩具应用程序,我打印了程序所有 vma's 的所有页面映射条目。 我知道,当页面在不同进程之间共享时,kpagecount 可能高于 1。这些的典型示例是 c-o-wfork 调用,或任何被多个程序使用的 libraries

如果它为零,则表示最后一个使用该特定页面的程序不再需要它,因此内核可以回收该页面。 对吗?

但是对于我的玩具应用程序,我还没有发出任何免费命令。所以在 ram(present bit 集)中有一个 heap 页面,并且有 kpagecount0 是没有意义的。那么,这个计数器准确吗?还是我漏掉了什么?

干杯!

所以,一周后,我在Understanding the Linux Kernel书上找到了答案。

Page Descriptor 结构的 _count 变量保存页面的引用计数器。

  • 如果设置为-1,则页框空闲,可以被内核回收
  • 如果>=0则分配给1个或多个进程,或者由内核本身分配
  • page_count()函数returns_count的值,增加了一个,也就是共享页面的进程数

此外,当

_count 增加
  • 页面插入swap cache
  • page descriptor 中的标志 PG_private 已设置