当前页面的 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-w
的 fork
调用,或任何被多个程序使用的 libraries
。
如果它为零,则表示最后一个使用该特定页面的程序不再需要它,因此内核可以回收该页面。
对吗?
但是对于我的玩具应用程序,我还没有发出任何免费命令。所以在 ram(present bit
集)中有一个 heap
页面,并且有 kpagecount
到 0
是没有意义的。那么,这个计数器准确吗?还是我漏掉了什么?
干杯!
所以,一周后,我在Understanding the Linux Kernel
书上找到了答案。
Page Descriptor
结构的 _count
变量保存页面的引用计数器。
- 如果设置为-1,则页框空闲,可以被内核回收
- 如果>=0则分配给1个或多个进程,或者由内核本身分配
page_count()
函数returns_count
的值,增加了一个,也就是共享页面的进程数
此外,当
时 _count
增加
- 页面插入
swap cache
page descriptor
中的标志 PG_private
已设置
对于设置了 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-w
的 fork
调用,或任何被多个程序使用的 libraries
。
如果它为零,则表示最后一个使用该特定页面的程序不再需要它,因此内核可以回收该页面。 对吗?
但是对于我的玩具应用程序,我还没有发出任何免费命令。所以在 ram(present bit
集)中有一个 heap
页面,并且有 kpagecount
到 0
是没有意义的。那么,这个计数器准确吗?还是我漏掉了什么?
干杯!
所以,一周后,我在Understanding the Linux Kernel
书上找到了答案。
Page Descriptor
结构的 _count
变量保存页面的引用计数器。
- 如果设置为-1,则页框空闲,可以被内核回收
- 如果>=0则分配给1个或多个进程,或者由内核本身分配
page_count()
函数returns_count
的值,增加了一个,也就是共享页面的进程数
此外,当
时_count
增加
- 页面插入
swap cache
page descriptor
中的标志PG_private
已设置