linux c 内存区域锁定

在linux中和大多数现代操作系统一样,内存区域变的比较稀少的时候,可能会被缺页异常处理程序牺牲掉并放入磁盘中,由于系统存在这种机制,可能会对延迟要求低的程序产生负面影响,为了使程序拥有更强的健壮性,Linux允许进程在 RAM中锁定内存来使得时序更加可预测。
为了系统的安全性 在linux中,只有拥有root权限的用户,才可以锁定内存。
锁定内存和解除锁定常用函数如下:
#include < sys/mman.h>

int mlock(caddr_t addr,size_t length);
//锁定起始地址于addr开始 ,长度为length字节数的区域。内存锁定时按页锁定,mlock锁定包含第一个地址的页面和包含最后一个地址的页面之间的所有页面。

int mlockall(int flags);
//一个进程锁定它的整个地址空间,flags参数如下所示:
MCL_CURRENT 当前进程的地址空间的所有页面都被锁定到RAM。
MCL_FUTURE 所有增加到进程地址空间的页面都将会被锁定到RAM中。
int munlock(caddr_t addr,size_t length);
//解除锁定
int munlockall(void);
//解除锁定


多次锁定一个页面和一次锁定页面效果是相同的,只需要一次解除锁定就可以解锁受影响的页面。