m³OS docs GitHub

Component explorer

Memory Manager

The memory manager owns frame allocation, virtual mappings, and the policies that let later phases isolate work safely.

Responsibilities

  • Allocate and reclaim physical frames.
  • Manage kernel and userspace mappings.
  • Provide the memory primitives later subsystems build on.

The memory manager is introduced in Memory Basics and later touched by 15 phase(s).

Key files

  • kernel/src/mm/memory_map.rs — The memory-map logic lives in kernel/src/mm/memory_map.rs.
  • kernel/src/mm/frame_allocator.rs — The frame allocator lives in kernel/src/mm/frame_allocator.rs.
  • kernel/src/mm/paging.rs — The page-table helpers live in kernel/src/mm/paging.rs.
  • kernel/src/mm/heap.rs — The heap setup lives in kernel/src/mm/heap.rs.
  • kernel/src/mm/debug.rs — The debug helpers live in kernel/src/mm/debug.rs, and the smoke-test allocations
  • kernel/src/mm/user_mem.rs — kernel/src/mm/user_mem.rs) to transfer bytes through the caller's page
  • kernel/src/mm/elf.rs — kernel/src/mm/elf.rs — setup_abi_stack_with_envp (envp support)
  • kernel/src/mm/mod.rs — Update free_process_page_table() in kernel/src/mm/mod.rs to walk all four
  • kernel-core/src/buddy.rs — Implements a binary buddy system for physical frame allocation. Free lists are
  • kernel-core/src/slab.rs — allocator is host-testable via kernel-core.
  • kernel/src/mm/slab.rs — New: kernel slab cache instances
  • kernel/src/mm/magazine.rs — A fixed-size array of physical frame addresses per CPU, accessed via smp::per_core(). Cooperative scheduling removes kernel task migration during the fast path, but IRQ re-entrancy still exists, so local mutations occur with interrupts masked or an equivalent local non-reentrancy guard. The per-CPU cache sits between callers and the global BuddyAllocator, absorbing the vast majority of single-page allocations while coordinated reclaim drains caches via owner-CPU self-drain or equivalent synchronized handoff.
  • kernel/src/mm/* — :position()-based free-block removal with an O(1)-removable per-order representation while preserving kernel-core as a pure, host-testable data structure. If page-body metadata is used, keep it in the kernel-side wrapper rather than baking physical-page assumptions into kernel-core.