SylixOS动态关核架构流程

  1. SylixOS动态关核接口

SylixOS 支持动态关核操做,经过以下应用函数;函数

VOID  Lw_PowerM_CpuSet(ULONG  ulNCpus, UINT  uiPowerLevel);ui

函数Lw_PowerM_CpuSet原型分析:blog

参数 ulNCpus是运行态的CPU 核个数;接口

参数 uiPowerLevel是CPU能耗级别。原型

  1. 基本流程

系统函数调用流程如图 2.1:it

  1. Lw_PowerM_CpuSet( ),设置关核个数,判断设置运行态的核数与启动的核数是否相等,若是小于,则关闭一些核,判断将要关闭的核是否在运行API_CpuIsUp(),若是是则调用API_CpuDown()。
  2. API_CpuDown(),经过LW_CPU_ADD_IPI_PEND2()设置将要关闭的核的CPU_iIPIPend为LW_IPI_DOWN_MSK,关闭与此 CPU 有关的亲和度_ThreadOffAffinity(),使用核间中断通知 CPU 中止_SmpSendIpi()。
  3. SmpSendIpi(),调用核间中断函数xxxMpInt()响应核间中断,通知关闭核,xxxIntEntry中断入口函数,调用API_InterExit()中断出口函数;
  4. API_InterExit()调用__kernelSchedInt();kernelSchedInt 调用_ScheduleInt()尝试调度;
  5. 在_ScheduleInt()判断是pend 位是不是LW_IPI_DOWN_MSK,若是是进入_SchedCpuDown()函数;
  6. _SchedCpuDown()先中止 CPU _CpuInactive(), 禁能数据和指令CACHE API_CacheDisable,在关闭 MMU API_VmmMmuDisable(),再清除 CPU pend关闭标志位 最后调用 bspCpuDown 关闭核。

图 2.1 关核操做大体流程im

相关文章
相关标签/搜索