SylixOS free命令實現過程

  1. SylixOS free 命令

在 SylixOS 系統下敲下 free 命令,會出現以下如圖 1.1 所示:shell

圖 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 能夠爲如下兩個值:.net

LW_OPTION_HEAP_KERNELblog

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 賦值;get

  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對整個內存進行了劃分。
相關文章
相關標籤/搜索