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