ladybird/Kernel
Andreas Kling ba87571366 Kernel: Implement zone-based buddy allocator for physical memory
The previous allocator was very naive and kept the state of all pages
in one big bitmap. When allocating, we had to scan through the bitmap
until we found an unset bit.

This patch introduces a new binary buddy allocator that manages the
physical memory pages.

Each PhysicalRegion is divided into zones (PhysicalZone) of 16MB each.
Any extra pages at the end of physical RAM that don't fit into a 16MB
zone are turned into 15 or fewer 1MB zones.

Each zone starts out with one full-sized block, which is then
recursively subdivided into halves upon allocation, until a block of
the request size can be returned.

There are more opportunities for improvement here: the way zone objects
are allocated and stored is non-optimal. Same goes for the allocation
of buddy block state bitmaps.
2021-07-13 22:40:25 +02:00
..
ACPI Kernel: Remove unused header includes in ACPI subtree 2021-07-11 21:37:38 +02:00
API LibPthread+Kernel: Add pthread_kill() and the thread_kill syscall 2021-07-09 15:36:50 +02:00
Arch Kernel: Remove unused header includes in Arch subtree 2021-07-11 21:37:38 +02:00
Bus Kernel: Remove "supervisor" bit from PhysicalPage 2021-07-12 11:09:42 +02:00
Devices Kernel: Standardize the header include style to 'include <Kernel/...>' 2021-07-11 21:37:38 +02:00
FileSystem Kernel: Remove unused header includes in FileSystem subtree 2021-07-11 21:37:38 +02:00
Graphics Kernel/Graphics: Move Bochs graphics related code into a separate folder 2021-07-12 22:53:08 +02:00
Heap Kernel: Remove unused header includes in Heap subtree 2021-07-11 21:37:38 +02:00
Interrupts Kernel: Remove unused header includes in Interrupts subtree 2021-07-11 21:37:38 +02:00
Modules Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Net Kernel: Remove unused header includes in Net subtree 2021-07-11 21:37:38 +02:00
Storage Kernel: Remove unused header includes in Storage subtree 2021-07-11 21:37:38 +02:00
Syscalls Kernel: Move new process registration out of Space spinlock scope 2021-07-12 10:20:21 +02:00
Tasks Kernel: Make VirtualFileSystem::sync() static 2021-07-11 00:26:17 +02:00
Time Kernel: Remove unused header includes in Time subtree 2021-07-11 21:37:38 +02:00
TTY Kernel: Standardize the header include style to 'include <Kernel/...>' 2021-07-11 21:37:38 +02:00
VirtIO Kernel: Make various T::class_name() and similar return StringView 2021-07-11 01:46:59 +02:00
VM Kernel: Implement zone-based buddy allocator for physical memory 2021-07-13 22:40:25 +02:00
AddressSanitizer.cpp Everywhere: Use bgianf@serenityos.org for my copyright attribution 2021-04-22 21:15:54 +02:00
AddressSanitizer.h Everywhere: Use bgianf@serenityos.org for my copyright attribution 2021-04-22 21:15:54 +02:00
Assertions.h Kernel: Add [[unlikely]] attribute to VERIFY 2021-06-29 22:57:52 +04:30
AtomicEdgeAction.h Kernel: Add AtomicEdgeAction class 2021-07-07 21:57:01 +02:00
CMakeLists.txt Kernel: Implement zone-based buddy allocator for physical memory 2021-07-13 22:40:25 +02:00
CMOS.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
CMOS.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
CommandLine.cpp Kernel: Move special sections into Sections.h 2021-06-24 00:38:23 +02:00
CommandLine.h Kernel/CommandLine: Add option to disable physical networking hardware 2021-06-09 22:44:09 +04:30
ConsoleDevice.cpp Kernel: Move special sections into Sections.h 2021-06-24 00:38:23 +02:00
ConsoleDevice.h Kernel: Make various T::class_name() and similar return StringView 2021-07-11 01:46:59 +02:00
CoreDump.cpp Kernel: Rename VFS => VirtualFileSystem 2021-07-11 00:25:24 +02:00
CoreDump.h Kernel: Use Forward.h headers more 2021-07-11 14:14:51 +02:00
Debug.h.in USB: Further Implement USB Structures 2021-06-12 18:17:25 +04:30
DoubleBuffer.cpp Kernel: Pull apart CPU.h 2021-06-24 00:38:23 +02:00
DoubleBuffer.h Kernel: Use KResultOr<size_t> for the DoubleBuffer class 2021-06-16 21:29:36 +02:00
Forward.h Kernel: Remove some duplicate forward declarations 2021-07-11 15:15:57 +02:00
FutexQueue.cpp Kernel: Fix futex race that could lead to thread waiting forever 2021-07-07 10:05:55 +02:00
FutexQueue.h Kernel: Fix futex race that could lead to thread waiting forever 2021-07-07 10:05:55 +02:00
GlobalProcessExposed.cpp Kernel: Use Forward.h headers more 2021-07-11 14:14:51 +02:00
init.cpp Kernel: Initialize threading and process management earlier 2021-07-12 11:27:18 +02:00
IO.h Kernel: Specify I/O size for BMIDEChannel 2021-06-28 15:55:00 +02:00
KBuffer.h Kernel: Fix always-true comparison warnings 2021-07-03 01:56:31 +04:30
KBufferBuilder.cpp Everywhere: Use nothrow new with adopt_{ref,own}_if_nonnull 2021-06-24 17:35:49 +04:30
KBufferBuilder.h Kernel: Avoid allocations in KBufferBuilder::appendff 2021-05-13 08:27:42 +02:00
KLexicalPath.cpp Kernel: Make KLexicalPath::basename() more compliant 2021-07-11 14:10:58 +02:00
KLexicalPath.h Kernel: Add KLexicalPath::try_join and use it 2021-07-07 15:32:17 +02:00
kprintf.cpp Kernel: Add dbgputch() to kstdio.h 2021-06-24 10:29:09 +02:00
KResult.h AK+Kernel: Fix perfect forwarding constructors shadowing others 2021-07-08 10:11:00 +02:00
kstdio.h Kernel: Add dbgputch() to kstdio.h 2021-06-24 10:29:09 +02:00
KString.cpp Kernel: Use kfree_sized() in KString 2021-07-11 14:14:51 +02:00
KString.h Kernel: Add formatter function for OwnPtr<KString> 2021-07-07 15:32:17 +02:00
KSyms.cpp Kernel: Rename VFS => VirtualFileSystem 2021-07-11 00:25:24 +02:00
KSyms.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
linker.ld Kernel: Make sure the kernel's ELF PHDRs don't use rwx 2021-06-19 12:54:33 +02:00
Lock.cpp Kernel: Allow Lock to block from BlockCondition 2021-07-12 11:27:18 +02:00
Lock.h Kernel: Allow Lock to block from BlockCondition 2021-07-12 11:27:18 +02:00
LockMode.h Kernel: Allow Lock to block from BlockCondition 2021-07-12 11:27:18 +02:00
mkmap.sh Kernel+LibELF: Don't demangle symbols in the kernel 2021-07-06 19:08:22 +02:00
Module.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Multiboot.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Panic.cpp Kernel: Pull apart CPU.h 2021-06-24 00:38:23 +02:00
Panic.h Kernel/Graphics + SystemServer: Support text mode properly 2021-05-16 19:58:33 +02:00
PerformanceEventBuffer.cpp Kernel: Remove some unnecessary JSON related includes 2021-06-29 22:11:10 +02:00
PerformanceEventBuffer.h Kernel: Add support for profiling kmalloc()/kfree() 2021-05-19 22:51:42 +02:00
PerformanceManager.h Kernel+Userland: Add x86_64 registers to RegisterState/PtraceRegisters 2021-06-27 15:46:42 +02:00
PhysicalAddress.h Kernel: Move PhysicalPage classes out of the heap into an array 2021-07-08 11:43:34 +02:00
Process.cpp Kernel: Allow Lock to block from BlockCondition 2021-07-12 11:27:18 +02:00
Process.h Kernel: Initialize threading and process management earlier 2021-07-12 11:27:18 +02:00
ProcessExposed.cpp Kernel: Rename ProcFSComponentsRegistrar => ProcFSComponentRegistry 2021-07-11 01:40:26 +02:00
ProcessExposed.h Kernel: Use Forward.h headers more 2021-07-11 14:14:51 +02:00
ProcessGroup.cpp Kernel: Standardize the header include style to 'include <Kernel/...>' 2021-07-11 21:37:38 +02:00
ProcessGroup.h Kernel: Switch ProcessGroup to IntrusiveList from InlineLinkedList 2021-06-03 13:27:40 +02:00
ProcessSpecificExposed.cpp Kernel: Rename ProcFSComponentsRegistrar => ProcFSComponentRegistry 2021-07-11 01:40:26 +02:00
Random.cpp Kernel: Don't use function-level static variables 2021-06-24 09:27:13 +02:00
Random.h Kernel: Pull apart CPU.h 2021-06-24 00:38:23 +02:00
RTC.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
RTC.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
Scheduler.cpp Kernel: Kill user mode threads that are marked to die 2021-07-13 20:23:10 +02:00
Scheduler.h Kernel: Avoid unnecessary context switch when no other thread is ready 2021-07-12 10:19:31 +02:00
Sections.h Kernel: Create and use USER_RANGE_CEILING 2021-07-11 19:42:00 +02:00
SpinLock.h Kernel: Pull apart CPU.h 2021-06-24 00:38:23 +02:00
StdLib.cpp Kernel: Remove some no-longer-needed C library functions 2021-07-11 14:14:51 +02:00
StdLib.h Everywhere: Fix incorrect usages of AK::Checked 2021-07-04 20:08:28 +01:00
Syscall.cpp Revert "Kernel: Make sure threads which don't do any syscalls are t..." 2021-07-13 20:23:10 +02:00
Thread.cpp Kernel: Allow Lock to block from BlockCondition 2021-07-12 11:27:18 +02:00
Thread.h Revert "Kernel: Make sure threads which don't do any syscalls are t..." 2021-07-13 20:23:10 +02:00
ThreadBlockers.cpp Kernel: Fix error propagation if Thread::WaitBlocker constructor fails 2021-06-07 09:43:30 +02:00
ThreadTracer.cpp Kernel: Remove unused header includes in root kernel tree 2021-07-11 21:37:38 +02:00
ThreadTracer.h Everywhere: Use nothrow new with adopt_{ref,own}_if_nonnull 2021-06-24 17:35:49 +04:30
TimerQueue.cpp Kernel: Fix deadlock cancelling timer 2021-07-12 11:27:18 +02:00
TimerQueue.h Kernel: Fix deadlock cancelling timer 2021-07-12 11:27:18 +02:00
UBSanitizer.cpp Kernel: Pull apart CPU.h 2021-06-24 00:38:23 +02:00
UnixTypes.h LibC: Define MSG_OOB 2021-06-04 10:39:41 +02:00
UnveilNode.h Kernel: Allow unveiling subfolders regardless of parent's permissions 2021-06-08 12:15:04 +02:00
UserOrKernelBuffer.cpp Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
UserOrKernelBuffer.h Kernel: Remove obsolete size_t casts 2021-06-17 19:52:54 +02:00
VirtualAddress.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
WaitQueue.cpp Everywhere: Use "the SerenityOS developers." in copyright headers 2021-04-29 00:59:26 +02:00
WaitQueue.h Everywhere: Use "the SerenityOS developers." in copyright headers 2021-04-29 00:59:26 +02:00
WorkQueue.cpp Kernel: Move special sections into Sections.h 2021-06-24 00:38:23 +02:00
WorkQueue.h Kernel: Use plain Function objects for the WorkQueue 2021-05-19 21:36:57 +02:00