3 // Physical memory manager
8 #define PM_PAGE_SIZE 4096
9 #define PM_BMP_MAX_SIZE (128 * 1024)
14 * @param ppn page number
16 void pmm_mark_page_free(uintptr_t ppn);
23 void pmm_mark_page_occupied(uintptr_t ppn);
26 * @brief 标注多个连续的物理页为可用
28 * @param start_ppn 起始PPN
29 * @param page_count 数量
31 void pmm_mark_chunk_free(uintptr_t start_ppn, size_t page_count);
34 * @brief 标注多个连续的物理页为已占用
36 * @param start_ppn 起始PPN
37 * @param page_count 数量
39 void pmm_mark_chunk_occupied(uintptr_t start_ppn, size_t page_count);
44 * @return void* 可用的页地址,否则为 NULL
46 void* pmm_alloc_page();
51 * @param mem_upper_lim 最大可用内存地址
53 void pmm_init(uintptr_t mem_upper_lim);
57 * @brief 释放一个已分配的物理页,假若页地址不存在,则无操作。
62 int pmm_free_page(void* page);
65 #endif /* __LUNAIX_PMM_H */