Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux kernel 如何将任意vm\u area\u结构从内核代码锁定到用户空间虚拟内存中? 问题:_Linux Kernel - Fatal编程技术网

Linux kernel 如何将任意vm\u area\u结构从内核代码锁定到用户空间虚拟内存中? 问题:

Linux kernel 如何将任意vm\u area\u结构从内核代码锁定到用户空间虚拟内存中? 问题:,linux-kernel,Linux Kernel,我想将vma中的页面锁定到位,这样当通过用户空间中的虚拟地址进行访问时,它们就不会被调出,甚至不会产生页面错误 当前设置 我目前使用alloc\u页面(GFP\u HIGHUSER)分配内存,并使用vm\u插入页面(vma,addr,page)将它们插入vma。之后,我用\uu free\u page(page)释放页面。这不会将refcount降为0,因为vm_insert_页面先前增加了它 问题 首先,我不确定通过vm\u insert\u page插入的页面是否被考虑逐出/交换。例如,我没

我想将vma中的页面锁定到位,这样当通过用户空间中的虚拟地址进行访问时,它们就不会被调出,甚至不会产生页面错误

当前设置 我目前使用
alloc\u页面(GFP\u HIGHUSER)
分配内存,并使用
vm\u插入页面(vma,addr,page)
将它们插入vma。之后,我用
\uu free\u page(page)
释放页面。这不会将refcount降为0,因为vm_insert_页面先前增加了它

问题 首先,我不确定通过
vm\u insert\u page
插入的页面是否被考虑逐出/交换。例如,我没有找到
vm\u insert\u page
调用
lru\u cache\u add
(这是将页面标记为可交换的正确/唯一功能吗?)

此外,我还考虑从内核代码中调用vma的
domlock()
。但是,
vm_insert_页面
vm_MIXEDMAP
添加到
vma->vm_标志
(),这使得vma vm_特别()。不幸的是,这导致vma被
mlock\u fixup
()和
lru\u cache\u add\u inactive\u或\u unevictable
()拒绝(如果最后一个是相关的)

也许是解决办法 我考虑调用内部函数
mlock_vma_页面
来锁定特殊的vma。但是,我不知道这是否解决了问题。是否有一种方法可以测试页面是否可交换,或者强制交换进程的可交换页面

或者,禁用交换(
CONFIG_swap
)是否也会导致所需的行为(页面访问不会导致页面交换/逐出故障)