git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
basic process support and some syscalls
[lunaix-os.git]
/
lunaix-os
/
includes
/
lunaix
/
mm
/
vmm.h
diff --git
a/lunaix-os/includes/lunaix/mm/vmm.h
b/lunaix-os/includes/lunaix/mm/vmm.h
index 3e124fc9923a12249f35b8267013876b4e3eb8fe..682f8d0611bd7d74a8a495ede00aa67a6825c5d5 100644
(file)
--- a/
lunaix-os/includes/lunaix/mm/vmm.h
+++ b/
lunaix-os/includes/lunaix/mm/vmm.h
@@
-1,8
+1,10
@@
#ifndef __LUNAIX_VMM_H
#define __LUNAIX_VMM_H
#include <lunaix/mm/page.h>
#ifndef __LUNAIX_VMM_H
#define __LUNAIX_VMM_H
#include <lunaix/mm/page.h>
+#include <lunaix/process.h>
#include <stddef.h>
#include <stdint.h>
#include <stddef.h>
#include <stdint.h>
+#include <lunaix/mm/pmm.h>
// Virtual memory manager
/**
// Virtual memory manager
/**
@@
-31,7
+33,7
@@
vmm_init_pd();
* @return 虚拟页地址,如不成功,则为 NULL
*/
void*
* @return 虚拟页地址,如不成功,则为 NULL
*/
void*
-vmm_map_page(void* va, void* pa, pt_attr tattr);
+vmm_map_page(
pid_t pid,
void* va, void* pa, pt_attr tattr);
/**
* @brief 建立一个映射关系,映射指定的物理页地址至虚拟页地址。如果指定的虚拟页地址已被占用,
/**
* @brief 建立一个映射关系,映射指定的物理页地址至虚拟页地址。如果指定的虚拟页地址已被占用,
@@
-44,16
+46,16
@@
vmm_map_page(void* va, void* pa, pt_attr tattr);
* @return 虚拟页地址
*/
void*
* @return 虚拟页地址
*/
void*
-vmm_fmap_page(void* va, void* pa, pt_attr tattr);
+vmm_fmap_page(
pid_t pid,
void* va, void* pa, pt_attr tattr);
/**
* @brief 尝试为一个虚拟页地址创建一个可用的物理页映射
*
* @param va 虚拟页地址
/**
* @brief 尝试为一个虚拟页地址创建一个可用的物理页映射
*
* @param va 虚拟页地址
- * @return
物理
页地址,如不成功,则为 NULL
+ * @return
虚拟
页地址,如不成功,则为 NULL
*/
void*
*/
void*
-vmm_alloc_page(
void* va, pt_attr t
attr);
+vmm_alloc_page(
pid_t pid, void* va, void** pa, pt_attr tattr, pp_attr_t p
attr);
/**
/**
@@
-65,7
+67,7
@@
vmm_alloc_page(void* va, pt_attr tattr);
* @return int 是否成功
*/
int
* @return int 是否成功
*/
int
-vmm_alloc_pages(
void* va, size_t sz, pt_attr t
attr);
+vmm_alloc_pages(
pid_t pid, void* va, size_t sz, pt_attr tattr, pp_attr_t p
attr);
/**
* @brief 设置一个映射,如果映射已存在,则忽略。
/**
* @brief 设置一个映射,如果映射已存在,则忽略。
@@
-74,8
+76,16
@@
vmm_alloc_pages(void* va, size_t sz, pt_attr tattr);
* @param pa
* @param attr
*/
* @param pa
* @param attr
*/
+int
+vmm_set_mapping(pid_t pid, void* va, void* pa, pt_attr attr);
+
+/**
+ * @brief 删除并释放一个映射
+ *
+ * @param vpn
+ */
void
void
-vmm_
set_mapping(void* va, void* pa, pt_attr attr
);
+vmm_
unmap_page(pid_t pid, void* va
);
/**
* @brief 删除一个映射
/**
* @brief 删除一个映射
@@
-83,7
+93,7
@@
vmm_set_mapping(void* va, void* pa, pt_attr attr);
* @param vpn
*/
void
* @param vpn
*/
void
-vmm_un
map_page
(void* va);
+vmm_un
set_mapping
(void* va);
/**
* @brief 将虚拟地址翻译为其对应的物理映射
/**
* @brief 将虚拟地址翻译为其对应的物理映射
@@
-103,4
+113,12
@@
vmm_v2p(void* va);
v_mapping
vmm_lookup(void* va);
v_mapping
vmm_lookup(void* va);
+/**
+ * @brief (COW) 为虚拟页创建副本。
+ *
+ * @return void* 包含虚拟页副本的物理页地址。
+ *
+ */
+void* vmm_dup_page(void* va);
+
#endif /* __LUNAIX_VMM_H */
#endif /* __LUNAIX_VMM_H */