当前位置:   article > 正文

OpenHarmony(3) —— SMP调度理解_smp调度算法

smp调度算法

代码仓:https://codechina.csdn.net/fu851523125/rtos

现代调度执行都是基于时间片(Time Slice)概念的。

 启动一个定时器,一个时间片时隙就是定时器的计数周期。

在kernel\liteos_a\kernel\base\core\los_timeslice.c中VOID OsTimesliceCheck(VOID),一个时间片过去后进行检测是否改变当前调度Task

OsTimesliceCheck()

   <<=== OsTickHandler()

      <<=== OsTickEntry()        

VOID HalClockInit(VOID)
{
    UINT32 ret;

    g_sysClock = HalClockFreqRead();
    ret = LOS_HwiCreate(OS_TICK_INT_NUM, MIN_INTERRUPT_PRIORITY, 0, OsTickEntry, 0);
    if (ret != LOS_OK) {
        PRINT_ERR("%s, %d create tick irq failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret);
    }
}

HalClockInit()

   <<=== OsTickInit()

      <<=== OsMain()

         <<=== main()

LITE_OS_SEC_TEXT_INIT VOID HalClockStart(VOID)
{
    HalIrqUnmask(OS_TICK_INT_NUM);

    /* triggle the first tick */
    TimerCtlWrite(0);
    TimerTvalWrite(OS_CYCLE_PER_TICK);
    TimerCtlWrite(1);
}

HalClockStart()

   <<=== OsTickStart()

      <<== OsStart()

         <<=== main()

         <<=== secondary_cpu_start()

这里HalClockInit()有三处,

1. platform\hw\hisoc\timer\timer.c (宏定义 STATIC_ASSERT(LOSCFG_KERNEL_SMP != YES, "hisoc timer does not suppot on SMP mode!");) 

   SMP是不使用这个

2. platform\hw\arm\timer\arm_private\arm_private_timer.c<

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号