3 #include <lunaix/mm/page.h>
4 #include <lunaix/process.h>
7 #include <lunaix/mm/pmm.h>
8 // Virtual memory manager
20 * @return ptd_entry* 页目录的物理地址,随时可以加载进CR3
26 * @brief 尝试建立一个映射关系。映射指定的物理页地址至虚拟页地址,如果指定的虚拟页地址已被占用
27 * 则尝试寻找新的可用地址(该地址总是大于指定的地址)。
31 * @param dattr PDE 的属性
32 * @param tattr PTE 的属性
33 * @return 虚拟页地址,如不成功,则为 NULL
36 vmm_map_page(pid_t pid, void* va, void* pa, pt_attr tattr);
39 * @brief 建立一个映射关系,映射指定的物理页地址至虚拟页地址。如果指定的虚拟页地址已被占用,
44 * @param dattr PDE 的属性
45 * @param tattr PTE 的属性
49 vmm_fmap_page(pid_t pid, void* va, void* pa, pt_attr tattr);
52 * @brief 尝试为一个虚拟页地址创建一个可用的物理页映射
55 * @return 虚拟页地址,如不成功,则为 NULL
58 vmm_alloc_page(pid_t pid, void* va, void** pa, pt_attr tattr, pp_attr_t pattr);
65 * @param sz 大小(必须为4K对齐)
70 vmm_alloc_pages(pid_t pid, void* va, size_t sz, pt_attr tattr, pp_attr_t pattr);
73 * @brief 设置一个映射,如果映射已存在,则忽略。
80 vmm_set_mapping(pid_t pid, void* va, void* pa, pt_attr attr);
88 vmm_unmap_page(pid_t pid, void* va);
96 vmm_unset_mapping(void* va);
99 * @brief 将虚拟地址翻译为其对应的物理映射
102 * @return void* 物理地址,如映射不存在,则为NULL
111 * @return v_mapping 映射相关属性
114 vmm_lookup(void* va);
117 * @brief (COW) 为虚拟页创建副本。
119 * @return void* 包含虚拟页副本的物理页地址。
122 void* vmm_dup_page(void* va);
124 #endif /* __LUNAIX_VMM_H */