当前位置:嗨网首页>书籍在线阅读

29-锁定全部地址空间

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.9.2 锁定全部地址空间

如果一个进程想在物理内存中锁定它的全部地址空间,就不适合使用mlock()接口。POSIX定义了mlockall()函数,可以满足这个实时应用中常见的需求:

470.png mlockall()函数会锁定一个进程在现有地址空间的物理内存中的所有页面。flags参数,是下面两个值的按位或操作,用以控制函数行为:

MCL_CURRENT

如果设置了该值,mlockall()会将所有已被映射的页面(包括栈、数据段和映射文件)锁定在进程地址空间中。

MCL_FUTURE

如果设置了该值,mlockall()会将所有未来映射的页面也锁定到进程地址空间中。

大部分应用程序会设置成这两个值的按位或值。成功时,函数返回0;失败时,返回-1,并设置errno为下列错误码之一:

EINVAL

参数len是负数。

ENOMEM

函数要锁定的页面数比RLIMIT_MEMLOCK限制的要多(详见9.9.4节)。

EPERM

RLIMIT_MEMLOCK是0,但进程并没有CAP_IPC_LOCK权限(同样,详见9.9.4节)。