]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libc/sys/mmap.2
MFC r320313:
[FreeBSD/FreeBSD.git] / lib / libc / sys / mmap.2
1 .\" Copyright (c) 1991, 1993
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
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.
15 .\"
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
26 .\" SUCH DAMAGE.
27 .\"
28 .\"     @(#)mmap.2      8.4 (Berkeley) 5/11/95
29 .\" $FreeBSD$
30 .\"
31 .Dd February 4, 2017
32 .Dt MMAP 2
33 .Os
34 .Sh NAME
35 .Nm mmap
36 .Nd allocate memory, or map files or devices into memory
37 .Sh LIBRARY
38 .Lb libc
39 .Sh SYNOPSIS
40 .In sys/mman.h
41 .Ft void *
42 .Fn mmap "void *addr" "size_t len" "int prot" "int flags" "int fd" "off_t offset"
43 .Sh DESCRIPTION
44 The
45 .Fn mmap
46 system call causes the pages starting at
47 .Fa addr
48 and continuing for at most
49 .Fa len
50 bytes to be mapped from the object described by
51 .Fa fd ,
52 starting at byte offset
53 .Fa offset .
54 If
55 .Fa len
56 is not a multiple of the page size, the mapped region may extend past the
57 specified range.
58 Any such extension beyond the end of the mapped object will be zero-filled.
59 .Pp
60 If
61 .Fa fd
62 references a regular file or a shared memory object, the range of
63 bytes starting at
64 .Fa offset
65 and continuing for
66 .Fa len
67 bytes must be legitimate for the possible (not necessarily
68 current) offsets in the object.
69 In particular, the
70 .Fa offset
71 value cannot be negative.
72 If the object is truncated and the process later accesses a page that
73 is wholly within the truncated region, the access is aborted and a
74 .Dv SIGBUS
75 signal is delivered to the process.
76 .Pp
77 If
78 .Fa fd
79 references a device file, the interpretation of the
80 .Fa offset
81 value is device specific and defined by the device driver.
82 The virtual memory subsystem does not impose any restrictitions on the
83 .Fa offset
84 value in this case, passing it unchanged to the driver.
85 .Pp
86 If
87 .Fa addr
88 is non-zero, it is used as a hint to the system.
89 (As a convenience to the system, the actual address of the region may differ
90 from the address supplied.)
91 If
92 .Fa addr
93 is zero, an address will be selected by the system.
94 The actual starting address of the region is returned.
95 A successful
96 .Fa mmap
97 deletes any previous mapping in the allocated address range.
98 .Pp
99 The protections (region accessibility) are specified in the
100 .Fa prot
101 argument by
102 .Em or Ns 'ing
103 the following values:
104 .Pp
105 .Bl -tag -width PROT_WRITE -compact
106 .It Dv PROT_NONE
107 Pages may not be accessed.
108 .It Dv PROT_READ
109 Pages may be read.
110 .It Dv PROT_WRITE
111 Pages may be written.
112 .It Dv PROT_EXEC
113 Pages may be executed.
114 .El
115 .Pp
116 The
117 .Fa flags
118 argument specifies the type of the mapped object, mapping options and
119 whether modifications made to the mapped copy of the page are private
120 to the process or are to be shared with other references.
121 Sharing, mapping type and options are specified in the
122 .Fa flags
123 argument by
124 .Em or Ns 'ing
125 the following values:
126 .Bl -tag -width MAP_PREFAULT_READ
127 .It Dv MAP_32BIT
128 Request a region in the first 2GB of the current process's address space.
129 If a suitable region cannot be found,
130 .Fn mmap
131 will fail.
132 This flag is only available on 64-bit platforms.
133 .It Dv MAP_ALIGNED Ns Pq Fa n
134 Align the region on a requested boundary.
135 If a suitable region cannot be found,
136 .Fn mmap
137 will fail.
138 The
139 .Fa n
140 argument specifies the binary logarithm of the desired alignment.
141 .It Dv MAP_ALIGNED_SUPER
142 Align the region to maximize the potential use of large
143 .Pq Dq super
144 pages.
145 If a suitable region cannot be found,
146 .Fn mmap
147 will fail.
148 The system will choose a suitable page size based on the size of
149 mapping.
150 The page size used as well as the alignment of the region may both be
151 affected by properties of the file being mapped.
152 In particular,
153 the physical address of existing pages of a file may require a specific
154 alignment.
155 The region is not guaranteed to be aligned on any specific boundary.
156 .It Dv MAP_ANON
157 Map anonymous memory not associated with any specific file.
158 The file descriptor used for creating
159 .Dv MAP_ANON
160 must be \-1.
161 The
162 .Fa offset
163 argument must be 0.
164 .\".It Dv MAP_FILE
165 .\"Mapped from a regular file or character-special device memory.
166 .It Dv MAP_ANONYMOUS
167 This flag is identical to
168 .Dv MAP_ANON
169 and is provided for compatibility.
170 .It Dv MAP_EXCL
171 This flag can only be used in combination with
172 .Dv MAP_FIXED .
173 Please see the definition of
174 .Dv MAP_FIXED
175 for the description of its effect.
176 .It Dv MAP_FIXED
177 Do not permit the system to select a different address than the one
178 specified.
179 If the specified address cannot be used,
180 .Fn mmap
181 will fail.
182 If
183 .Dv MAP_FIXED
184 is specified,
185 .Fa addr
186 must be a multiple of the page size.
187 If
188 .Dv MAP_EXCL
189 is not specified, a successful
190 .Dv MAP_FIXED
191 request replaces any previous mappings for the process'
192 pages in the range from
193 .Fa addr
194 to
195 .Fa addr
196 +
197 .Fa len .
198 In contrast, if
199 .Dv MAP_EXCL
200 is specified, the request will fail if a mapping
201 already exists within the range.
202 .It Dv MAP_HASSEMAPHORE
203 Notify the kernel that the region may contain semaphores and that special
204 handling may be necessary.
205 .It Dv MAP_NOCORE
206 Region is not included in a core file.
207 .It Dv MAP_NOSYNC
208 Causes data dirtied via this VM map to be flushed to physical media
209 only when necessary (usually by the pager) rather than gratuitously.
210 Typically this prevents the update daemons from flushing pages dirtied
211 through such maps and thus allows efficient sharing of memory across
212 unassociated processes using a file-backed shared memory map.
213 Without
214 this option any VM pages you dirty may be flushed to disk every so often
215 (every 30-60 seconds usually) which can create performance problems if you
216 do not need that to occur (such as when you are using shared file-backed
217 mmap regions for IPC purposes).
218 Dirty data will be flushed automatically when all mappings of an object are
219 removed and all descriptors referencing the object are closed.
220 Note that VM/file system coherency is
221 maintained whether you use
222 .Dv MAP_NOSYNC
223 or not.
224 This option is not portable
225 across
226 .Ux
227 platforms (yet), though some may implement the same behavior
228 by default.
229 .Pp
230 .Em WARNING !
231 Extending a file with
232 .Xr ftruncate 2 ,
233 thus creating a big hole, and then filling the hole by modifying a shared
234 .Fn mmap
235 can lead to severe file fragmentation.
236 In order to avoid such fragmentation you should always pre-allocate the
237 file's backing store by
238 .Fn write Ns ing
239 zero's into the newly extended area prior to modifying the area via your
240 .Fn mmap .
241 The fragmentation problem is especially sensitive to
242 .Dv MAP_NOSYNC
243 pages, because pages may be flushed to disk in a totally random order.
244 .Pp
245 The same applies when using
246 .Dv MAP_NOSYNC
247 to implement a file-based shared memory store.
248 It is recommended that you create the backing store by
249 .Fn write Ns ing
250 zero's to the backing file rather than
251 .Fn ftruncate Ns ing
252 it.
253 You can test file fragmentation by observing the KB/t (kilobytes per
254 transfer) results from an
255 .Dq Li iostat 1
256 while reading a large file sequentially, e.g.,\& using
257 .Dq Li dd if=filename of=/dev/null bs=32k .
258 .Pp
259 The
260 .Xr fsync 2
261 system call will flush all dirty data and metadata associated with a file,
262 including dirty NOSYNC VM data, to physical media.
263 The
264 .Xr sync 8
265 command and
266 .Xr sync 2
267 system call generally do not flush dirty NOSYNC VM data.
268 The
269 .Xr msync 2
270 system call is usually not needed since
271 .Bx
272 implements a coherent file system buffer cache.
273 However, it may be
274 used to associate dirty VM pages with file system buffers and thus cause
275 them to be flushed to physical media sooner rather than later.
276 .It Dv MAP_PREFAULT_READ
277 Immediately update the calling process's lowest-level virtual address
278 translation structures, such as its page table, so that every memory
279 resident page within the region is mapped for read access.
280 Ordinarily these structures are updated lazily.
281 The effect of this option is to eliminate any soft faults that would
282 otherwise occur on the initial read accesses to the region.
283 Although this option does not preclude
284 .Fa prot
285 from including
286 .Dv PROT_WRITE ,
287 it does not eliminate soft faults on the initial write accesses to the
288 region.
289 .It Dv MAP_PRIVATE
290 Modifications are private.
291 .It Dv MAP_SHARED
292 Modifications are shared.
293 .It Dv MAP_STACK
294 .Dv MAP_STACK
295 implies
296 .Dv MAP_ANON ,
297 and
298 .Fa offset
299 of 0.
300 The
301 .Fa fd
302 argument
303 must be -1 and
304 .Fa prot
305 must include at least
306 .Dv PROT_READ
307 and
308 .Dv PROT_WRITE .
309 This option creates
310 a memory region that grows to at most
311 .Fa len
312 bytes in size, starting from the stack top and growing down.
313 The
314 stack top is the starting address returned by the call, plus
315 .Fa len
316 bytes.
317 The bottom of the stack at maximum growth is the starting
318 address returned by the call.
319 .El
320 .Pp
321 The
322 .Xr close 2
323 system call does not unmap pages, see
324 .Xr munmap 2
325 for further information.
326 .Sh NOTES
327 Although this implementation does not impose any alignment restrictions on
328 the
329 .Fa offset
330 argument, a portable program must only use page-aligned values.
331 .Pp
332 Large page mappings require that the pages backing an object be
333 aligned in matching blocks in both the virtual address space and RAM.
334 The system will automatically attempt to use large page mappings when
335 mapping an object that is already backed by large pages in RAM by
336 aligning the mapping request in the virtual address space to match the
337 alignment of the large physical pages.
338 The system may also use large page mappings when mapping portions of an
339 object that are not yet backed by pages in RAM.
340 The
341 .Dv MAP_ALIGNED_SUPER
342 flag is an optimization that will align the mapping request to the
343 size of a large page similar to
344 .Dv MAP_ALIGNED ,
345 except that the system will override this alignment if an object already
346 uses large pages so that the mapping will be consistent with the existing
347 large pages.
348 This flag is mostly useful for maximizing the use of large pages on the
349 first mapping of objects that do not yet have pages present in RAM.
350 .Sh RETURN VALUES
351 Upon successful completion,
352 .Fn mmap
353 returns a pointer to the mapped region.
354 Otherwise, a value of
355 .Dv MAP_FAILED
356 is returned and
357 .Va errno
358 is set to indicate the error.
359 .Sh ERRORS
360 The
361 .Fn mmap
362 system call
363 will fail if:
364 .Bl -tag -width Er
365 .It Bq Er EACCES
366 The flag
367 .Dv PROT_READ
368 was specified as part of the
369 .Fa prot
370 argument and
371 .Fa fd
372 was not open for reading.
373 The flags
374 .Dv MAP_SHARED
375 and
376 .Dv PROT_WRITE
377 were specified as part of the
378 .Fa flags
379 and
380 .Fa prot
381 argument and
382 .Fa fd
383 was not open for writing.
384 .It Bq Er EBADF
385 The
386 .Fa fd
387 argument
388 is not a valid open file descriptor.
389 .It Bq Er EINVAL
390 An invalid (negative) value was passed in the
391 .Fa offset
392 argument, when
393 .Fa fd
394 referenced a regular file or shared memory.
395 .It Bq Er EINVAL
396 An invalid value was passed in the
397 .Fa prot
398 argument.
399 .It Bq Er EINVAL
400 An undefined option was set in the
401 .Fa flags
402 argument.
403 .It Bq Er EINVAL
404 Both
405 .Dv MAP_PRIVATE
406 and
407 .Dv MAP_SHARED
408 were specified.
409 .It Bq Er EINVAL
410 None of
411 .Dv MAP_ANON ,
412 .Dv MAP_PRIVATE ,
413 .Dv MAP_SHARED ,
414 or
415 .Dv MAP_STACK
416 was specified.
417 At least one of these flags must be included.
418 .It Bq Er EINVAL
419 .Dv MAP_FIXED
420 was specified and the
421 .Fa addr
422 argument was not page aligned, or part of the desired address space
423 resides out of the valid address space for a user process.
424 .It Bq Er EINVAL
425 Both
426 .Dv MAP_FIXED
427 and
428 .Dv MAP_32BIT
429 were specified and part of the desired address space resides outside
430 of the first 2GB of user address space.
431 .It Bq Er EINVAL
432 The
433 .Fa len
434 argument
435 was equal to zero.
436 .It Bq Er EINVAL
437 .Dv MAP_ALIGNED
438 was specified and the desired alignment was either larger than the
439 virtual address size of the machine or smaller than a page.
440 .It Bq Er EINVAL
441 .Dv MAP_ANON
442 was specified and the
443 .Fa fd
444 argument was not -1.
445 .It Bq Er EINVAL
446 .Dv MAP_ANON
447 was specified and the
448 .Fa offset
449 argument was not 0.
450 .It Bq Er EINVAL
451 Both
452 .Dv MAP_FIXED
453 and
454 .Dv MAP_EXCL
455 were specified, but the requested region is already used by a mapping.
456 .It Bq Er EINVAL
457 .Dv MAP_EXCL
458 was specified, but
459 .Dv MAP_FIXED
460 was not.
461 .It Bq Er ENODEV
462 .Dv MAP_ANON
463 has not been specified and
464 .Fa fd
465 did not reference a regular or character special file.
466 .It Bq Er ENOMEM
467 .Dv MAP_FIXED
468 was specified and the
469 .Fa addr
470 argument was not available.
471 .Dv MAP_ANON
472 was specified and insufficient memory was available.
473 .El
474 .Sh SEE ALSO
475 .Xr madvise 2 ,
476 .Xr mincore 2 ,
477 .Xr minherit 2 ,
478 .Xr mlock 2 ,
479 .Xr mprotect 2 ,
480 .Xr msync 2 ,
481 .Xr munlock 2 ,
482 .Xr munmap 2 ,
483 .Xr getpagesize 3 ,
484 .Xr getpagesizes 3