1 .\" Copyright (c) 1991, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
12 .\" 3. Neither the name of the University nor the names of its contributors
13 .\" may be used to endorse or promote products derived from this software
14 .\" without specific prior written permission.
16 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" @(#)mmap.2 8.4 (Berkeley) 5/11/95
35 .Nd allocate memory, or map files or devices into memory
41 .Fn mmap "void *addr" "size_t len" "int prot" "int flags" "int fd" "off_t offset"
45 system call causes the pages starting at
47 and continuing for at most
49 bytes to be mapped from the object described by
51 starting at byte offset
55 is not a multiple of the page size, the mapped region may extend past the
57 Any such extension beyond the end of the mapped object will be zero-filled.
61 references a regular file or a shared memory object, the range of
66 bytes must be legitimate for the possible (not necessarily
67 current) offsets in the object.
70 value cannot be negative.
71 If the object is truncated and the process later accesses a page that
72 is wholly within the truncated region, the access is aborted and a
74 signal is delivered to the process.
78 references a device file, the interpretation of the
80 value is device specific and defined by the device driver.
81 The virtual memory subsystem does not impose any restrictions on the
83 value in this case, passing it unchanged to the driver.
87 is non-zero, it is used as a hint to the system.
88 (As a convenience to the system, the actual address of the region may differ
89 from the address supplied.)
92 is zero, an address will be selected by the system.
93 The actual starting address of the region is returned.
96 deletes any previous mapping in the allocated address range.
98 The protections (region accessibility) are specified in the
102 the following values:
104 .Bl -tag -width PROT_WRITE -compact
106 Pages may not be accessed.
110 Pages may be written.
112 Pages may be executed.
115 In addition to these protection flags,
117 provides the ability to set the maximum protection of a region allocated by
121 This is accomplished by
125 values wrapped in the
133 argument specifies the type of the mapped object, mapping options and
134 whether modifications made to the mapped copy of the page are private
135 to the process or are to be shared with other references.
136 Sharing, mapping type and options are specified in the
140 the following values:
141 .Bl -tag -width MAP_PREFAULT_READ
143 Request a region in the first 2GB of the current process's address space.
144 If a suitable region cannot be found,
147 .It Dv MAP_ALIGNED Ns Pq Fa n
148 Align the region on a requested boundary.
149 If a suitable region cannot be found,
154 argument specifies the binary logarithm of the desired alignment.
155 .It Dv MAP_ALIGNED_SUPER
156 Align the region to maximize the potential use of large
159 If a suitable region cannot be found,
162 The system will choose a suitable page size based on the size of
164 The page size used as well as the alignment of the region may both be
165 affected by properties of the file being mapped.
167 the physical address of existing pages of a file may require a specific
169 The region is not guaranteed to be aligned on any specific boundary.
171 Map anonymous memory not associated with any specific file.
172 The file descriptor used for creating
179 .\"Mapped from a regular file or character-special device memory.
181 This flag is identical to
183 and is provided for compatibility.
185 This flag can only be used in combination with
187 Please see the definition of
189 for the description of its effect.
191 Do not permit the system to select a different address than the one
193 If the specified address cannot be used,
200 must be a multiple of the page size.
203 is not specified, a successful
205 request replaces any previous mappings for the process'
206 pages in the range from
214 is specified, the request will fail if a mapping
215 already exists within the range.
217 Instead of a mapping, create a guard of the specified size.
218 Guards allow a process to create reservations in its address space,
219 which can later be replaced by actual mappings.
222 will not create mappings in the address range of a guard unless
223 the request specifies
225 Guards can be destroyed with
227 Any memory access by a thread to the guarded range results
230 signal to that thread.
232 Region is not included in a core file.
234 Causes data dirtied via this VM map to be flushed to physical media
235 only when necessary (usually by the pager) rather than gratuitously.
236 Typically this prevents the update daemons from flushing pages dirtied
237 through such maps and thus allows efficient sharing of memory across
238 unassociated processes using a file-backed shared memory map.
240 this option any VM pages you dirty may be flushed to disk every so often
241 (every 30-60 seconds usually) which can create performance problems if you
242 do not need that to occur (such as when you are using shared file-backed
243 mmap regions for IPC purposes).
244 Dirty data will be flushed automatically when all mappings of an object are
245 removed and all descriptors referencing the object are closed.
246 Note that VM/file system coherency is
247 maintained whether you use
250 This option is not portable
253 platforms (yet), though some may implement the same behavior
257 Extending a file with
259 thus creating a big hole, and then filling the hole by modifying a shared
261 can lead to severe file fragmentation.
262 In order to avoid such fragmentation you should always pre-allocate the
263 file's backing store by
265 zero's into the newly extended area prior to modifying the area via your
267 The fragmentation problem is especially sensitive to
269 pages, because pages may be flushed to disk in a totally random order.
271 The same applies when using
273 to implement a file-based shared memory store.
274 It is recommended that you create the backing store by
276 zero's to the backing file rather than
279 You can test file fragmentation by observing the KB/t (kilobytes per
280 transfer) results from an
282 while reading a large file sequentially, e.g.,\& using
283 .Dq Li dd if=filename of=/dev/null bs=32k .
287 system call will flush all dirty data and metadata associated with a file,
288 including dirty NOSYNC VM data, to physical media.
293 system call generally do not flush dirty NOSYNC VM data.
296 system call is usually not needed since
298 implements a coherent file system buffer cache.
300 used to associate dirty VM pages with file system buffers and thus cause
301 them to be flushed to physical media sooner rather than later.
302 .It Dv MAP_PREFAULT_READ
303 Immediately update the calling process's lowest-level virtual address
304 translation structures, such as its page table, so that every memory
305 resident page within the region is mapped for read access.
306 Ordinarily these structures are updated lazily.
307 The effect of this option is to eliminate any soft faults that would
308 otherwise occur on the initial read accesses to the region.
309 Although this option does not preclude
313 it does not eliminate soft faults on the initial write accesses to the
316 Modifications are private.
318 Modifications are shared.
320 Creates both a mapped region that grows downward on demand and an
321 adjoining guard that both reserves address space for the mapped region
322 to grow into and limits the mapped region's growth.
323 Together, the mapped region and the guard occupy
325 bytes of the address space.
326 The guard starts at the returned address, and the mapped region ends at
327 the returned address plus
330 Upon access to the guard, the mapped region automatically grows in size,
331 and the guard shrinks by an equal amount.
332 Essentially, the boundary between the guard and the mapped region moves
333 downward so that the access falls within the enlarged mapped region.
334 However, the guard will never shrink to less than the number of pages
335 specified by the sysctl
336 .Dv security.bsd.stack_guard_page ,
337 thereby ensuring that a gap for detecting stack overflow always exists
338 between the downward growing mapped region and the closest mapped region
352 must include at least
356 The size of the guard, in pages, is specified by sysctl
357 .Dv security.bsd.stack_guard_page .
362 system call does not unmap pages, see
364 for further information.
366 Although this implementation does not impose any alignment restrictions on
369 argument, a portable program must only use page-aligned values.
371 Large page mappings require that the pages backing an object be
372 aligned in matching blocks in both the virtual address space and RAM.
373 The system will automatically attempt to use large page mappings when
374 mapping an object that is already backed by large pages in RAM by
375 aligning the mapping request in the virtual address space to match the
376 alignment of the large physical pages.
377 The system may also use large page mappings when mapping portions of an
378 object that are not yet backed by pages in RAM.
380 .Dv MAP_ALIGNED_SUPER
381 flag is an optimization that will align the mapping request to the
382 size of a large page similar to
384 except that the system will override this alignment if an object already
385 uses large pages so that the mapping will be consistent with the existing
387 This flag is mostly useful for maximizing the use of large pages on the
388 first mapping of objects that do not yet have pages present in RAM.
390 Upon successful completion,
392 returns a pointer to the mapped region.
393 Otherwise, a value of
397 is set to indicate the error.
407 was specified as part of the
411 was not open for reading.
416 were specified as part of the
422 was not open for writing.
427 is not a valid open file descriptor.
429 An invalid (negative) value was passed in the
433 referenced a regular file or shared memory.
435 An invalid value was passed in the
439 An undefined option was set in the
457 At least one of these flags must be included.
462 is less than or equal to the guard size.
465 was specified and the
467 argument was not page aligned, or part of the desired address space
468 resides out of the valid address space for a user process.
474 were specified and part of the desired address space resides outside
475 of the first 2GB of user address space.
483 was specified and the desired alignment was either larger than the
484 virtual address size of the machine or smaller than a page.
487 was specified and the
492 was specified and the
500 were specified, but the requested region is already used by a mapping.
508 was specified, but the
510 argument was not zero, the
512 argument was not -1, or the
518 was specified together with one of the flags
521 .Dv MAP_PREFAULT_READ ,
527 has not been specified and
529 did not reference a regular or character special file.
532 was specified and the
534 argument was not available.
536 was specified and insufficient memory was available.
540 argument contains protections which are not a subset of the specified
557 system call was first documented in
561 .\" XXX: lots of missing history of FreeBSD additions.
565 functionality was introduced in