![]() |
![]() |
![]() |
![]() |
![]() |
This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs. |
Lock all of a process's address space
#include <sys/mman.h> int mlockall(int flags);
libc
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 and is determined by the flags argument.
![]() |
The full POSIX implementation for this function was added in the QNX Neutrino Core OS 6.3.2. |
![]() |
Memory-resident is a term used to indicate that the addresses always reside in physical memory. |
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.
You have to be a superuser to lock pages. Follow either of the following approaches when attempting to lock pages:
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |
![]() |
![]() |
![]() |
![]() |