Memory management 在Linux中,get_user_pages()如何固定进程页?

Memory management 在Linux中,get_user_pages()如何固定进程页?,memory-management,linux-kernel,Memory Management,Linux Kernel,我试图通过在内核中使用get_user_pages()函数来固定Linux进程页。(我使用的是Ubuntu 16.04,Linux-4.4.0)。 但我不清楚get_user_pages()如何锁定流程页面,或者该锁定在功能描述中的含义是什么。 我做了以下测试以检查页面是否被固定。 1.一种称为alloc(0x1000,0x1000)的进程,用于分配4KB内存。 2.内核模块,通过ioctl()从进程接收虚拟地址。 3.一旦在内核模块中接收到虚拟地址,就可以像这样调用get_user_pages

我试图通过在内核中使用get_user_pages()函数来固定Linux进程页。(我使用的是Ubuntu 16.04,Linux-4.4.0)。
但我不清楚get_user_pages()如何锁定流程页面,或者该锁定在功能描述中的含义是什么。
我做了以下测试以检查页面是否被固定。
1.一种称为alloc(0x1000,0x1000)的进程,用于分配4KB内存。
2.内核模块,通过ioctl()从进程接收虚拟地址。
3.一旦在内核模块中接收到虚拟地址,就可以像这样调用get_user_pages(),
res=获取用户页面(当前、当前->mm、vaddr、1、1和页面)
4.这个过程是几个小时的睡眠,让我检查状态

通过以上步骤,在/proc/pid/maps、/proc/pid/smap和/proc/meminfo中,我找不到进程虚拟地址的锁定(或固定)

我还检查了进程虚拟地址的页面结构的ref_计数,在调用get_user_pages()之前和之后,ref_计数是相同的(在我的测试用例中为3),如下所示

[ 7159.432196] Before, page flag = ffff800004004c, count=3
[ 7159.432196] Pinned Got mmaped.
[ 7159.432197] After, page flags = ffff800004004c, count = 3
我错过什么了吗

get_user_pages()如何锁定流程页面?
我在SO中发现了一个类似的问题,但没有答案