diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-03-16 08:34:13 +0100 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-03-16 08:34:13 +0100 |
| commit | 64bf7fcf58ced023be1701ed4508e38f746d40b8 (patch) | |
| tree | 023637c060d169e5a72576f62c9bd616b8b5b937 /kernel/kapi | |
| parent | 1e23bfc850f0ca126bff3c56c86419ab1570c96e (diff) | |
| download | teachos-64bf7fcf58ced023be1701ed4508e38f746d40b8.tar.xz teachos-64bf7fcf58ced023be1701ed4508e38f746d40b8.zip | |
kernel/memory: implement basic free-list heap
Diffstat (limited to 'kernel/kapi')
| -rw-r--r-- | kernel/kapi/memory.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/kernel/kapi/memory.cpp b/kernel/kapi/memory.cpp index d657527..767bcd7 100644 --- a/kernel/kapi/memory.cpp +++ b/kernel/kapi/memory.cpp @@ -101,9 +101,9 @@ namespace kapi::memory return get_frame_allocator().allocate_many(count); } - auto map(page page, frame frame) -> std::byte * + auto map(page page, frame frame, page_mapper::flags flags) -> std::byte * { - return active_page_mapper->map(page, frame, page_mapper::flags::empty); + return active_page_mapper->map(page, frame, flags); } auto unmap(page page) -> void @@ -122,16 +122,15 @@ namespace kapi::memory system::panic("[OS:MEM] Not enough memory for bitmap allocator!"); } - auto const base_address = pmm_metadata_base.raw(); auto const flags = page_mapper::flags::writable | page_mapper::flags::supervisor_only; std::ranges::for_each(std::views::iota(0uz, bitmap_pages), [&](auto index) { - auto page = page::containing(linear_address{base_address + index * page::size}); + auto page = page::containing(pmm_metadata_base + index * page::size); auto frame = memory::frame(bitmap_frames->first.number() + index); active_page_mapper->map(page, frame, flags); }); - auto bitmap_ptr = std::bit_cast<std::uint64_t *>(base_address); + auto bitmap_ptr = std::bit_cast<std::uint64_t *>(pmm_metadata_base.raw()); auto bitmap = std::span{bitmap_ptr, (bitmap_bytes + sizeof(std::uint64_t) - 1uz) / sizeof(std::uint64_t)}; allocator.emplace(bitmap, frame_count); |
