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 .\" 4. 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
36 .Nd allocate memory, or map files or devices into memory
42 .Fn mmap "void *addr" "size_t len" "int prot" "int flags" "int fd" "off_t offset"
46 system call causes the pages starting at
48 and continuing for at most
50 bytes to be mapped from the object described by
52 starting at byte offset
56 is not a multiple of the pagesize, the mapped region may extend past the
58 Any such extension beyond the end of the mapped object will be zero-filled.
62 is non-zero, it is used as a hint to the system.
63 (As a convenience to the system, the actual address of the region may differ
64 from the address supplied.)
67 is zero, an address will be selected by the system.
68 The actual starting address of the region is returned.
71 deletes any previous mapping in the allocated address range.
73 The protections (region accessibility) are specified in the
79 .Bl -tag -width PROT_WRITE -compact
81 Pages may not be accessed.
87 Pages may be executed.
92 argument specifies the type of the mapped object, mapping options and
93 whether modifications made to the mapped copy of the page are private
94 to the process or are to be shared with other references.
95 Sharing, mapping type and options are specified in the
100 .Bl -tag -width MAP_HASSEMAPHORE
102 Map anonymous memory not associated with any specific file.
103 The file descriptor used for creating
110 .\"Mapped from a regular file or character-special device memory.
112 Do not permit the system to select a different address than the one
114 If the specified address cannot be used,
121 must be a multiple of the pagesize.
124 request is successful, the mapping established by
126 replaces any previous mappings for the process' pages in the range from
132 Use of this option is discouraged.
133 .It Dv MAP_HASSEMAPHORE
134 Notify the kernel that the region may contain semaphores and that special
135 handling may be necessary.
137 This flag never operated as advertised and is no longer supported.
140 for further information.
142 Region is not included in a core file.
144 Causes data dirtied via this VM map to be flushed to physical media
145 only when necessary (usually by the pager) rather than gratuitously.
146 Typically this prevents the update daemons from flushing pages dirtied
147 through such maps and thus allows efficient sharing of memory across
148 unassociated processes using a file-backed shared memory map.
150 this option any VM pages you dirty may be flushed to disk every so often
151 (every 30-60 seconds usually) which can create performance problems if you
152 do not need that to occur (such as when you are using shared file-backed
153 mmap regions for IPC purposes).
154 Note that VM/file system coherency is
155 maintained whether you use
158 This option is not portable
161 platforms (yet), though some may implement the same behavior
165 Extending a file with
167 thus creating a big hole, and then filling the hole by modifying a shared
169 can lead to severe file fragmentation.
170 In order to avoid such fragmentation you should always pre-allocate the
171 file's backing store by
173 zero's into the newly extended area prior to modifying the area via your
175 The fragmentation problem is especially sensitive to
177 pages, because pages may be flushed to disk in a totally random order.
179 The same applies when using
181 to implement a file-based shared memory store.
182 It is recommended that you create the backing store by
184 zero's to the backing file rather than
187 You can test file fragmentation by observing the KB/t (kilobytes per
188 transfer) results from an
190 while reading a large file sequentially, e.g.\& using
191 .Dq Li dd if=filename of=/dev/null bs=32k .
195 system call will flush all dirty data and metadata associated with a file,
196 including dirty NOSYNC VM data, to physical media.
201 system call generally do not flush dirty NOSYNC VM data.
204 system call is obsolete since
206 implements a coherent file system buffer cache.
208 used to associate dirty VM pages with file system buffers and thus cause
209 them to be flushed to physical media sooner rather than later.
211 Modifications are private.
213 Modifications are shared.
226 must include at least
231 a memory region that grows to at most
233 bytes in size, starting from the stack top and growing down.
235 stack top is the starting address returned by the call, plus
238 The bottom of the stack at maximum growth is the starting
239 address returned by the call.
244 system call does not unmap pages, see
246 for further information.
248 The current design does not allow a process to specify the location of
250 In the future we may define an additional mapping type,
253 the file descriptor argument specifies a file or device to which swapping
256 Although this implementation does not impose any alignment restrictions on
259 argument, a portable program must only use page-aligned values.
261 Upon successful completion,
263 returns a pointer to the mapped region.
264 Otherwise, a value of
268 is set to indicate the error.
278 was specified as part of the
282 was not open for reading.
287 were specified as part of the
293 was not open for writing.
298 is not a valid open file descriptor.
301 was specified and the
303 argument was not page aligned, or part of the desired address space
304 resides out of the valid address space for a user process.
312 was specified and the
317 was specified and the
322 has not been specified and
324 did not reference a regular or character special file.
327 was specified and the
329 argument was not available.
331 was specified and insufficient memory was available.
332 The system has reached the per-process mmap limit specified in the
351 is limited to the maximum file size or available userland address
353 Files may not be able to be made more than 1TB large on 32 bit systems
354 due to file systems restrictions and bugs, but address space is far more
356 Larger files may be possible on 64 bit systems.
358 The previous documented limit of 2GB was a documentation bug.
359 That limit has not existed since