1. SylixOS free 命令

在 SylixOS 系统下敲下 free 命令,会出现如下如图 1.1 所示:

图 1.1 启核操作大致流程

  1. kersys :显示的是内核堆信息
  2. vmm physical zone show :zone 1和zone 2 映射信息,分别显示映射的起始地址、所占内存大小、虚拟页大小、PGD表项入口、空闲页面个数、页面属性;
  3. ALL-Physical memory size :整个系统可用的实际物理内存上的大小。
  4. VMM-Physical memory size:所有zone映射的物理内存大小即为上述(VMM size 之和) 十六进制(8000000+30100000);
  5. VMM-Physical memory free:空闲页面大小((30796+196864)<< 12)/(1024*1024);
  1. free 命令实现

free 命令是SylixOS系统下的一条shell 命令,在SylixOS下它的实现遵循SylixOS shell实现规则,具体实现如下:

  1. 使用API_TShellKeywordAdd("free", __tshellSysCmdFree) 增加系统下free 命令,当敲入 free 时,调用 tshellSysCmdFree 函数。
  2. 在 tshellSysCmdFree 函数中分别调用 API_RegionShow(0)、 API_VmmPhysicalShow()。
  3. API_RegionShow(LW_OBJECT_HANDLE  ulId)显示指定内存池信息,当为0 时表示显示内存堆和系统堆信息;调用 API_KernelHeapInfo(ULONG ulOption,…..)函数,当为内核堆时显示内核堆的信息,当有系统堆时,显示系统堆信息。

ulOption 可以为以下两个值:

LW_OPTION_HEAP_KERNEL

LW_OPTION_HEAP_SYSTEM

  1. API_KernelHeapInfo(ULONG ulOption,…..) 函数将内核中的内存堆和系统堆全局缓冲区 _K_pheapKernel、_K_pheapSystem变量对形参进行赋值;
  2. API_VmmPhysicalShow()用来显示物理存储器信息;分别调用API_VmmZoneStatus和API_VmmPhysicalKernelDesc 分别显示zone和物理内存信息;
  3. API_VmmZoneStatus()显示zone 的情况,通过物理zone控制块数组_G_vmzonePhysical全局变量的值获取相关数据信息;
  4. API_VmmPhysicalKernelDesc()函数获取物理内存内核的TEXT 、DATA段;

API_VmmPhysicalKernelDesc 调用__vmmPhysicalGetKernelDesc()获得物理内存内核 TEXT 和DATA段,通过全局物理内存结构体_G_vmphydescKernel 赋值;

  1. API_VmmPhysicalShow()用来显示物理存储器信息;分别调用API_VmmZoneStatus和API_VmmPhysicalKernelDesc分别显示zone和物理内存信息;
  2. _K_pheapKernel由_HeapKernelInit()内核堆内存函数对其赋值, _K_pheapSystem由_HeapSystemInit()系统堆内存函数对其赋值,HeapKernelInit 、HeapSystemInit  由函数 _KernelPrimaryLowLevelInit()调用,KernelPrimaryLowLevelInit 由API_KernelPrimaryStart()函数调用,API_KernelPrimaryStart由API_KernelStart()函数调用,分别由 __heap_start、__heap_end,由文件SylixOSBSP.ld实现,具体可以看https://blog.csdn.net/automan12138/article/details/77478315 博客,如图 2.1 所示;

图 2.1 启核操作大致流程

  1. _G_vmzonePhysical、_G_vmphydescKernel 由__vmmPhysicalCreate()函数赋值,__vmmPhysicalCreate创建一个物理分页区域由API_VmmLibPrimaryInit调用,在bsp 下API_VmmLibPrimaryInit 对bspMap.h 分好的区域进行初始操作。BspMap.h对整个内存进行了划分。
01-22 16:21