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
feat: IO polling for file descriptor
[lunaix-os.git]
/
lunaix-os
/
includes
/
lunaix
/
mm
/
pmm.h
diff --git
a/lunaix-os/includes/lunaix/mm/pmm.h
b/lunaix-os/includes/lunaix/mm/pmm.h
index d45af82653481d13ed7247ea1f91b0e2193b86f3..e0eab12e449391d6acc8e47de4a19dd3f27cbc56 100644
(file)
--- a/
lunaix-os/includes/lunaix/mm/pmm.h
+++ b/
lunaix-os/includes/lunaix/mm/pmm.h
@@
-2,90
+2,111
@@
#define __LUNAIX_PMM_H
// Physical memory manager
#define __LUNAIX_PMM_H
// Physical memory manager
-#include <
stdint
.h>
+#include <
lunaix/types
.h>
#include <stddef.h>
#include <stddef.h>
-#include <
lunaix/process
.h>
+#include <
stdint
.h>
-#define PM_PAGE_SIZE
4096
-#define PM_BMP_MAX_SIZE
(1024 * 1024)
+#define PM_PAGE_SIZE 4096
+#define PM_BMP_MAX_SIZE (1024 * 1024)
+/**
+ * @brief 长久页:不会被缓存,但允许释放
+ *
+ */
+#define PP_FGPERSIST 0x1
-#define PP_FGPERSIST 0x1
+/**
+ * @brief 锁定页:不会被缓存,不能被释放
+ *
+ */
+#define PP_FGLOCKED 0x2
-typedef u
int
32_t pp_attr_t;
+typedef u32_t pp_attr_t;
-struct pp_struct {
+struct pp_struct
+{
pid_t owner;
pid_t owner;
- u
int
32_t ref_counts;
+ u32_t ref_counts;
pp_attr_t attr;
};
/**
* @brief 标注物理页为可使用
pp_attr_t attr;
};
/**
* @brief 标注物理页为可使用
- *
+ *
* @param ppn page number
*/
* @param ppn page number
*/
-void pmm_mark_page_free(uintptr_t ppn);
+void
+pmm_mark_page_free(ptr_t ppn);
/**
* @brief 标注物理页为已占用
/**
* @brief 标注物理页为已占用
- *
- * @param ppn
+ *
+ * @param ppn
*/
*/
-void pmm_mark_page_occupied(pid_t owner, uintptr_t ppn, pp_attr_t attr);
+void
+pmm_mark_page_occupied(pid_t owner, ptr_t ppn, pp_attr_t attr);
/**
* @brief 标注多个连续的物理页为可用
/**
* @brief 标注多个连续的物理页为可用
- *
+ *
* @param start_ppn 起始PPN
* @param page_count 数量
*/
* @param start_ppn 起始PPN
* @param page_count 数量
*/
-void pmm_mark_chunk_free(uintptr_t start_ppn, size_t page_count);
+void
+pmm_mark_chunk_free(ptr_t start_ppn, size_t page_count);
/**
* @brief 标注多个连续的物理页为已占用
/**
* @brief 标注多个连续的物理页为已占用
- *
+ *
* @param start_ppn 起始PPN
* @param page_count 数量
*/
* @param start_ppn 起始PPN
* @param page_count 数量
*/
-void pmm_mark_chunk_occupied(pid_t owner, uintptr_t start_ppn, size_t page_count, pp_attr_t attr);
+void
+pmm_mark_chunk_occupied(pid_t owner,
+ u32_t start_ppn,
+ size_t page_count,
+ pp_attr_t attr);
/**
* @brief 分配一个可用的物理页
/**
* @brief 分配一个可用的物理页
- *
+ *
* @return void* 可用的页地址,否则为 NULL
*/
* @return void* 可用的页地址,否则为 NULL
*/
-void* pmm_alloc_page(pid_t owner, pp_attr_t attr);
+ptr_t
+pmm_alloc_page(pid_t owner, pp_attr_t attr);
/**
* @brief 分配一个连续的物理内存区域
/**
* @brief 分配一个连续的物理内存区域
- *
- * @param owner
+ *
+ * @param owner
* @param num_pages 区域大小,单位为页
* @param num_pages 区域大小,单位为页
- * @param attr
- * @return
void*
+ * @param attr
+ * @return
ptr_t
*/
*/
-void*
+ptr_t
pmm_alloc_cpage(pid_t owner, size_t num_pages, pp_attr_t attr);
/**
* @brief 初始化物理内存管理器
pmm_alloc_cpage(pid_t owner, size_t num_pages, pp_attr_t attr);
/**
* @brief 初始化物理内存管理器
- *
+ *
* @param mem_upper_lim 最大可用内存地址
*/
* @param mem_upper_lim 最大可用内存地址
*/
-void pmm_init(uintptr_t mem_upper_lim);
+void
+pmm_init(ptr_t mem_upper_lim);
-struct pp_struct* pmm_query(void* pa);
+struct pp_struct*
+pmm_query(ptr_t pa);
/**
* @brief 释放一个已分配的物理页,假若页地址不存在,则无操作。
/**
* @brief 释放一个已分配的物理页,假若页地址不存在,则无操作。
- *
+ *
* @param page 页地址
* @return 是否成功
*/
* @param page 页地址
* @return 是否成功
*/
-int
pmm_free_page(pid_t owner, void* page);
-
+int
+pmm_free_page(pid_t owner, ptr_t page);
-int pmm_ref_page(pid_t owner, void* page);
+int
+pmm_ref_page(pid_t owner, ptr_t page);
#endif /* __LUNAIX_PMM_H */
#endif /* __LUNAIX_PMM_H */