mirror of
https://review.haiku-os.org/haiku
synced 2025-01-22 14:24:48 +01:00
cff6e9e406
memory and page reservation functions have a new "priority" parameter that indicates how deep the function may tap into that reserve. The currently existing priority levels are "user", "system", and "VIP". The idea is that user programs should never be able to cause a state that gets the kernel into trouble due to heavy battling for memory. The "VIP" level (not really used yet) is intended for allocations that are required to free memory eventually (in the page writer). More levels are thinkable in the future, like "user real time" or "user system server". * Added "priority" parameters to several VMCache methods. * Replaced the map_backing_store() "unmapAddressRange" parameter by a "flags" parameter. * Added area creation flag CREATE_AREA_PRIORITY_VIP and slab allocator flag CACHE_PRIORITY_VIP indicating the importance of the request. * Changed most code to pass the right priorities/flags. These changes already significantly improve the behavior in low memory situations. I've tested a bit with 64 MB (virtual) RAM and, while not particularly fast and responsive, the system remains at least usable under high memory pressure. As a side effect the slab allocator can now be used as general memory allocator. Not done by default yet, though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35295 a95241bf-73f2-0310-859d-f6bbb57e9c96
45 lines
1.0 KiB
C
45 lines
1.0 KiB
C
/*
|
|
* Copyright 2002-2008, Haiku. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
|
* Distributed under the terms of the NewOS License.
|
|
*/
|
|
#ifndef _KERNEL_VM_VM_PRIV_H
|
|
#define _KERNEL_VM_VM_PRIV_H
|
|
|
|
|
|
#include <vm/vm_types.h>
|
|
|
|
|
|
// reserved area definitions
|
|
#define RESERVED_AREA_ID -1
|
|
#define RESERVED_AVOID_BASE 0x01
|
|
|
|
// page attributes (in addition to B_READ_AREA etc.)
|
|
#define PAGE_MODIFIED 0x1000
|
|
#define PAGE_ACCESSED 0x2000
|
|
#define PAGE_PRESENT 0x4000
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// Should only be used by vm internals
|
|
status_t vm_page_fault(addr_t address, addr_t faultAddress, bool isWrite,
|
|
bool isUser, addr_t *newip);
|
|
void vm_unreserve_memory(size_t bytes);
|
|
status_t vm_try_reserve_memory(size_t bytes, int priority, bigtime_t timeout);
|
|
void vm_schedule_page_scanner(uint32 target);
|
|
status_t vm_daemon_init(void);
|
|
|
|
const char *page_state_to_string(int state);
|
|
// for debugging purposes only
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _KERNEL_VM_VM_PRIV_H */
|