码迷,mamicode.com
首页 > 其他好文 > 详细

SylixOS free命令实现过程

时间:2019-01-22 15:04:37      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:detail   十六   实现   data   内存   分页   star   object   数据   

  • 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
      (4) API_KernelHeapInfo(ULONG ulOption,…..) 函数将内核中的内存堆和系统堆全局缓冲区 _K_pheapKernel、_K_pheapSystem变量对形参进行赋值;
      (5) API_VmmPhysicalShow()用来显示物理存储器信息;分别调用API_VmmZoneStatus和API_VmmPhysicalKernelDesc 分别显示zone和物理内存信息;
      (6) API_VmmZoneStatus()显示zone 的情况,通过物理zone控制块数组_G_vmzonePhysical全局变量的值获取相关数据信息;
      (7) API_VmmPhysicalKernelDesc()函数获取物理内存内核的TEXT 、DATA段;
      API_VmmPhysicalKernelDesc 调用__vmmPhysicalGetKernelDesc()获得物理内存内核 TEXT 和DATA段,通过全局物理内存结构体_G_vmphydescKernel 赋值;
      (8) API_VmmPhysicalShow()用来显示物理存储器信息;分别调用API_VmmZoneStatus和API_VmmPhysicalKernelDesc分别显示zone和物理内存信息;
      (9) _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 启核操作大致流程
    (10) _G_vmzonePhysical、_G_vmphydescKernel 由vmmPhysicalCreate()函数赋值,vmmPhysicalCreate创建一个物理分页区域由API_VmmLibPrimaryInit调用,在bsp 下API_VmmLibPrimaryInit 对bspMap.h 分好的区域进行初始操作。BspMap.h对整个内存进行了划分。

    SylixOS free命令实现过程

    标签:detail   十六   实现   data   内存   分页   star   object   数据   

    原文地址:http://blog.51cto.com/13927802/2345417

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!