|
|
@ -48,36 +48,36 @@
|
|
|
|
#include "los_vm_lock.h"
|
|
|
|
#include "los_vm_lock.h"
|
|
|
|
#include "los_memory_pri.h"
|
|
|
|
#include "los_memory_pri.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果配置了内核虚拟内存,则进入以下代码块
|
|
|
|
#ifdef LOSCFG_KERNEL_VM
|
|
|
|
#ifdef LOSCFG_KERNEL_VM
|
|
|
|
|
|
|
|
// 定义标志的大小和起始位置
|
|
|
|
#define FLAG_SIZE 4
|
|
|
|
#define FLAG_SIZE 4
|
|
|
|
#define FLAG_START 2
|
|
|
|
#define FLAG_START 2
|
|
|
|
|
|
|
|
// 定义函数OsGetRegionNameOrFilePath,它根据LosVmMapRegion结构体获取相应的名称或文件路径
|
|
|
|
const CHAR *OsGetRegionNameOrFilePath(LosVmMapRegion *region)
|
|
|
|
const CHAR *OsGetRegionNameOrFilePath(LosVmMapRegion *region)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
struct Vnode *vnode = NULL;
|
|
|
|
struct Vnode *vnode = NULL; // Vnode结构体用于描述文件系统中的节点信息
|
|
|
|
if (region == NULL) {
|
|
|
|
if (region == NULL) {// 如果区域为空,则返回空字符串
|
|
|
|
return "";
|
|
|
|
return "";
|
|
|
|
#ifdef LOSCFG_FS_VFS
|
|
|
|
#ifdef LOSCFG_FS_VFS
|
|
|
|
} else if (LOS_IsRegionFileValid(region)) {
|
|
|
|
} else if (LOS_IsRegionFileValid(region)) { // 获取与该区域关联的文件节点信息
|
|
|
|
vnode = region->unTypeData.rf.vnode;
|
|
|
|
vnode = region->unTypeData.rf.vnode;
|
|
|
|
return vnode->filePath;
|
|
|
|
return vnode->filePath;// 返回文件的路径
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_HEAP) {
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_HEAP) { // 如果区域的标志包含HEAP,则返回"HEAP"字符串
|
|
|
|
return "HEAP";
|
|
|
|
return "HEAP";
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_STACK) {
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_STACK) {// 如果区域的标志包含STACK,则返回"STACK"字符串
|
|
|
|
return "STACK";
|
|
|
|
return "STACK";
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_TEXT) {
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_TEXT) {// 如果区域的标志包含TEXT,则返回"Text"字符串
|
|
|
|
return "Text";
|
|
|
|
return "Text";
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_VDSO) {
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_VDSO) { // 如果区域的标志包含VDSO,则返回"VDSO"字符串
|
|
|
|
return "VDSO";
|
|
|
|
return "VDSO";
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_MMAP) {
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_MMAP) {// 如果区域的标志包含MMAP,则返回"MMAP"字符串
|
|
|
|
return "MMAP";
|
|
|
|
return "MMAP";
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_SHM) {
|
|
|
|
} else if (region->regionFlags & VM_MAP_REGION_FLAG_SHM) {// 如果区域的标志包含SHM,则返回"SHM"字符串
|
|
|
|
return "SHM";
|
|
|
|
return "SHM";
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
return "";
|
|
|
|
return "";// 这行代码是多余的,因为在上面的所有if-else分支中都已经有了返回值
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return "";
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -108,7 +108,7 @@ INT32 OsRegionOverlapCheckUnlock(LosVmSpace *space, LosVmMapRegion *region)
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
UINT32 OsShellCmdProcessVmUsage(LosVmSpace *space)
|
|
|
|
UINT32 OsShellCmdProcessVmUsage(LosVmSpace *space)//这个函数计算并返回一个虚拟内存空间(LosVmSpace)的使用量。
|
|
|
|
{
|
|
|
|
{
|
|
|
|
LosVmMapRegion *region = NULL;
|
|
|
|
LosVmMapRegion *region = NULL;
|
|
|
|
LosRbNode *pstRbNode = NULL;
|
|
|
|
LosRbNode *pstRbNode = NULL;
|
|
|
@ -131,7 +131,7 @@ UINT32 OsShellCmdProcessVmUsage(LosVmSpace *space)
|
|
|
|
return used;
|
|
|
|
return used;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
VOID OsKProcessPmUsage(LosVmSpace *kSpace, UINT32 *actualPm)
|
|
|
|
VOID OsKProcessPmUsage(LosVmSpace *kSpace, UINT32 *actualPm)//这个函数检查给定的虚拟内存区域(LosVmMapRegion)是否与已存在的区域重叠。
|
|
|
|
{
|
|
|
|
{
|
|
|
|
UINT32 memUsed;
|
|
|
|
UINT32 memUsed;
|
|
|
|
UINT32 totalMem;
|
|
|
|
UINT32 totalMem;
|
|
|
@ -146,15 +146,15 @@ VOID OsKProcessPmUsage(LosVmSpace *kSpace, UINT32 *actualPm)
|
|
|
|
if (actualPm == NULL) {
|
|
|
|
if (actualPm == NULL) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 获取系统总使用的内存大小和总内存大小
|
|
|
|
memUsed = LOS_MemTotalUsedGet(m_aucSysMem1);
|
|
|
|
memUsed = LOS_MemTotalUsedGet(m_aucSysMem1);
|
|
|
|
totalMem = LOS_MemPoolSizeGet(m_aucSysMem1);
|
|
|
|
totalMem = LOS_MemPoolSizeGet(m_aucSysMem1);
|
|
|
|
freeMem = totalMem - memUsed;
|
|
|
|
freeMem = totalMem - memUsed;
|
|
|
|
|
|
|
|
// 获取物理内存使用的统计信息
|
|
|
|
OsVmPhysUsedInfoGet(&usedCount, &totalCount);
|
|
|
|
OsVmPhysUsedInfoGet(&usedCount, &totalCount);
|
|
|
|
/* Kernel resident memory, include default heap memory */
|
|
|
|
/* Kernel resident memory, include default heap memory */
|
|
|
|
memUsed = SYS_MEM_SIZE_DEFAULT - (totalCount << PAGE_SHIFT);
|
|
|
|
memUsed = SYS_MEM_SIZE_DEFAULT - (totalCount << PAGE_SHIFT);
|
|
|
|
|
|
|
|
// 获取所有的虚拟内存空间列表
|
|
|
|
spaceList = LOS_GetVmSpaceList();
|
|
|
|
spaceList = LOS_GetVmSpaceList();
|
|
|
|
LOS_DL_LIST_FOR_EACH_ENTRY(space, spaceList, LosVmSpace, node) {
|
|
|
|
LOS_DL_LIST_FOR_EACH_ENTRY(space, spaceList, LosVmSpace, node) {
|
|
|
|
if (space == LOS_GetKVmSpace()) {
|
|
|
|
if (space == LOS_GetKVmSpace()) {
|
|
|
@ -165,13 +165,13 @@ VOID OsKProcessPmUsage(LosVmSpace *kSpace, UINT32 *actualPm)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* Kernel dynamic memory, include extended heap memory */
|
|
|
|
/* Kernel dynamic memory, include extended heap memory */
|
|
|
|
memUsed += ((usedCount << PAGE_SHIFT) - UProcessUsed);
|
|
|
|
memUsed += ((usedCount << PAGE_SHIFT) - UProcessUsed); // 剩余的堆内存。这部分是未被内核使用的堆内存。
|
|
|
|
/* Remaining heap memory */
|
|
|
|
/* Remaining heap memory */
|
|
|
|
memUsed -= freeMem;
|
|
|
|
memUsed -= freeMem;
|
|
|
|
|
|
|
|
|
|
|
|
*actualPm = memUsed;
|
|
|
|
*actualPm = memUsed;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 这个函数处理和计算用户进程的物理内存使用情况
|
|
|
|
VOID OsShellCmdProcessPmUsage(LosVmSpace *space, UINT32 *sharePm, UINT32 *actualPm)
|
|
|
|
VOID OsShellCmdProcessPmUsage(LosVmSpace *space, UINT32 *sharePm, UINT32 *actualPm)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (space == NULL) {
|
|
|
|
if (space == NULL) {
|
|
|
@ -188,7 +188,7 @@ VOID OsShellCmdProcessPmUsage(LosVmSpace *space, UINT32 *sharePm, UINT32 *actual
|
|
|
|
OsUProcessPmUsage(space, sharePm, actualPm);
|
|
|
|
OsUProcessPmUsage(space, sharePm, actualPm);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 这个函数计算并返回用户进程在指定虚拟内存空间上的物理内存使用情况
|
|
|
|
VOID OsUProcessPmUsage(LosVmSpace *space, UINT32 *sharePm, UINT32 *actualPm)
|
|
|
|
VOID OsUProcessPmUsage(LosVmSpace *space, UINT32 *sharePm, UINT32 *actualPm)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
LosVmMapRegion *region = NULL;
|
|
|
|
LosVmMapRegion *region = NULL;
|
|
|
|