检查页面是否被锁定(mlock'd)?

3

在Linux中,有没有办法检查一个页面(或一系列页面)是否已经被锁定(mlock)? POSIX对munlock的描述表明,它可以成功地解锁有效分配的内存,无论mlock被调用了多少次(包括零次)。


手册中提到了 /proc/PID/status,它显示进程锁定了多少千字节,也许还显示范围。 - iabdalkader
嗨,你想做的事情并不容易。我刚刚发现你可以检查struct_page以确保。#define FOLL_MLOCK 0x40 /* mark page as mlocked */你可以检查你的页面是否有该标志。 - madper
@madper:看起来像是内核标志;我想从用户空间测试它。 - nneonneo
那我也不知道,很抱歉。 :-( - madper
mincore()函数,但只能告诉你当前内存中有哪些页面,而不能告诉你它们是否被锁定。 - Duck
1个回答

0

我从未尝试过,但我认为如果您使用mmap(2)MAP_ANONYMOUS以及MAP_LOCKED标志来分配内存,则类似于执行mallocmlock

这样,您将获得一个/proc/[pid]/smaps的条目,如果启用了CONFIG_PROC_PAGE_MONITOR内核配置选项。

通过/proc/[pid]/smaps,您可以检查映射条目的Locked行,从而确定映射是否被锁定(等同于mlock)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接