Files
FAT-Allocator/docs/EuroSys/Paper/jemalloc.org~
2025-05-29 23:32:46 +01:00

44 lines
2.2 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
The provided pseudocode outlines a modified implementation
of jemallocs memory mapping routines, adapted to work with
a custom malloc(sz) allocator. Instead of relying on traditional
operating system mechanisms like mmap, the memory allocation is
handled using MALLOC(size), which refers to a simplified allocator
defined earlier. This custom allocator manages a preallocated
memory region, aligns the requested size, decrements a memory
counter, and returns a pointer with enforced bounds for memory
safety. This approach is especially suited for constrained or
security-focused environments such as CHERI, where strict
control over memory access and deterministic allocation
behavior is essential.
The os_pages_map function simulates jemallocs low-level page
mapping routine. It first checks if a specific address is
requested—a case relevant to CheriABI where such behavior
is disallowed—and returns NULL if so. If memory overcommitment
is allowed, it forces the commit flag to true. It then allocates
memory using the custom MALLOC(size) function and validates
whether the returned pointer matches the requested address
(if one was provided). If theres a mismatch, it unmaps the
memory and returns NULL; otherwise, it returns the allocated
pointer.
The pages_map function is a simplified variant that ignores
alignment and address constraints. It directly allocates the
requested memory size using the internal allocator and returns
the result. This is appropriate in scenarios where alignment is
either managed elsewhere or not critical.
The pages_commit_impl function emulates memory commitment, a
feature in systems that support lazy memory allocation. It
reallocates memory using MALLOC(size) and checks whether
the returned pointer matches the expected address. If not,
it unmaps the memory and signals failure by returning true;
otherwise, it indicates success by returning false.
Collectively, these routines demonstrate how jemalloc can be
adapted to operate atop a custom memory allocator instead of
relying on the OS. This enables jemalloc to function in
specialized environments that require stricter memory controls,
such as embedded systems or capability-based architectures,
while still maintaining its structure and allocation policies.