3 #include <lunaix/mm/page.h>
4 #include <lunaix/process.h>
5 #include <lunaix/types.h>
6 // Virtual memory manager
17 * @brief 映射模式:不作实际映射。该功能用于预留出特定的地址空间
23 * @brief 规定下一个可用页映射应当限定在指定的4MB地址空间内
38 * @return ptd_entry* 页目录的物理地址,随时可以加载进CR3
44 * @brief 在指定地址空间中,添加一个映射
53 vmm_set_mapping(ptr_t mnt, ptr_t va, ptr_t pa, pt_attr attr, int options);
64 vmm_del_mapping(ptr_t mnt, ptr_t va);
67 * @brief 在当前虚拟地址空间里查找一个映射
70 * @param mapping 映射相关属性
73 vmm_lookup(ptr_t va, v_mapping* mapping);
76 * @brief 在指定的虚拟地址空间里查找一个映射
80 * @param mapping 映射相关属性
84 vmm_lookupat(ptr_t mnt, ptr_t va, v_mapping* mapping);
87 * @brief (COW) 为虚拟页创建副本。
89 * @return void* 包含虚拟页副本的物理页地址。
93 vmm_dup_page(pid_t pid, ptr_t pa);
96 vmm_dup_vmspace(pid_t pid);
99 * @brief 挂载另一个虚拟地址空间至当前虚拟地址空间
101 * @param pde 页目录的物理地址
105 vmm_mount_pd(ptr_t mnt, ptr_t pde);
108 * @brief 卸载已挂载的虚拟地址空间
112 vmm_unmount_pd(ptr_t mnt);
115 vmm_ioremap(ptr_t paddr, size_t size);
118 vmm_next_free(ptr_t start, int options);
121 * @brief 将当前地址空间的虚拟地址转译为物理地址。
130 * @brief 将指定地址空间的虚拟地址转译为物理地址
137 vmm_v2pat(ptr_t mnt, ptr_t va);
141 (One must not get confused with vmap_area in Linux!)
151 * @brief 将连续的物理地址空间映射到内核虚拟地址空间
153 * @param paddr 物理地址空间的基地址
154 * @param size 物理地址空间的大小
158 vmap(ptr_t paddr, size_t size, pt_attr attr, int flags);
161 * @brief 创建一个 vmap 区域
168 vmap_varea(size_t size, pt_attr attr);
171 * @brief 在 vmap区域内映射一个单页
178 vmap_area_page(struct vmap_area* area, ptr_t paddr, pt_attr attr);
181 * @brief 在 vmap区域删除一个已映射的页
187 vmap_area_rmpage(struct vmap_area* area, ptr_t vaddr);
189 #endif /* __LUNAIX_VMM_H */