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

相關文章
相關標籤/搜索