1MLOCK(2) Linux Programmer's Manual MLOCK(2)
2
3
4
6 mlock, mlock2, munlock, mlockall, munlockall - lock and unlock memory
7
9 #include <sys/mman.h>
10
11 int mlock(const void *addr, size_t len);
12 int mlock2(const void *addr, size_t len, int flags);
13 int munlock(const void *addr, size_t len);
14
15 int mlockall(int flags);
16 int munlockall(void);
17
19 mlock(), mlock2(), and mlockall() lock part or all of the calling
20 process's virtual address space into RAM, preventing that memory from
21 being paged to the swap area.
22
23 munlock() and munlockall() perform the converse operation, unlocking
24 part or all of the calling process's virtual address space, so that
25 pages in the specified virtual address range may once more to be
26 swapped out if required by the kernel memory manager.
27
28 Memory locking and unlocking are performed in units of whole pages.
29
30 mlock(), mlock2(), and munlock()
31 mlock() locks pages in the address range starting at addr and continu‐
32 ing for len bytes. All pages that contain a part of the specified
33 address range are guaranteed to be resident in RAM when the call
34 returns successfully; the pages are guaranteed to stay in RAM until
35 later unlocked.
36
37 mlock2() also locks pages in the specified range starting at addr and
38 continuing for len bytes. However, the state of the pages contained in
39 that range after the call returns successfully will depend on the value
40 in the flags argument.
41
42 The flags argument can be either 0 or the following constant:
43
44 MLOCK_ONFAULT
45 Lock pages that are currently resident and mark the entire range
46 so that the remaining nonresident pages locked when they are
47 populated by a page fault.
48
49 If flags is 0, mlock2() behaves exactly the same as mlock().
50
51 munlock() unlocks pages in the address range starting at addr and con‐
52 tinuing for len bytes. After this call, all pages that contain a part
53 of the specified memory range can be moved to external swap space again
54 by the kernel.
55
56 mlockall() and munlockall()
57 mlockall() locks all pages mapped into the address space of the calling
58 process. This includes the pages of the code, data and stack segment,
59 as well as shared libraries, user space kernel data, shared memory, and
60 memory-mapped files. All mapped pages are guaranteed to be resident in
61 RAM when the call returns successfully; the pages are guaranteed to
62 stay in RAM until later unlocked.
63
64 The flags argument is constructed as the bitwise OR of one or more of
65 the following constants:
66
67 MCL_CURRENT Lock all pages which are currently mapped into the address
68 space of the process.
69
70 MCL_FUTURE Lock all pages which will become mapped into the address
71 space of the process in the future. These could be, for
72 instance, new pages required by a growing heap and stack as
73 well as new memory-mapped files or shared memory regions.
74
75 MCL_ONFAULT (since Linux 4.4)
76 Used together with MCL_CURRENT,