v06.01 百图画鸿蒙(调度器) | 内核发动机 | 画出鸿蒙骨骼系统

语言: CN / TW / HK

百图画鸿蒙 | 一图一主干

  • 如果把鸿蒙比作人,百图目的是要画出其骨骼系统。
  • 百图系列每张图都是心血之作,耗时甚大,能用一张就绝不用两张,所以会画的比较复杂,高清图会很大,可在公众号中回复 百图 获取3倍超高清最新图。v**.xx代表图的版本,请留意图的更新。
  • 本篇图为调度器图,内核如何确保有序的执行进程/任务,靠内核发动机调度器完成,调度器根据它们的优先级和时间片来确定任务的执行顺序。任务的执行往往是断断续续的,随时可能被外部中断打断而让出CPU,也可能因为更高优先级的任务到来被抢占,在同等优先级下则PK时间片,始终让时间片多的运行,时间片用完后再分配会根据同级就绪任务的多少来调整,保证任务都能公平的共享CPU资源。
  • 调度器维持一个 32 * 32的矩阵就绪队列,将进程和任务的优先级各切成32级。tick处理函数每次都会扫描下看有没有新的任务满足条件加入到就绪队列。并检查有没有更高优先级的任务需要执行。
  • 另外每个CPU都有一个最低优先级空闲的任务,没有其他任务时CPU就待在这个任务里休息,
    ///空闲任务,每个CPU都有自己的空闲任务
      LITE_OS_SEC_TEXT WEAK VOID OsIdleTask(VOID)
      {
          while (1) {//只有一个死循环
              WFI;////WFI指令:arm core 立即进入low-power standby state,进入休眠模式,等待中断。
          }
      }
    
  • 下图为调度器模型与核心代码

百文说内核 | 抓住主脉络

  • 百文相当于摸出内核的肌肉和器官系统,让人开始丰满有立体感,因是直接从注释源码起步,在加注释过程中,每每有心得处就整理,慢慢形成了以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切。
  • 与代码需不断debug一样,文章内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。
  • 百文在 < 鸿蒙研究站 | 开源中国 | 博客园 | 51cto | csdn | 知乎 | 掘金 > 站点发布,公众号回复 百文 可方便阅读。

按功能模块:

百万注源码 | 处处扣细节

  • 百万汉字注解内核目的是要看清楚其毛细血管,细胞结构,等于在拿放大镜看内核。内核并不神秘,带着问题去源码中找答案是很容易上瘾的,你会发现很多文章对一些问题的解读是错误的,或者说不深刻难以自圆其说,你会慢慢形成自己新的解读,而新的解读又会碰到新的问题,如此层层递进,滚滚向前,拿着放大镜根本不愿意放手。

  • < gitee | github | coding | codechina > 四大码仓推送 | 同步官方源码,公众号中回复 百万 可方便阅读。

关注不迷路 | 代码即人生

「其他文章」