a6778735f9
* We now have a page writer that takes some pages from the modified queue and writes it back every few seconds. It can be triggered by the page scanner to do that more often, though. That mechanism can be greatly improved once we have our I/O scheduler working. * Removed vm_page_write_modified_page() again - it was all "eaten up" by the page writer. * Reworked vm_page_write_modified_pages() a bit: it now uses vm_test_map_modification() and vm_clear_map_flags() instead of the iterating over all areas which wouldn't even work correctly. The code is much simpler now, too. * You usually put something to the tail of a queue, and remove the contents from the head, not vice versa - changed queue implementation to reflect this. * Additionally, there is now a enqueue_page_to_head() if you actually want the opposite. * vm_page_requeue() allows you to move a page in a queue to the head or tail. * Replaced vm_clear_map_activation() with vm_clear_map_flags() which allows you to clear other flags than PAGE_ACCESSED. * The page scanner dumps now some arguments with each run. * Removed the old disabled pageout_daemon() from NewOS. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22348 a95241bf-73f2-0310-859d-f6bbb57e9c96
54 lines
1.5 KiB
C
54 lines
1.5 KiB
C
/*
|
|
* Copyright 2002-2007, Axel Dörfler, axeld@pinc-software.de.
|
|
* 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_PAGE_H
|
|
#define _KERNEL_VM_PAGE_H
|
|
|
|
|
|
#include <vm.h>
|
|
|
|
|
|
struct kernel_args;
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void vm_page_init_num_pages(struct kernel_args *args);
|
|
status_t vm_page_init(struct kernel_args *args);
|
|
status_t vm_page_init_post_area(struct kernel_args *args);
|
|
status_t vm_page_init_post_thread(struct kernel_args *args);
|
|
|
|
status_t vm_mark_page_inuse(addr_t page);
|
|
status_t vm_mark_page_range_inuse(addr_t startPage, addr_t length);
|
|
status_t vm_page_set_state(struct vm_page *page, int state);
|
|
void vm_page_requeue(struct vm_page *page, bool tail);
|
|
|
|
// get some data about the number of pages in the system
|
|
size_t vm_page_num_pages(void);
|
|
size_t vm_page_num_free_pages(void);
|
|
|
|
status_t vm_page_write_modified_pages(struct vm_cache *cache, bool fsReenter);
|
|
void vm_page_schedule_write_page(struct vm_page *page);
|
|
|
|
void vm_page_unreserve_pages(uint32 count);
|
|
void vm_page_reserve_pages(uint32 count);
|
|
|
|
struct vm_page *vm_page_allocate_page(int pageState, bool reserved);
|
|
status_t vm_page_allocate_pages(int pageState, struct vm_page **pages,
|
|
uint32 numPages);
|
|
struct vm_page *vm_page_allocate_page_run(int state, addr_t length);
|
|
struct vm_page *vm_page_at_index(int32 index);
|
|
struct vm_page *vm_lookup_page(addr_t pageNumber);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _KERNEL_VM_PAGE_H */
|