basic process support and some syscalls
[lunaix-os.git] / lunaix-os / includes / lunaix / mm / vmm.h
index 752f23caf40efa7369170b95b612a3722a907444..682f8d0611bd7d74a8a495ede00aa67a6825c5d5 100644 (file)
@@ -1,8 +1,10 @@
 #ifndef __LUNAIX_VMM_H
 #define __LUNAIX_VMM_H
 #include <lunaix/mm/page.h>
+#include <lunaix/process.h>
 #include <stddef.h>
 #include <stdint.h>
+#include <lunaix/mm/pmm.h>
 // Virtual memory manager
 
 /**
@@ -22,7 +24,7 @@ vmm_init_pd();
 
 /**
  * @brief 尝试建立一个映射关系。映射指定的物理页地址至虚拟页地址,如果指定的虚拟页地址已被占用
- * 则尝试寻找新的可用地址(地址总是大于指定的地址)。
+ * 则尝试寻找新的可用地址(地址总是大于指定的地址)。
  *
  * @param vpn 虚拟页地址
  * @param pa 物理页地址
@@ -31,7 +33,7 @@ vmm_init_pd();
  * @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 建立一个映射关系,映射指定的物理页地址至虚拟页地址。如果指定的虚拟页地址已被占用,
@@ -44,16 +46,16 @@ vmm_map_page(void* va, void* pa, pt_attr tattr);
  * @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 虚拟页地址
- * @return 物理页地址,如不成功,则为 NULL
+ * @return 虚拟页地址,如不成功,则为 NULL
  */
 void*
-vmm_alloc_page(void* va, pt_attr tattr);
+vmm_alloc_page(pid_t pid, void* va, void** pa, pt_attr tattr, pp_attr_t pattr);
 
 
 /**
@@ -65,7 +67,25 @@ vmm_alloc_page(void* va, pt_attr tattr);
  * @return int 是否成功
  */
 int
-vmm_alloc_pages(void* va, size_t sz, pt_attr tattr);
+vmm_alloc_pages(pid_t pid, void* va, size_t sz, pt_attr tattr, pp_attr_t pattr);
+
+/**
+ * @brief 设置一个映射,如果映射已存在,则忽略。
+ * 
+ * @param va 
+ * @param pa 
+ * @param attr 
+ */
+int
+vmm_set_mapping(pid_t pid, void* va, void* pa, pt_attr attr);
+
+/**
+ * @brief 删除并释放一个映射
+ *
+ * @param vpn
+ */
+void
+vmm_unmap_page(pid_t pid, void* va);
 
 /**
  * @brief 删除一个映射
@@ -73,7 +93,7 @@ vmm_alloc_pages(void* va, size_t sz, pt_attr tattr);
  * @param vpn
  */
 void
-vmm_unmap_page(void* va);
+vmm_unset_mapping(void* va);
 
 /**
  * @brief 将虚拟地址翻译为其对应的物理映射
@@ -93,4 +113,12 @@ vmm_v2p(void* va);
 v_mapping
 vmm_lookup(void* va);
 
+/**
+ * @brief (COW) 为虚拟页创建副本。
+ * 
+ * @return void* 包含虚拟页副本的物理页地址。
+ * 
+ */
+void* vmm_dup_page(void* va);
+
 #endif /* __LUNAIX_VMM_H */