From 16ad3e8719387a100a29c093ef5a09ece401ac0c Mon Sep 17 00:00:00 2001 From: fslongjin Date: Sat, 6 Aug 2022 23:41:44 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20mm=5Fstat=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/kernel/core_api/mm-api.md | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/docs/kernel/core_api/mm-api.md b/docs/kernel/core_api/mm-api.md index 1d1826ca..69bf8a85 100644 --- a/docs/kernel/core_api/mm-api.md +++ b/docs/kernel/core_api/mm-api.md @@ -9,6 +9,7 @@ SLAB内存池提供小内存对象的分配功能。   获取小块的内存。 #### 描述 +   kmalloc用于获取那些小于2M内存页大小的内存对象。可分配的内存对象大小为32bytes~1MBytes. 且分配的内存块大小、起始地址按照2的n次幂进行对齐。(比如,申请的是80bytes的内存空间,那么获得的内存对象大小为128bytes且内存地址按照128bytes对齐) ##### 参数 @@ -26,6 +27,7 @@ SLAB内存池提供小内存对象的分配功能。   释放从slab分配的内存。 #### 描述 +   该函数用于释放通过kmalloc申请的内存。如果`address`为NULL,则函数被调用后,无事发生。   请不要通过这个函数释放那些不是从`kmalloc()`申请的内存,否则将会导致系统崩溃。 @@ -67,6 +69,7 @@ DragonOS支持对物理页的直接操作   分配的页面要被设置成的属性 可选值: + - `PAGE_PGT_MAPPED` 页面在页表中已被映射 - `PAGE_KERNEL_INIT` 内核初始化所占用的页 - `PAGE_DEVICE` 设备MMIO映射的内存 @@ -83,7 +86,6 @@ DragonOS支持对物理页的直接操作   当ZONE错误或内存不足时,返回`NULL` - ### `void free_pages(struct Page *page, int number)` #### 描述 @@ -132,7 +134,6 @@ DragonOS支持对物理页的直接操作 ### `int mm_map_proc_page_table(ul proc_page_table_addr, bool is_phys, ul virt_addr_start, ul phys_addr_start, ul length, ul flags, bool user, bool flush, bool use4k)` - #### 描述   将一段物理地址映射到指定页表的指定虚拟地址处 @@ -219,3 +220,29 @@ DragonOS支持对物理页的直接操作 **length**   要取消映射的地址空间的长度 + +## 内存信息获取 + +### `struct mm_stat_t mm_stat()` + +#### 描述 + +  获取计算机目前的内存空间使用情况 + +#### 参数 + +无 + +#### 返回值 + +  返回值是一个`mm_mstat_t`结构体,该结构体定义于`mm/mm.h`中。其中包含了以下信息(单位均为字节): + +| 参数名 | 解释 | +| ---------- | ----------------------- | +| total | 计算机的总内存数量大小 | +| used | 已使用的内存大小 | +| free | 空闲物理页所占的内存大小 | +| shared | 共享的内存大小 | +| cache_used | 位于slab缓冲区中的已使用的内存大小 | +| cache_free | 位于slab缓冲区中的空闲的内存大小 | +| available | 系统总空闲内存大小(包括kmalloc缓冲区) | \ No newline at end of file