This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs. |
Lock a range of process address space in physical memory
#include <sys/mman.h> int mlock(const void * addr, size_t len);
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The mlock() function locks a range of process address space starting at address addr and continuing for length len. The addr must be a multiple of PAGESIZE, which depends on the target platform.
The full POSIX implementation for this function was added in the QNX Neutrino Core OS 6.3.2. |
The successful call to mlock() function ensures memory-resident pages.
The calling process needs superuser capabilities to call the mlock() function.
You always map the memory (using mmap()) region in three locking states:
State | Result of memory mapping |
---|---|
Unlocked | May be paged in/out |
Locked | May not be paged in/out. May still fault on access/reference to maintain usage/modification stats |
Superlocked | Happens when I/O privileges are granted to a thread. No faulting allowed at all and covers the whole address space |
For MAP_LAZY mappings, memory is not allocated/mapped until the memory is first referenced for any of the above types. Once it's been referenced, it obeys the above rules -- it's a programmer error to touch a MAP_LAZY area in a critical region (interrupts disabled or an ISR) that hasn't already been referenced.
The default locking state of memory is determined by the -m[~]l and -m[~]L options of the procnto manager.
Memory-resident is a term used to indicate that the addresses always reside in physical memory. |
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |