#
a959262c |
|
14-Dec-2019 |
Adrien Destugues <pulkomandy@pulkomandy.tk> |
implement mlock(), munlock() Change-Id: I2f04b8986d2ed32bb4d30d238d668e21a1505778 Reviewed-on: https://review.haiku-os.org/c/haiku/+/1991 Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
|
#
b3bd6696 |
|
29-May-2020 |
Michael Lotz <mmlr@mlotz.ch> |
libroot/kernel: Implement MADV_FREE madvise() extension. It allows an application to signal that it no longer needs the data in the given address range and the underlying pages can be discarded and reused elsewhere. This is finer grained than working with full areas or mappings at a time and enables unmapping sections of partially used mappings without giving up its address space. Compared with punching holes into a mapping by "mapping over" with PROT_NONE and MAP_NORESERVE, this has the obvious advantage of not producing a lot of unused extra areas and saves the corresponding resources. It is also a lot "lighter" of an operation than cutting existing areas. This introduces madvise() alongside the existing posix_madvise() to allow for OS specific extensions. The constants for both functions are aliased, the POSIX_MADV_* being a subset of the MADV_* ones without the non-POSIX extensions. Internally posix_madvise() simply calls madvise(). MADV_FREE is commonly supported in other OSes with various subtle semantic differences as to when pages are actually freed/cleared and how or whether the pages are counted against the memory use of a process. In the variant implemented here, pages are always immediately discarded and memory counting is not altered. This behaviour should be considered an implementation detail and may be altered later. The actual unmap and discard could for example be delayed until pages are needed elsewhere to reduce overhead in case of repeated discarding and remapping. Note that MADV_FREE doesn't really align with the rest of the madvise() API as it works like a command (i.e. discard these pages) and does not add an attribute to the pages in the given range (i.e. mark these pages for quick access from now on). As such, an MADV_FREE does not need to be undone by setting a different advice later on, unlike how the other flags work. This discrepancy may be the reason why it is not part of POSIX. Change-Id: Icc093379125a43e465dc4409d8f5ae0f64e107e0 Reviewed-on: https://review.haiku-os.org/c/haiku/+/2844 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
|
#
b94221f3 |
|
08-May-2020 |
Michael Lotz <mmlr@mlotz.ch> |
mmap: Use MAP_NORESERVE to request overcommit, not PROT_NONE. This reverts hrev54120 and instead adds the commonly supported MAP_NORESERVE flag to request overcommit. Using PROT_NONE for overcommit is problematic as the protection of individual pages can still be changed via mprotect to make them accessible, but that won't change the commitment. An application using such a pattern may then unexpectedly run into out of memory conditions on random writes into the address space. With MAP_NORESERVE the overcommit can explicitly be requested by applications that want to reserve address space without producing memory pressure. Change-Id: Id213d2245c5e23103e8e0857f7902e0cd8a2c65d Reviewed-on: https://review.haiku-os.org/c/haiku/+/2611 Reviewed-by: waddlesplash <waddlesplash@gmail.com> Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
|
#
173f54f1 |
|
19-Jul-2012 |
Matt Madia <mattmadia@gmail.com> |
Updated copyright in headers. No functional change.
|
#
0fae8733 |
|
03-Nov-2010 |
Scott McCreary <scottmc2@gmail.com> |
Updated posix headers to remove commas from copyright line, to match the preferred coding guidelines. Cleaned up some header style violations, making sure there are two blank lines after the header guards. This fixes the posix header part of #2191. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39288 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a9d7be07 |
|
07-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Implemented mprotect(). A vm_area does now have an optional array specifying the protection of each page (4 bits per page). * Added no-op implementation of posix_madvise(). * Replaced a few "addr_t size" parameters by "size_t size". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26871 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0f448d21 |
|
22-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added vm_page_write_modified_page_range(), which is similar to vm_page_write_modified_pages(), save that it only writes pages in the given range. * Added vm_page_schedule_write_page_range() which schedules all modified pages in the given cache's range for writing by the page writer. * Added _kern_sync_memory() syscall and the msync() POSIX function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25620 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b9320128 |
|
10-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Patch by Andreas Faerber: Replaced single-line comments by multi-line comments for ANSI C compliance. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25433 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f23d0a62 |
|
08-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Implement shm_open() and shm_unlink(). The shared memory objects are simply created as files in /boot/var/shared_memory/. The Bootscript clears the directory. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25374 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3cf7ecd1 |
|
13-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added <sys/mman.h> header. It declares only mmap() and munmap() yet and defines the macros needed by them. * Renamed syscall sys_vm_map_file() to _kern_map_file() and changed the path to an FD parameter. Changed vm_map_file() accordingly and adjusted the kernel ELF loader and the runtime loader. * Added syscall _kern_unmap_memory(). * Added bool unmapAddressRange parameter to vm_create_anonymous_area() and map_backing_store(). If true and the address specification is B_EXACT_ADDRESS, all areas in the specified address range will be deleted (unless an area is covered only partially). * Introduced B_SHARED_AREA flag, which is set on areas that have been created by {vm,_user}_map_file() with REGION_NO_PRIVATE_MAP. When fork()ing those areas won't be copied CoW, but rather be cloned. This is needed for mmap() MAP_SHARED. * {vm,_user}_map_file() also accept an FD argument < 0, in which case an anonymous area is created. * Implemented mmap() and munmap(). Currently there's the restriction that we can't partially unmap areas. Otherwise the functions should be rather compliant. We also support the non-POSIX extension MAP_ANONYMOUS. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24964 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
173f54f1473bd6a6511c5fc6dc899c91fb8dd667 |
|
19-Jul-2012 |
Matt Madia <mattmadia@gmail.com> |
Updated copyright in headers. No functional change.
|
#
0fae873352b02792db93f721c1a2ff6b240c8ecc |
|
03-Nov-2010 |
Scott McCreary <scottmc2@gmail.com> |
Updated posix headers to remove commas from copyright line, to match the preferred coding guidelines. Cleaned up some header style violations, making sure there are two blank lines after the header guards. This fixes the posix header part of #2191. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39288 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
a9d7be0708b660121608c1b916862ab6d664ba07 |
|
07-Aug-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Implemented mprotect(). A vm_area does now have an optional array specifying the protection of each page (4 bits per page). * Added no-op implementation of posix_madvise(). * Replaced a few "addr_t size" parameters by "size_t size". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26871 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
0f448d21e52dfbde6ebd029af30d19542224c16d |
|
22-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added vm_page_write_modified_page_range(), which is similar to vm_page_write_modified_pages(), save that it only writes pages in the given range. * Added vm_page_schedule_write_page_range() which schedules all modified pages in the given cache's range for writing by the page writer. * Added _kern_sync_memory() syscall and the msync() POSIX function. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25620 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
b93201281504cee31f4186f7c6548815940c576e |
|
10-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Patch by Andreas Faerber: Replaced single-line comments by multi-line comments for ANSI C compliance. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25433 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
f23d0a624287b6d275610e71d7c329323a565975 |
|
08-May-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
Implement shm_open() and shm_unlink(). The shared memory objects are simply created as files in /boot/var/shared_memory/. The Bootscript clears the directory. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25374 a95241bf-73f2-0310-859d-f6bbb57e9c96
|
#
3cf7ecd1e49db0ad531a6d81ad1945c4a6235010 |
|
13-Apr-2008 |
Ingo Weinhold <ingo_weinhold@gmx.de> |
* Added <sys/mman.h> header. It declares only mmap() and munmap() yet and defines the macros needed by them. * Renamed syscall sys_vm_map_file() to _kern_map_file() and changed the path to an FD parameter. Changed vm_map_file() accordingly and adjusted the kernel ELF loader and the runtime loader. * Added syscall _kern_unmap_memory(). * Added bool unmapAddressRange parameter to vm_create_anonymous_area() and map_backing_store(). If true and the address specification is B_EXACT_ADDRESS, all areas in the specified address range will be deleted (unless an area is covered only partially). * Introduced B_SHARED_AREA flag, which is set on areas that have been created by {vm,_user}_map_file() with REGION_NO_PRIVATE_MAP. When fork()ing those areas won't be copied CoW, but rather be cloned. This is needed for mmap() MAP_SHARED. * {vm,_user}_map_file() also accept an FD argument < 0, in which case an anonymous area is created. * Implemented mmap() and munmap(). Currently there's the restriction that we can't partially unmap areas. Otherwise the functions should be rather compliant. We also support the non-POSIX extension MAP_ANONYMOUS. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24964 a95241bf-73f2-0310-859d-f6bbb57e9c96
|