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

图 1.1 启核操做大体流程数组
- kersys :显示的是内核堆信息
- vmm physical zone show :zone 1和zone 2 映射信息,分别显示映射的起始地址、所占内存大小、虚拟页大小、PGD表项入口、空闲页面个数、页面属性;
- ALL-Physical memory size :整个系统可用的实际物理内存上的大小。
- VMM-Physical memory size:全部zone映射的物理内存大小即为上述(VMM size 之和) 十六进制(8000000+30100000);
- VMM-Physical memory free:空闲页面大小((30796+196864)<< 12)/(1024*1024);
- free 命令实现
free 命令是SylixOS系统下的一条shell 命令,在SylixOS下它的实现遵循SylixOS shell实现规则,具体实现以下:函数
- 使用API_TShellKeywordAdd("free", __tshellSysCmdFree) 增长系统下free 命令,当敲入 free 时,调用 tshellSysCmdFree 函数。
- 在 tshellSysCmdFree 函数中分别调用 API_RegionShow(0)、 API_VmmPhysicalShow()。
- API_RegionShow(LW_OBJECT_HANDLE ulId)显示指定内存池信息,当为0 时表示显示内存堆和系统堆信息;调用 API_KernelHeapInfo(ULONG ulOption,…..)函数,当为内核堆时显示内核堆的信息,当有系统堆时,显示系统堆信息。
ulOption 能够为如下两个值:.net
LW_OPTION_HEAP_KERNELblog
LW_OPTION_HEAP_SYSTEM内存
- API_KernelHeapInfo(ULONG ulOption,…..) 函数将内核中的内存堆和系统堆全局缓冲区 _K_pheapKernel、_K_pheapSystem变量对形参进行赋值;
- API_VmmPhysicalShow()用来显示物理存储器信息;分别调用API_VmmZoneStatus和API_VmmPhysicalKernelDesc 分别显示zone和物理内存信息;
- API_VmmZoneStatus()显示zone 的状况,经过物理zone控制块数组_G_vmzonePhysical全局变量的值获取相关数据信息;
- API_VmmPhysicalKernelDesc()函数获取物理内存内核的TEXT 、DATA段;
API_VmmPhysicalKernelDesc 调用__vmmPhysicalGetKernelDesc()得到物理内存内核 TEXT 和DATA段,经过全局物理内存结构体_G_vmphydescKernel 赋值;get
- API_VmmPhysicalShow()用来显示物理存储器信息;分别调用API_VmmZoneStatus和API_VmmPhysicalKernelDesc分别显示zone和物理内存信息;
- _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 启核操做大体流程博客
- _G_vmzonePhysical、_G_vmphydescKernel 由__vmmPhysicalCreate()函数赋值,__vmmPhysicalCreate建立一个物理分页区域由API_VmmLibPrimaryInit调用,在bsp 下API_VmmLibPrimaryInit 对bspMap.h 分好的区域进行初始操做。BspMap.h对整个内存进行了划分。