- 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對整個內存進行了劃分。