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.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by the University of 15.\" California, Berkeley and its contributors. 16.\" 4. Neither the name of the University nor the names of its contributors 17.\" may be used to endorse or promote products derived from this software 18.\" without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" @(#)mmap.2 8.4 (Berkeley) 5/11/95
| 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.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by the University of 15.\" California, Berkeley and its contributors. 16.\" 4. Neither the name of the University nor the names of its contributors 17.\" may be used to endorse or promote products derived from this software 18.\" without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" @(#)mmap.2 8.4 (Berkeley) 5/11/95
|
33.\" $FreeBSD: head/lib/libc/sys/mmap.2 57550 2000-02-28 04:10:35Z ps $
| 33.\" $FreeBSD: head/lib/libc/sys/mmap.2 57686 2000-03-02 09:14:21Z sheldonh $
|
34.\" 35.Dd May 11, 1995 36.Dt MMAP 2 37.Os BSD 4 38.Sh NAME 39.Nm mmap 40.Nd map files or devices into memory 41.Sh SYNOPSIS 42.Fd #include <sys/types.h> 43.Fd #include <sys/mman.h> 44.Ft void * 45.Fn mmap "void * addr" "size_t len" "int prot" "int flags" "int fd" "off_t offset" 46.Sh DESCRIPTION 47The 48.Fn mmap 49function causes the pages starting at 50.Fa addr 51and continuing for at most 52.Fa len 53bytes to be mapped from the object described by 54.Fa fd , 55starting at byte offset 56.Fa offset . 57If 58.Fa len 59is not a multiple of the pagesize, the mapped region may extend past the 60specified range. 61Any such extension beyond the end of the mapped object will be zero-filled. 62.Pp 63If 64.Fa addr 65is non-zero, it is used as a hint to the system. 66(As a convenience to the system, the actual address of the region may differ 67from the address supplied.) 68If 69.Fa addr 70is zero, an address will be selected by the system. 71The actual starting address of the region is returned. 72A successful 73.Fa mmap 74deletes any previous mapping in the allocated address range. 75.Pp 76The protections (region accessibility) are specified in the 77.Fa prot 78argument by 79.Em or Ns 'ing 80the following values: 81.Pp 82.Bl -tag -width MAP_FIXEDX 83.It Dv PROT_EXEC 84Pages may be executed. 85.It Dv PROT_READ 86Pages may be read. 87.It Dv PROT_WRITE 88Pages may be written. 89.El 90.Pp 91The 92.Fa flags 93parameter specifies the type of the mapped object, mapping options and 94whether modifications made to the mapped copy of the page are private 95to the process or are to be shared with other references. 96Sharing, mapping type and options are specified in the 97.Fa flags 98argument by 99.Em or Ns 'ing 100the following values: 101.Pp 102.Bl -tag -width MAP_FIXEDX 103.It Dv MAP_ANON 104Map anonymous memory not associated with any specific file. 105The file descriptor used for creating 106.Dv MAP_ANON 107must be \-1. 108The 109.Fa offset 110parameter is ignored. 111.\".It Dv MAP_FILE 112.\"Mapped from a regular file or character-special device memory. 113.It Dv MAP_FIXED 114Do not permit the system to select a different address than the one 115specified. 116If the specified address cannot be used, 117.Fn mmap 118will fail. 119If MAP_FIXED is specified, 120.Fa addr 121must be a multiple of the pagesize. 122Use of this option is discouraged. 123.It Dv MAP_HASSEMAPHORE 124Notify the kernel that the region may contain semaphores and that special 125handling may be necessary. 126.It Dv MAP_INHERIT 127Permit regions to be inherited across 128.Xr execve 2 129system calls. 130.It Dv MAP_PRIVATE 131Modifications are private. 132.It Dv MAP_SHARED 133Modifications are shared. 134.It Dv MAP_STACK 135This option is only available if your system has been compiled with
| 34.\" 35.Dd May 11, 1995 36.Dt MMAP 2 37.Os BSD 4 38.Sh NAME 39.Nm mmap 40.Nd map files or devices into memory 41.Sh SYNOPSIS 42.Fd #include <sys/types.h> 43.Fd #include <sys/mman.h> 44.Ft void * 45.Fn mmap "void * addr" "size_t len" "int prot" "int flags" "int fd" "off_t offset" 46.Sh DESCRIPTION 47The 48.Fn mmap 49function causes the pages starting at 50.Fa addr 51and continuing for at most 52.Fa len 53bytes to be mapped from the object described by 54.Fa fd , 55starting at byte offset 56.Fa offset . 57If 58.Fa len 59is not a multiple of the pagesize, the mapped region may extend past the 60specified range. 61Any such extension beyond the end of the mapped object will be zero-filled. 62.Pp 63If 64.Fa addr 65is non-zero, it is used as a hint to the system. 66(As a convenience to the system, the actual address of the region may differ 67from the address supplied.) 68If 69.Fa addr 70is zero, an address will be selected by the system. 71The actual starting address of the region is returned. 72A successful 73.Fa mmap 74deletes any previous mapping in the allocated address range. 75.Pp 76The protections (region accessibility) are specified in the 77.Fa prot 78argument by 79.Em or Ns 'ing 80the following values: 81.Pp 82.Bl -tag -width MAP_FIXEDX 83.It Dv PROT_EXEC 84Pages may be executed. 85.It Dv PROT_READ 86Pages may be read. 87.It Dv PROT_WRITE 88Pages may be written. 89.El 90.Pp 91The 92.Fa flags 93parameter specifies the type of the mapped object, mapping options and 94whether modifications made to the mapped copy of the page are private 95to the process or are to be shared with other references. 96Sharing, mapping type and options are specified in the 97.Fa flags 98argument by 99.Em or Ns 'ing 100the following values: 101.Pp 102.Bl -tag -width MAP_FIXEDX 103.It Dv MAP_ANON 104Map anonymous memory not associated with any specific file. 105The file descriptor used for creating 106.Dv MAP_ANON 107must be \-1. 108The 109.Fa offset 110parameter is ignored. 111.\".It Dv MAP_FILE 112.\"Mapped from a regular file or character-special device memory. 113.It Dv MAP_FIXED 114Do not permit the system to select a different address than the one 115specified. 116If the specified address cannot be used, 117.Fn mmap 118will fail. 119If MAP_FIXED is specified, 120.Fa addr 121must be a multiple of the pagesize. 122Use of this option is discouraged. 123.It Dv MAP_HASSEMAPHORE 124Notify the kernel that the region may contain semaphores and that special 125handling may be necessary. 126.It Dv MAP_INHERIT 127Permit regions to be inherited across 128.Xr execve 2 129system calls. 130.It Dv MAP_PRIVATE 131Modifications are private. 132.It Dv MAP_SHARED 133Modifications are shared. 134.It Dv MAP_STACK 135This option is only available if your system has been compiled with
|
136VM_STACK defined when compiling the kernel. This is the default for 137i386 only. Consider adding -DVM_STACK to COPTFLAGS in your /etc/make.conf 138to enable this option for other architechures. MAP_STACK implies
| 136VM_STACK defined when compiling the kernel. 137This is the default for 138i386 only. 139Consider adding -DVM_STACK to COPTFLAGS in your /etc/make.conf 140to enable this option for other architechures. 141MAP_STACK implies
|
139MAP_ANON, and 140.Fa offset 141of 0. 142.Fa fd 143must be -1 and 144.Fa prot 145must include at least PROT_READ and PROT_WRITE. This option creates 146a memory region that grows to at most 147.Fa len 148bytes in size, starting from the stack top and growing down. The 149stack top is the starting address returned by the call, plus 150.Fa len 151bytes. The bottom of the stack at maximum growth is the starting 152address returned by the call. 153.It Dv MAP_NOSYNC 154Causes data dirtied via this VM map to be flushed to physical media 155only when necessary (usually by the pager) rather then gratuitously. 156Typically this prevents the update daemons from flushing pages dirtied 157through such maps and thus allows efficient sharing of memory across 158unassociated processes using a file-backed shared memory map. Without 159this option any VM pages you dirty may be flushed to disk every so often 160(every 30-60 seconds usually) which can create performance problems if you 161do not need that to occur (such as when you are using shared file-backed 162mmap regions for IPC purposes). Note that VM/filesystem coherency is 163maintained whether you use MAP_NOSYNC or not. This option is not portable 164across UNIX platforms (yet), though some may implement the same behavior 165by default. 166.Pp 167The 168.Xr fsync 2 169function will flush all dirty data and metadata associated with a file, 170including dirty NOSYNC VM data, to physical media. The 171.Xr sync 1 172command and 173.Xr sync 2 174system call generally do not flush dirty NOSYNC VM data. 175The 176.Xr msync 2 177system call is obsolete since 178.Bx 179implements a coherent filesystem buffer cache. However, it may be 180used to associate dirty VM pages with filesystem buffers and thus cause 181them to be flushed to physical media sooner rather then later. 182.It Dv MAP_NOCORE 183Region is not included in a core file. 184.El 185.Pp 186The 187.Xr close 2 188function does not unmap pages, see 189.Xr munmap 2 190for further information. 191.Pp 192The current design does not allow a process to specify the location of 193swap space. 194In the future we may define an additional mapping type, 195.Dv MAP_SWAP , 196in which 197the file descriptor argument specifies a file or device to which swapping 198should be done. 199.Sh RETURN VALUES 200Upon successful completion, 201.Fn mmap 202returns a pointer to the mapped region. 203Otherwise, a value of MAP_FAILED is returned and 204.Va errno 205is set to indicate the error. 206.Sh ERRORS 207.Fn Mmap 208will fail if: 209.Bl -tag -width Er 210.It Bq Er EACCES 211The flag 212.Dv PROT_READ 213was specified as part of the 214.Fa prot 215parameter and 216.Fa fd 217was not open for reading. 218The flags 219.Dv MAP_SHARED 220and 221.Dv PROT_WRITE 222were specified as part of the 223.Fa flags 224and 225.Fa prot 226parameters and 227.Fa fd 228was not open for writing. 229.It Bq Er EBADF 230.Fa Fd 231is not a valid open file descriptor. 232.It Bq Er EINVAL 233.Dv MAP_FIXED 234was specified and the 235.Fa addr 236parameter was not page aligned, or part of the desired address space 237resides out of the valid address space for a user process. 238.It Bq Er EINVAL 239.Fa Len 240was negative. 241.It Bq Er EINVAL 242.Dv MAP_ANON 243was specified and the 244.Fa fd 245parameter was not -1. 246.It Bq Er EINVAL 247.Dv MAP_ANON 248has not been specified and 249.Fa fd 250did not reference a regular or character special file. 251.It Bq Er EINVAL 252.Fa Offset 253was not page-aligned. (See BUGS below.) 254.It Bq Er ENOMEM 255.Dv MAP_FIXED 256was specified and the 257.Fa addr 258parameter wasn't available, or the system has reached the per-process mmap 259limit specified in the vm.max_proc_mmap sysctl. 260.Dv MAP_ANON 261was specified and insufficient memory was available. 262.Sh "SEE ALSO" 263.Xr madvise 2 , 264.Xr mincore 2 , 265.Xr mlock 2 , 266.Xr mprotect 2 , 267.Xr msync 2 , 268.Xr munlock 2 , 269.Xr munmap 2 , 270.Xr getpagesize 3 271.Sh BUGS 272.Ar len 273is limited to 2GB. Mmapping slightly more than 2GB doesn't work, but 274it is possible to map a window of size (filesize % 2GB) for file sizes 275of slightly less than 2G, 4GB, 6GB and 8GB. 276.Pp
| 142MAP_ANON, and 143.Fa offset 144of 0. 145.Fa fd 146must be -1 and 147.Fa prot 148must include at least PROT_READ and PROT_WRITE. This option creates 149a memory region that grows to at most 150.Fa len 151bytes in size, starting from the stack top and growing down. The 152stack top is the starting address returned by the call, plus 153.Fa len 154bytes. The bottom of the stack at maximum growth is the starting 155address returned by the call. 156.It Dv MAP_NOSYNC 157Causes data dirtied via this VM map to be flushed to physical media 158only when necessary (usually by the pager) rather then gratuitously. 159Typically this prevents the update daemons from flushing pages dirtied 160through such maps and thus allows efficient sharing of memory across 161unassociated processes using a file-backed shared memory map. Without 162this option any VM pages you dirty may be flushed to disk every so often 163(every 30-60 seconds usually) which can create performance problems if you 164do not need that to occur (such as when you are using shared file-backed 165mmap regions for IPC purposes). Note that VM/filesystem coherency is 166maintained whether you use MAP_NOSYNC or not. This option is not portable 167across UNIX platforms (yet), though some may implement the same behavior 168by default. 169.Pp 170The 171.Xr fsync 2 172function will flush all dirty data and metadata associated with a file, 173including dirty NOSYNC VM data, to physical media. The 174.Xr sync 1 175command and 176.Xr sync 2 177system call generally do not flush dirty NOSYNC VM data. 178The 179.Xr msync 2 180system call is obsolete since 181.Bx 182implements a coherent filesystem buffer cache. However, it may be 183used to associate dirty VM pages with filesystem buffers and thus cause 184them to be flushed to physical media sooner rather then later. 185.It Dv MAP_NOCORE 186Region is not included in a core file. 187.El 188.Pp 189The 190.Xr close 2 191function does not unmap pages, see 192.Xr munmap 2 193for further information. 194.Pp 195The current design does not allow a process to specify the location of 196swap space. 197In the future we may define an additional mapping type, 198.Dv MAP_SWAP , 199in which 200the file descriptor argument specifies a file or device to which swapping 201should be done. 202.Sh RETURN VALUES 203Upon successful completion, 204.Fn mmap 205returns a pointer to the mapped region. 206Otherwise, a value of MAP_FAILED is returned and 207.Va errno 208is set to indicate the error. 209.Sh ERRORS 210.Fn Mmap 211will fail if: 212.Bl -tag -width Er 213.It Bq Er EACCES 214The flag 215.Dv PROT_READ 216was specified as part of the 217.Fa prot 218parameter and 219.Fa fd 220was not open for reading. 221The flags 222.Dv MAP_SHARED 223and 224.Dv PROT_WRITE 225were specified as part of the 226.Fa flags 227and 228.Fa prot 229parameters and 230.Fa fd 231was not open for writing. 232.It Bq Er EBADF 233.Fa Fd 234is not a valid open file descriptor. 235.It Bq Er EINVAL 236.Dv MAP_FIXED 237was specified and the 238.Fa addr 239parameter was not page aligned, or part of the desired address space 240resides out of the valid address space for a user process. 241.It Bq Er EINVAL 242.Fa Len 243was negative. 244.It Bq Er EINVAL 245.Dv MAP_ANON 246was specified and the 247.Fa fd 248parameter was not -1. 249.It Bq Er EINVAL 250.Dv MAP_ANON 251has not been specified and 252.Fa fd 253did not reference a regular or character special file. 254.It Bq Er EINVAL 255.Fa Offset 256was not page-aligned. (See BUGS below.) 257.It Bq Er ENOMEM 258.Dv MAP_FIXED 259was specified and the 260.Fa addr 261parameter wasn't available, or the system has reached the per-process mmap 262limit specified in the vm.max_proc_mmap sysctl. 263.Dv MAP_ANON 264was specified and insufficient memory was available. 265.Sh "SEE ALSO" 266.Xr madvise 2 , 267.Xr mincore 2 , 268.Xr mlock 2 , 269.Xr mprotect 2 , 270.Xr msync 2 , 271.Xr munlock 2 , 272.Xr munmap 2 , 273.Xr getpagesize 3 274.Sh BUGS 275.Ar len 276is limited to 2GB. Mmapping slightly more than 2GB doesn't work, but 277it is possible to map a window of size (filesize % 2GB) for file sizes 278of slightly less than 2G, 4GB, 6GB and 8GB. 279.Pp
|
277The limit is imposed for a variety of reasons. Most of them have to do
| 280The limit is imposed for a variety of reasons. 281Most of them have to do
|
278with 279.Tn FreeBSD 280not wanting to use 64 bit offsets in the VM system due to
| 282with 283.Tn FreeBSD 284not wanting to use 64 bit offsets in the VM system due to
|
281the extreme performance penalty. So
| 285the extreme performance penalty. 286So
|
282.Tn FreeBSD 283uses 32bit page indexes and 284this gives 285.Tn FreeBSD
| 287.Tn FreeBSD 288uses 32bit page indexes and 289this gives 290.Tn FreeBSD
|
286a maximum of 8TB filesizes. It's actually bugs in
| 291a maximum of 8TB filesizes. 292It's actually bugs in
|
287the filesystem code that causes the limit to be further restricted to 2881TB (loss of precision when doing blockno calculations). 289.Pp 290Another reason for the 2GB limit is that filesystem metadata can 291reside at negative offsets. 292.Pp 293We currently can only deal with page aligned file offsets.
| 293the filesystem code that causes the limit to be further restricted to 2941TB (loss of precision when doing blockno calculations). 295.Pp 296Another reason for the 2GB limit is that filesystem metadata can 297reside at negative offsets. 298.Pp 299We currently can only deal with page aligned file offsets.
|