Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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中的mlock堆栈_Linux_Memory Management_Linux Kernel - Fatal编程技术网

linux中的mlock堆栈

linux中的mlock堆栈,linux,memory-management,linux-kernel,Linux,Memory Management,Linux Kernel,如果同一进程锁定内存中共享同一页的两个地址。解锁一个地址会解锁共享页面吗?在最新版本的linux内核允许非特权进程锁定内存之后,关于锁堆叠的文档对此并不清楚。 内存锁不堆叠,也就是说,通过调用mlock()或mlockall()多次锁定的页面将通过对相应范围的munlock()或munlockall()的单个调用解锁 映射到多个位置或由多个进程映射的页面保持锁定在RAM中,只要它们被至少一个位置或至少一个进程锁定 参考:注释。目前尚不清楚。假设我有两个地址,从第1页到第2页的一半,另一个从第2

如果同一进程锁定内存中共享同一页的两个地址。解锁一个地址会解锁共享页面吗?在最新版本的linux内核允许非特权进程锁定内存之后,关于锁堆叠的文档对此并不清楚。

  • 内存锁不堆叠,也就是说,通过调用mlock()或mlockall()多次锁定的页面将通过对相应范围的munlock()或munlockall()的单个调用解锁


  • 映射到多个位置或由多个进程映射的页面保持锁定在RAM中,只要它们被至少一个位置或至少一个进程锁定


参考:注释。

目前尚不清楚。假设我有两个地址,从第1页到第2页的一半,另一个从第2页的下半部分到第2页的结尾。如果我先锁定地址1,然后锁定地址2,然后再解锁地址1,会发生什么情况。页面全部被锁定/解锁。在您的场景中,
mlock(p1)
调用将锁定第1页和第2页。而
munlock(p2)
调用将仅解锁第2页。只有在与第一个
mlock(p1)
对应的
munlock(p1)
被执行后,第1页才会被解锁。我的案例是mlock(a1){locks Page 1和2},mlock(a2){Page 2已经被锁定},munlock(a1)。这会解锁第1页和第2页吗?执行上述操作后,第1页将始终解锁。只有在同一流程中执行所有ops时,才会解锁第2页。如果从不同进程调用了
mlock(a2)
,则第2页将保持锁定。映射到多个位置或由多个进程映射的页面将保持锁定在RAM中,只要它们至少被一个位置或至少一个进程锁定。