3 // Physical memory manager
5 #include <lunaix/types.h>
9 #define PM_PAGE_SIZE 4096
10 #define PM_BMP_MAX_SIZE (1024 * 1024)
13 * @brief 长久页:不会被缓存,但允许释放
16 #define PP_FGPERSIST 0x1
19 * @brief 锁定页:不会被缓存,不能被释放
22 #define PP_FGLOCKED 0x2
24 typedef u32_t pp_attr_t;
36 * @param ppn page number
39 pmm_mark_page_free(ptr_t ppn);
47 pmm_mark_page_occupied(pid_t owner, ptr_t ppn, pp_attr_t attr);
50 * @brief 标注多个连续的物理页为可用
52 * @param start_ppn 起始PPN
53 * @param page_count 数量
56 pmm_mark_chunk_free(ptr_t start_ppn, size_t page_count);
59 * @brief 标注多个连续的物理页为已占用
61 * @param start_ppn 起始PPN
62 * @param page_count 数量
65 pmm_mark_chunk_occupied(pid_t owner,
73 * @return void* 可用的页地址,否则为 NULL
76 pmm_alloc_page(pid_t owner, pp_attr_t attr);
79 * @brief 分配一个连续的物理内存区域
82 * @param num_pages 区域大小,单位为页
87 pmm_alloc_cpage(pid_t owner, size_t num_pages, pp_attr_t attr);
92 * @param mem_upper_lim 最大可用内存地址
95 pmm_init(ptr_t mem_upper_lim);
101 * @brief 释放一个已分配的物理页,假若页地址不存在,则无操作。
107 pmm_free_page(pid_t owner, ptr_t page);
110 pmm_ref_page(pid_t owner, ptr_t page);
112 #endif /* __LUNAIX_PMM_H */