kernel: Rewrite guarded_heap.
Compared to the old kernel guarded heap, this new one: * Uses VMTranslationMap and related APIs directly, rather than indirectly through the "protection cookie" system. This means those custom APIs, which nothing else except the guarded heap used, can now be dropped. * Does not allocate vm_pages for guard pages, and frees vm_pages when not in use. This means that DISABLE_MEMORY_REUSE is much more usable now, as it only does not reuse virtual memory, allowing for much longer-running systems. * Uses trees to manage meta chunks. This avoids unbounded growth of the meta chunk count, especially under DISABLE_MEMORY_REUSE. * Handles page faults directly and prints information about the fault address/allocation automatically. The system still boots and runs fine with this new guarded heap, including under USE...FOR_OBJECT_CACHE. Change-Id: If85e5689a47088790287990c881364fcde4cc76d Reviewed-on: https://review.haiku-os.org/c/haiku/+/9705 Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
90fa6d12f0
commit
d36a3e286b
@@ -31,7 +31,6 @@ KernelMergeObject kernel_core.o :
|
||||
cpu.cpp
|
||||
DPC.cpp
|
||||
elf.cpp
|
||||
guarded_heap.cpp
|
||||
heap.cpp
|
||||
image.cpp
|
||||
interrupts.cpp
|
||||
|
||||
@@ -24,6 +24,7 @@ KernelMergeObject kernel_debug.o :
|
||||
font_big.cpp
|
||||
frame_buffer_console.cpp
|
||||
gdb.cpp
|
||||
guarded_heap.cpp
|
||||
safemode_settings.cpp
|
||||
system_profiler.cpp
|
||||
tracing.cpp
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -3992,7 +3992,7 @@ vm_init(kernel_args* args)
|
||||
|
||||
// allocate areas to represent stuff that already exists
|
||||
|
||||
#if USE_DEBUG_HEAP_FOR_MALLOC || USE_GUARDED_HEAP_FOR_MALLOC
|
||||
#if USE_DEBUG_HEAP_FOR_MALLOC
|
||||
address = (void*)ROUNDDOWN(heapBase, B_PAGE_SIZE);
|
||||
create_area("kernel heap", &address, B_EXACT_ADDRESS, heapSize,
|
||||
B_ALREADY_WIRED, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA);
|
||||
|
||||
Reference in New Issue
Block a user