在Linux中,有没有办法检查一个页面(或一系列页面)是否已经被锁定(mlock
)? POSIX对munlock
的描述表明,它可以成功地解锁有效分配的内存,无论mlock
被调用了多少次(包括零次)。
我从未尝试过,但我认为如果您使用mmap(2)
和MAP_ANONYMOUS
以及MAP_LOCKED
标志来分配内存,则类似于执行malloc
和mlock
。
这样,您将获得一个/proc/[pid]/smaps
的条目,如果启用了CONFIG_PROC_PAGE_MONITOR
内核配置选项。
通过/proc/[pid]/smaps
,您可以检查映射条目的Locked
行,从而确定映射是否被锁定(等同于mlock
)。
#define FOLL_MLOCK 0x40 /* mark page as mlocked */
你可以检查你的页面是否有该标志。 - madpermincore()
函数,但只能告诉你当前内存中有哪些页面,而不能告诉你它们是否被锁定。 - Duck