87689e25ea
* The vm_translation_map is now correctly held in all of the vm_ mapping functions. * Removed the old vm_daemons.c file - there is now a new vm_daemons.cpp which contains the beginnings of our new page daemon. So far, it's pretty static and not much tested. What it currently does is to rescan all pages in the system with a two-handed clock algorithm and push pages into the modified and inactive lists. * These inactive pages aren't really stolen yet, even though their mappings are removed (ie. their next access will cause a page fault). This should slow down Haiku a bit more, great, huh? :-) * The page daemon currently only runs on low memory situations, though. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22156 a95241bf-73f2-0310-859d-f6bbb57e9c96
59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
/*
|
|
* Copyright 2002-2007, 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_PRIV_H
|
|
#define _KERNEL_VM_PRIV_H
|
|
|
|
#include <vm.h>
|
|
#include <util/khash.h>
|
|
|
|
/* should make these scale with the system */
|
|
#define DEFAULT_KERNEL_WORKING_SET 1024
|
|
#define DEFAULT_WORKING_SET 256
|
|
#define DEFAULT_MAX_WORKING_SET 65536
|
|
#define DEFAULT_MIN_WORKING_SET 64
|
|
|
|
#define WORKING_SET_INCREMENT 32
|
|
#define WORKING_SET_DECREMENT 32
|
|
|
|
#define PAGE_DAEMON_INTERVAL 500000
|
|
#define PAGE_SCAN_QUANTUM 500
|
|
#define WORKING_SET_ADJUST_INTERVAL 5000000
|
|
#define MAX_FAULTS_PER_SECOND 100
|
|
#define MIN_FAULTS_PER_SECOND 10
|
|
|
|
#define WRITE_COUNT 1024
|
|
#define READ_COUNT 1
|
|
|
|
// 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);
|
|
status_t vm_daemon_init(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _KERNEL_VM_PRIV_H */
|
|
|