Lock all of a process's address space
#include <sys/mman.h> int mlockall(int flags);
- Flags that indicate which pages to lock; one or more of the following
- Lock the pages currently mapped into the address space of the process.
- Lock the pages that become mapped into the address space of the process in the future, when the mappings are established.
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The mlockall() function causes all of the pages mapped by the address space of a process to be locked and made memory-resident until unlocked, or the process exits or executes another process. The pages that are locked depend on the flags argument.
Memory-resident is a term used to indicate that the addresses always reside in physical memory. For more information, see " Locking memory " in the Process Manager chapter of the System Architecture guide.
In order to lock pages, your process must have the PROCMGR_AID_MEM_LOCK ability enabled. For more information, see procmgr_ability().
Follow either of the following approaches when attempting to lock pages:
- Tightly controlled approach
- Lock the pages one by one, by calling mmap() and then mlock().
- Global approach
- Lock all pages at the same time, by doing one of the following:
- Call mlockall(MCL_FUTURE), followed by one or more calls to mmap().
- Optionally call mmap(), and then call mlockall(MCL_CURRENT).
- An error occurred ( errno is set).
- Some or all of the memory identified by the operation couldn't be locked when the call was made.
- The flags argument is zero.
- Locking all of the pages currently mapped into the address space of the process would exceed an implementation-defined limit on the amount of memory that the process may lock. lock. This implementation-defined limit is set by RLIMIT_MEMLOCK rlimit.
- The calling process doesn't have the required permission; see procmgr_ability().
Last modified: 2014-06-24