From d66ee1a6755fa7d540aa2bd5f7c570e7d1eecbb0 Mon Sep 17 00:00:00 2001 From: kuangyufei Date: Sat, 16 Jan 2021 12:04:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=B8=BF=E8=92=99=E5=86=85=E6=A0=B8=E6=BA=90?= =?UTF-8?q?=E7=A0=81=E5=88=86=E6=9E=90(=E6=97=B6=E9=92=9F=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E7=AF=87)=20|=20=E6=97=B6=E9=92=9F=E6=98=AF=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E8=B0=83=E5=BA=A6=E6=9C=80=E5=A4=A7=E7=9A=84=E6=BA=90?= =?UTF-8?q?=E5=8A=A8=E5=8A=9B=20|=20=E4=B8=AD=E6=96=87=E6=B3=A8=E8=A7=A3Ha?= =?UTF-8?q?rmonyOS=E6=BA=90=E7=A0=81=20|=20v3.04=20=20=20=20=20=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=20@note=5Fpic=20=E5=8F=AF=E6=9F=A5=E7=9C=8B=E7=BB=98?= =?UTF-8?q?=E5=88=B6=E7=9A=84=E5=85=A8=E9=83=A8=E5=AD=97=E7=AC=A6=E5=9B=BE?= =?UTF-8?q?=20=20=20=20=20=E6=90=9C=E7=B4=A2=20@note=5Fwhy=20=E6=98=AF?= =?UTF-8?q?=E5=B0=9A=E6=9C=AA=E7=9C=8B=E6=98=8E=E7=99=BD=E7=9A=84=E5=9C=B0?= =?UTF-8?q?=E6=96=B9=EF=BC=8C=E6=9C=89=E7=9C=8B=E6=98=8E=E7=99=BD=E7=9A=84?= =?UTF-8?q?=EF=BC=8C=E8=AF=B7Pull=20Request=E5=AE=8C=E5=96=84=20=20=20=20?= =?UTF-8?q?=20=E6=90=9C=E7=B4=A2=20@note=5Fthinking=20=E6=98=AF=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E7=9A=84=E6=80=9D=E8=80=83=E5=92=8C=E5=BB=BA=E8=AE=AE?= =?UTF-8?q?=20=20=20=20=20=E6=90=9C=E7=B4=A2=20@note=5F#if0=20=E6=98=AF?= =?UTF-8?q?=E7=94=B1=E7=AC=AC=E4=B8=89=E6=96=B9=E9=A1=B9=E7=9B=AE=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E4=B8=8D=E5=9C=A8=E5=86=85=E6=A0=B8=E6=BA=90=E7=A0=81?= =?UTF-8?q?=E4=B8=AD=E5=AE=9A=E4=B9=89=E7=9A=84=E6=9E=81=E4=B8=BA=E9=87=8D?= =?UTF-8?q?=E8=A6=81=E7=BB=93=E6=9E=84=E4=BD=93=EF=BC=8C=E4=B8=BA=E6=96=B9?= =?UTF-8?q?=E4=BE=BF=E7=90=86=E8=A7=A3=E8=80=8C=E6=B7=BB=E5=8A=A0=E7=9A=84?= =?UTF-8?q?=E3=80=82=20=20=20=20=20=E6=90=9C=E7=B4=A2=20@note=5Fgood=20?= =?UTF-8?q?=E6=98=AF=E7=BB=99=E6=BA=90=E7=A0=81=E7=82=B9=E8=B5=9E=E7=9A=84?= =?UTF-8?q?=E5=9C=B0=E6=96=B9=20=20=20=20=20https://weharmony.github.io/?= =?UTF-8?q?=20=20=20=20=20=E5=85=AC=E4=BC=97=E5=8F=B7:=20=E9=B8=BF?= =?UTF-8?q?=E8=92=99=E5=86=85=E6=A0=B8=E6=BA=90=E7=A0=81=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 27 +- kernel/base/core/los_task.c | 8 +- kernel/base/core/los_tick.c | 2 +- kernel/base/core/los_timeslice.c | 150 +++---- kernel/base/sched/sched_sq/los_sched.c | 4 +- zzz/git/push.sh | 2 +- ...1\347\256\241\347\220\206\347\257\207).md" | 2 +- ...6\347\256\241\347\220\206\347\257\207).md" | 2 +- ...0\345\210\206\351\205\215\347\257\207).md" | 2 +- ...0\346\230\240\345\260\204\347\257\207).md" | 2 +- ...0\346\246\202\345\277\265\347\257\207).md" | 2 +- ...0\346\261\207\347\274\226\347\257\207).md" | 2 +- ...0\347\256\241\347\220\206\347\257\207).md" | 2 +- ...0\350\247\204\345\210\231\347\257\207).md" | 2 +- ...1\351\223\276\350\241\250\347\257\207).md" | 2 +- ...3\346\225\205\344\272\213\347\257\207).md" | 2 +- ...7\347\256\241\347\220\206\347\257\207).md" | 417 ++++++++---------- ...1\346\263\250\351\207\212\347\257\207).md" | 27 +- ...1\347\273\223\346\236\204\347\257\207).md" | 2 +- ...6\345\206\205\345\255\230\347\257\207).md" | 2 +- ...0\346\226\271\345\274\217\347\257\207).md" | 2 +- ...6\346\234\272\345\210\266\347\257\207).md" | 2 +- ...6\351\230\237\345\210\227\347\257\207).md" | 2 +- ...3\347\256\241\347\220\206\347\257\207).md" | 2 +- ...(\346\200\273\347\233\256\345\275\225).md" | 4 +- zzz/mdmerge/bloglist.md | 2 +- zzz/mdmerge/head.md | 2 +- ...7\347\256\241\347\220\206\347\257\207).md" | 415 ++++++++--------- ...1\346\263\250\351\207\212\347\257\207).md" | 10 +- 29 files changed, 514 insertions(+), 588 deletions(-) diff --git a/README.md b/README.md index 9a1e52d3..51818909 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note) | [ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note) | [ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note) | [ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files) 精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. -[鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852) [| HarmonyOS 】](https://weharmony.github.io/) 问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. +[鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. --- @@ -60,8 +60,8 @@ 第二: **专业概念抽象级** 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用程序员,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它的现实认知.试图用 **[鸿蒙源码分析系列篇 【 CSDN](https://blog.csdn.net/kuangyufei/article/details/108727970) [| OSCHINA](https://my.oschina.net/u/3751245/blog/4626852) [| HarmonyOS 】](https://weharmony.github.io/)** 去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱. - 第三: **具体微观代码级** 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计? **[kernel\_liteos\_a_note:鸿蒙内核源码注释中文版](https://gitee.com/weharmony/kernel_liteos_a_note)** 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望注释中文版能让更多爱好者快速的理解内核,共同进步. - + 第三: **具体微观代码级** 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计? **[kernel\_liteos\_a_note:鸿蒙内核源码注释中文版](https://gitee.com/weharmony/kernel_liteos_a_note)** 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望注释中文版能让更多爱好者快速的理解内核,共同进步. + - ### **鸿蒙源码分析系列篇** - [鸿蒙源码分析系列(总目录) | 持续更新中... 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)|[ HarmonyOS 】](https://weharmony.github.io) @@ -96,7 +96,7 @@ * [|- 鸿蒙内核源码分析(任务管理篇) | 任务是内核调度的单元【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108621428) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4603919)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(任务管理篇).html) - * [|- 鸿蒙内核源码分析(时钟管理篇) | 触发调度最大的动力来自哪里?【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108603468) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574493)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(时钟管理篇).html) + * [|- 鸿蒙内核源码分析(时钟任务篇) | 触发调度最大的动力来自哪里?【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108603468) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574493)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(时钟管理篇).html) * [|- 鸿蒙内核源码分析(进程管理篇) | 进程是内核资源管理单元【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108595941) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574429)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(进程管理篇).html) @@ -115,17 +115,18 @@ 2. [新建 Issue](https://gitee.com/weharmony/kernel_liteos_a_note/issues) -- ### **喜欢就关注下吧,您的关注真的很重要** - ![在这里插入图片描述](https://gitee.com/weharmony/kernel_liteos_a_note/raw/master/zzz/pic/other/wxcode.png) - 作者邮箱:weharmony@126.com +### **喜欢就关注下吧,您的关注真的很重要** + +![在这里插入图片描述](https://gitee.com/weharmony/kernel_liteos_a_note/raw/master/zzz/pic/other/wxcode.png) - --- +作者邮箱:weharmony@126.com + +--- - [![WeHarmony/kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/weharmony/kernel_liteos_a_note) +[![WeHarmony/kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/weharmony/kernel_liteos_a_note) - [鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. - [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. - \ No newline at end of file +[鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git a/kernel/base/core/los_task.c b/kernel/base/core/los_task.c index 12af1a05..48b521d7 100644 --- a/kernel/base/core/los_task.c +++ b/kernel/base/core/los_task.c @@ -378,12 +378,12 @@ LITE_OS_SEC_TEXT VOID OsTaskScan(VOID) LOS_SpinUnlock(&g_taskSpin); - if (needSchedule != FALSE) { - LOS_MpSchedule(OS_MP_CPU_ALL); - LOS_Schedule(); + if (needSchedule != FALSE) {//需要调度 + LOS_MpSchedule(OS_MP_CPU_ALL);//核间通讯,给所有CPU发送调度信号 + LOS_Schedule();//开始调度 } } - +//初始化任务 LITE_OS_SEC_TEXT_INIT UINT32 OsTaskInit(VOID) { UINT32 index; diff --git a/kernel/base/core/los_tick.c b/kernel/base/core/los_tick.c index 29bab680..62b19ed7 100644 --- a/kernel/base/core/los_tick.c +++ b/kernel/base/core/los_tick.c @@ -62,7 +62,7 @@ LITE_OS_SEC_TEXT VOID OsTickHandler(VOID) UINT32 intSave; TICK_LOCK(intSave); - g_tickCount[ArchCurrCpuid()]++;//当前CPU核 计数器 + g_tickCount[ArchCurrCpuid()]++;//当前CPU核计数器 TICK_UNLOCK(intSave); #ifdef LOSCFG_KERNEL_VDSO diff --git a/kernel/base/core/los_timeslice.c b/kernel/base/core/los_timeslice.c index 923a05ac..f641527c 100644 --- a/kernel/base/core/los_timeslice.c +++ b/kernel/base/core/los_timeslice.c @@ -1,75 +1,75 @@ -/* - * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. - * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its contributors may be used - * to endorse or promote products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include "los_timeslice_pri.h" -#include "los_process_pri.h" - -#ifdef __cplusplus -#if __cplusplus -extern "C" { -#endif /* __cplusplus */ -#endif /* __cplusplus */ - -LITE_OS_SEC_TEXT VOID OsTimesliceCheck(VOID) -{ - LosTaskCB *runTask = NULL; - LosProcessCB *runProcess = OsCurrProcessGet(); - if (runProcess->policy != LOS_SCHED_RR) { - goto SCHED_TASK; - } - - if (runProcess->timeSlice != 0) { - runProcess->timeSlice--;//进程时间片减少一次 - if (runProcess->timeSlice == 0) { - LOS_Schedule();//进程时间片用完,发起调度 - } - } - -SCHED_TASK: - runTask = OsCurrTaskGet(); - if (runTask->policy != LOS_SCHED_RR) { - return; - } - - if (runTask->timeSlice != 0) { - runTask->timeSlice--;//对应任务时间片也减少一次 - if (runTask->timeSlice == 0) { - LOS_Schedule(); - } - } -} - -#ifdef __cplusplus -#if __cplusplus -} -#endif /* __cplusplus */ -#endif /* __cplusplus */ - +/* + * Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved. + * Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its contributors may be used + * to endorse or promote products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "los_timeslice_pri.h" +#include "los_process_pri.h" + +#ifdef __cplusplus +#if __cplusplus +extern "C" { +#endif /* __cplusplus */ +#endif /* __cplusplus */ +//检查进程和任务的时间片,如果没有时间片了直接调度 +LITE_OS_SEC_TEXT VOID OsTimesliceCheck(VOID) +{ + LosTaskCB *runTask = NULL; + LosProcessCB *runProcess = OsCurrProcessGet();//获取当前进程 + if (runProcess->policy != LOS_SCHED_RR) {//进程调度算法是否是抢占式 + goto SCHED_TASK;//进程不是抢占式调度直接去检查任务的时间片 + } + + if (runProcess->timeSlice != 0) {//进程还有时间片吗? + runProcess->timeSlice--;//进程时间片减少一次 + if (runProcess->timeSlice == 0) {//没有时间片了 + LOS_Schedule();//进程时间片用完,发起调度 + } + } + +SCHED_TASK: + runTask = OsCurrTaskGet();//获取当前任务 + if (runTask->policy != LOS_SCHED_RR) {//任务调度算法是否是抢占式 + return;//任务不是抢占式调度直接结束检查 + } + + if (runTask->timeSlice != 0) {//任务还有时间片吗? + runTask->timeSlice--;//任务时间片也减少一次 + if (runTask->timeSlice == 0) {//没有时间片了 + LOS_Schedule();//任务时间片用完,发起调度 + } + } +} + +#ifdef __cplusplus +#if __cplusplus +} +#endif /* __cplusplus */ +#endif /* __cplusplus */ + diff --git a/kernel/base/sched/sched_sq/los_sched.c b/kernel/base/sched/sched_sq/los_sched.c index f5431786..c9ab36c7 100644 --- a/kernel/base/sched/sched_sq/los_sched.c +++ b/kernel/base/sched/sched_sq/los_sched.c @@ -82,7 +82,7 @@ STATIC VOID OsSchedSwitchProcess(LosProcessCB *runProcess, LosProcessCB *newProc newProcess->timeSlice = OS_PROCESS_SCHED_RR_INTERVAL;//重新分配时间片,默认 20ms } } -//重新调度实现 +//调度算法的实现 VOID OsSchedResched(VOID) { LosTaskCB *runTask = NULL; @@ -145,7 +145,7 @@ VOID OsSchedResched(VOID) newProcess->threadScheduleMap, newTask->taskName, newTask->taskID, newTask->taskStatus); /* do the task context switch */ - OsTaskSchedule(newTask, runTask);//切换CPU的上下文,注意OsTaskSchedule是一个汇编函数 见于 los_dispatch.s + OsTaskSchedule(newTask, runTask);//切换任务上下文,注意OsTaskSchedule是一个汇编函数 见于 los_dispatch.s } //抢占式调度,调用极为频繁的函数 VOID OsSchedPreempt(VOID) diff --git a/zzz/git/push.sh b/zzz/git/push.sh index 23e65820..17728918 100644 --- a/zzz/git/push.sh +++ b/zzz/git/push.sh @@ -1,5 +1,5 @@ git add -A -git commit -m '解决markdown import md的问题 +git commit -m '鸿蒙内核源码分析(时钟任务篇) | 时钟是触发调度最大的源动力 | 中文注解HarmonyOS源码 | v3.04 搜索 @note_pic 可查看绘制的全部字符图 搜索 @note_why 是尚未看明白的地方,有看明白的,请Pull Request完善 搜索 @note_thinking 是一些的思考和建议 diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\344\273\273\345\212\241\347\256\241\347\220\206\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\344\273\273\345\212\241\347\256\241\347\220\206\347\257\207).md" index 86f9d391..58ee675d 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\344\273\273\345\212\241\347\256\241\347\220\206\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\344\273\273\345\212\241\347\256\241\347\220\206\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\344\275\215\345\233\276\347\256\241\347\220\206\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\344\275\215\345\233\276\347\256\241\347\220\206\347\257\207).md" index 1a65bc77..a9cd0c1c 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\344\275\215\345\233\276\347\256\241\347\220\206\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\344\275\215\345\233\276\347\256\241\347\220\206\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\345\210\206\351\205\215\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\345\210\206\351\205\215\347\257\207).md" index c0c9bd87..93c5309f 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\345\210\206\351\205\215\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\345\210\206\351\205\215\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\230\240\345\260\204\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\230\240\345\260\204\347\257\207).md" index e68dbd68..7e0a42d4 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\230\240\345\260\204\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\230\240\345\260\204\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\246\202\345\277\265\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\246\202\345\277\265\347\257\207).md" index c0c9bd87..93c5309f 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\246\202\345\277\265\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\246\202\345\277\265\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\261\207\347\274\226\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\261\207\347\274\226\347\257\207).md" index 43775bbf..a3d47cd4 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\261\207\347\274\226\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\346\261\207\347\274\226\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\347\256\241\347\220\206\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\347\256\241\347\220\206\347\257\207).md" index 27b5a931..4aff6d52 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\347\256\241\347\220\206\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\347\256\241\347\220\206\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\350\247\204\345\210\231\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\350\247\204\345\210\231\347\257\207).md" index 2b63cf14..71041a19 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\350\247\204\345\210\231\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\206\205\345\255\230\350\247\204\345\210\231\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\217\214\345\220\221\351\223\276\350\241\250\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\217\214\345\220\221\351\223\276\350\241\250\347\257\207).md" index e1048953..0ae5c720 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\217\214\345\220\221\351\223\276\350\241\250\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\217\214\345\220\221\351\223\276\350\241\250\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\277\205\350\257\273\346\225\205\344\272\213\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\277\205\350\257\273\346\225\205\344\272\213\347\257\207).md" index cb8f3bbe..868a7337 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\277\205\350\257\273\346\225\205\344\272\213\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\345\277\205\350\257\273\346\225\205\344\272\213\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\227\266\351\222\237\347\256\241\347\220\206\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\227\266\351\222\237\347\256\241\347\220\206\347\257\207).md" index 8715c3a8..00416e77 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\227\266\351\222\237\347\256\241\347\220\206\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\227\266\351\222\237\347\256\241\347\220\206\347\257\207).md" @@ -1,27 +1,22 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. --- -**[内核代码详细结构 >> 进入阅读代码](https://my.oschina.net/u/3751245/blog/4869137)** - -**目录** - -[多久Tick一次?看代码](#%E5%A4%9A%E4%B9%85Tick%E4%B8%80%E6%AC%A1%EF%BC%9F) +调度算法让CPU在不同的进程和任务之间切换穿梭,但问题是 -[在哪里设置tick的回调函数?](#%E5%9C%A8%E5%93%AA%E9%87%8C%E8%AE%BE%E7%BD%AEtick%E7%9A%84%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%EF%BC%9F) +### **调度算法的驱动力在哪里? 谁负责推着调度算法走?** -[OsTaskScan()](#OsTaskScan()) +有多股力量在推动,但最大的推力应该是:系统时钟. -[除了tick 会触发调度,还有哪些情况会触发调度?](#%E9%99%A4%E4%BA%86tick%C2%A0%E4%BC%9A%E8%A7%A6%E5%8F%91%E8%B0%83%E5%BA%A6%EF%BC%8C%E8%BF%98%E6%9C%89%E5%93%AA%E4%BA%9B%E6%83%85%E5%86%B5%E4%BC%9A%E8%A7%A6%E5%8F%91%E8%B0%83%E5%BA%A6%EF%BC%9F) +我们整个学生阶段有个东西很重要,就是校园铃声. 它控制着上课,下课,吃饭,睡觉的节奏.没有它学校的管理就乱套了,老师拖课想拖多久就多久,那可不行,下课铃声一响就是在告诉老师时间到了,该停止了让学生HAPPY去了. -时钟管理模块很简单,但有内核重要的代码 OsTickHandler(),这是干嘛的,可以理解为 JAVA的定时任务,但这是系统内核的定时器。因鸿蒙目前开放的是 轻量级的内核 lite os (LOS),所以tick的频率不会太高 +应用开发人员对定时器不会陌生,电商平台的每晚10点准时的秒杀活动没有定时任务是不可能实现的,那内核也一定要提供这样的功能被封装给应用层使用,那这个功能在内核层的表述就是系统时钟,它发出来的节奏叫tick(节拍). -对应张大爷的故事:很简单就是场馆的那个大钟,很准时, 每10分响一次,一次就是一个Tick(节拍) - -## 多久Tick一次?看代码 +对应张大爷的故事:系统时钟就是场馆的那个大钟,很准时, 每10分响一次,一次就是一个Tick(节拍) +### **鸿蒙内核的节拍频率是怎样的呢? 看代码** ```cpp /** * @ingroup los_config @@ -30,39 +25,204 @@ #ifndef LOSCFG_BASE_CORE_TICK_PER_SECOND #define LOSCFG_BASE_CORE_TICK_PER_SECOND 100 //默认每秒100次触发,当然这是可以改的 #endif +``` +每秒100个tick,时间单位为10毫秒, 即每秒调用时钟中断处理程序100次. - - +### **时钟中断处理程序是怎样的?** +```cpp +/* + * Description : Tick interruption handler + *///节拍中断处理函数 ,鸿蒙默认10ms触发一次 +LITE_OS_SEC_TEXT VOID OsTickHandler(VOID) +{ + //... + OsTimesliceCheck();//进程和任务的时间片检查 + OsTaskScan(); /* task timeout scan *///任务扫描 +#if (LOSCFG_BASE_CORE_SWTMR == YES) + OsSwtmrScan();//定时器扫描,看是否有超时的定时器 +#endif +} ``` +它主要干了三件事情 -每秒100 tick ,即每秒100次调用时钟中断处理程序, 时间片单位为10ms +### **第一:检查当前任务的时间片,任务执行一次分配多少时间呢?答案是2个时间片,即 20ms.** +```cpp +#ifndef LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT +#define LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT 2 //2个时间片,20ms +#endif +//检查进程和任务的时间片,如果没有时间片了直接调度 +LITE_OS_SEC_TEXT VOID OsTimesliceCheck(VOID) +{ + LosTaskCB *runTask = NULL; + LosProcessCB *runProcess = OsCurrProcessGet();//获取当前进程 + if (runProcess->policy != LOS_SCHED_RR) {//进程调度算法是否是抢占式 + goto SCHED_TASK;//进程不是抢占式调度直接去检查任务的时间片 + } -一次任务分配多少时间给进程执行呢?答案是 2个时间片,即 20ms + if (runProcess->timeSlice != 0) {//进程还有时间片吗? + runProcess->timeSlice--;//进程时间片减少一次 + if (runProcess->timeSlice == 0) {//没有时间片了 + LOS_Schedule();//进程时间片用完,发起调度 + } + } -对应张大爷的故事:节目喊到后这次进来的总表演时间,10分钟一个时间片,共2片,表演20分钟。 +SCHED_TASK: + runTask = OsCurrTaskGet();//获取当前任务 + if (runTask->policy != LOS_SCHED_RR) {//任务调度算法是否是抢占式 + return;//任务不是抢占式调度直接结束检查 + } + if (runTask->timeSlice != 0) {//任务还有时间片吗? + runTask->timeSlice--;//任务时间片也减少一次 + if (runTask->timeSlice == 0) {//没有时间片了 + LOS_Schedule();//任务时间片用完,发起调度 + } + } +} +``` +### **第二:扫描任务,主要是检查被阻塞的任务是否可以被重新调度** ```cpp -/** - * @ingroup los_config - * Longest execution time of tasks with the same priorities - */ -#ifndef LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT -#define LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT 2 +LITE_OS_SEC_TEXT VOID OsTaskScan(VOID) +{ + SortLinkList *sortList = NULL; + LosTaskCB *taskCB = NULL; + BOOL needSchedule = FALSE; + UINT16 tempStatus; + LOS_DL_LIST *listObject = NULL; + SortLinkAttribute *taskSortLink = NULL; + + taskSortLink = &OsPercpuGet()->taskSortLink;//获取任务的排序链表 + taskSortLink->cursor = (taskSortLink->cursor + 1) & OS_TSK_SORTLINK_MASK; + listObject = taskSortLink->sortLink + taskSortLink->cursor;//只处理这个游标上的链表,因为系统对超时任务都已经规链表了. + //当任务因超时而挂起时,任务块处于超时排序链接上,(每个cpu)和ipc(互斥锁、扫描电镜等)的块同时被唤醒 + /*不管是超时还是相应的ipc,它都在等待。现在使用synchronize sortlink precedure,因此整个任务扫描需要保护,防止另一个核心同时删除sortlink。 + * When task is pended with timeout, the task block is on the timeout sortlink + * (per cpu) and ipc(mutex,sem and etc.)'s block at the same time, it can be waken + * up by either timeout or corresponding ipc it's waiting. + * + * Now synchronize sortlink preocedure is used, therefore the whole task scan needs + * to be protected, preventing another core from doing sortlink deletion at same time. + */ + LOS_SpinLock(&g_taskSpin); + + if (LOS_ListEmpty(listObject)) { + LOS_SpinUnlock(&g_taskSpin); + return; + } + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode);//拿本次Tick对应链表的SortLinkList的第一个节点sortLinkNode + ROLLNUM_DEC(sortList->idxRollNum);//滚动数-- + + while (ROLLNUM(sortList->idxRollNum) == 0) {//找到时间到了节点,注意这些节点都是由定时器产生的, + LOS_ListDelete(&sortList->sortLinkNode); + taskCB = LOS_DL_LIST_ENTRY(sortList, LosTaskCB, sortList);//拿任务,这里的任务都是超时任务 + taskCB->taskStatus &= ~OS_TASK_STATUS_PEND_TIME; + tempStatus = taskCB->taskStatus; + if (tempStatus & OS_TASK_STATUS_PEND) { + taskCB->taskStatus &= ~OS_TASK_STATUS_PEND; +#if (LOSCFG_KERNEL_LITEIPC == YES) + taskCB->ipcStatus &= ~IPC_THREAD_STATUS_PEND; #endif + taskCB->taskStatus |= OS_TASK_STATUS_TIMEOUT; + LOS_ListDelete(&taskCB->pendList); + taskCB->taskSem = NULL; + taskCB->taskMux = NULL; + } else { + taskCB->taskStatus &= ~OS_TASK_STATUS_DELAY; + } -/** - * @ingroup los_process - * Hold the time slice process - */ -#define OS_PROCESS_SCHED_RR_INTERVAL LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT + if (!(tempStatus & OS_TASK_STATUS_SUSPEND)) { + OS_TASK_SCHED_QUEUE_ENQUEUE(taskCB, OS_PROCESS_STATUS_PEND); + needSchedule = TRUE; + } + if (LOS_ListEmpty(listObject)) { + break; + } + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); + } + + LOS_SpinUnlock(&g_taskSpin); + + if (needSchedule != FALSE) {//需要调度 + LOS_MpSchedule(OS_MP_CPU_ALL);//核间通讯,给所有CPU发送调度信号 + LOS_Schedule();//开始调度 + } +} ``` +### **第三:定时器扫描,看是否有超时的定时器** +```cpp +/* + * Description: Tick interrupt interface module of software timer + * Return : LOS_OK on success or error code on failure + *///OsSwtmrScan 由系统时钟中断处理函数调用 +LITE_OS_SEC_TEXT VOID OsSwtmrScan(VOID)//扫描定时器,如果碰到超时的,就放入超时队列 +{ + SortLinkList *sortList = NULL; + SWTMR_CTRL_S *swtmr = NULL; + SwtmrHandlerItemPtr swtmrHandler = NULL; + LOS_DL_LIST *listObject = NULL; + SortLinkAttribute* swtmrSortLink = &OsPercpuGet()->swtmrSortLink;//拿到当前CPU的定时器链表 + + swtmrSortLink->cursor = (swtmrSortLink->cursor + 1) & OS_TSK_SORTLINK_MASK; + listObject = swtmrSortLink->sortLink + swtmrSortLink->cursor; + //由于swtmr是在特定的sortlink中,所以需要很小心的处理它,但其他CPU Core仍然有机会处理它,比如停止计时器 + /* + * it needs to be carefully coped with, since the swtmr is in specific sortlink + * while other cores still has the chance to process it, like stop the timer. + */ + LOS_SpinLock(&g_swtmrSpin); + + if (LOS_ListEmpty(listObject)) { + LOS_SpinUnlock(&g_swtmrSpin); + return; + } + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); + ROLLNUM_DEC(sortList->idxRollNum); + + while (ROLLNUM(sortList->idxRollNum) == 0) { + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); + LOS_ListDelete(&sortList->sortLinkNode); + swtmr = LOS_DL_LIST_ENTRY(sortList, SWTMR_CTRL_S, stSortList); + + swtmrHandler = (SwtmrHandlerItemPtr)LOS_MemboxAlloc(g_swtmrHandlerPool);//取出一个可用的软时钟处理项 + if (swtmrHandler != NULL) { + swtmrHandler->handler = swtmr->pfnHandler; + swtmrHandler->arg = swtmr->uwArg; + + if (LOS_QueueWrite(OsPercpuGet()->swtmrHandlerQueue, swtmrHandler, sizeof(CHAR *), LOS_NO_WAIT)) { + (VOID)LOS_MemboxFree(g_swtmrHandlerPool, swtmrHandler); + } + } -用完需要可以再分配,但一次就是只给2个时间片,怕你一直占着茅坑,后面还有人在等的.详细代码: OsSchedResched(VOID) + if (swtmr->ucMode == LOS_SWTMR_MODE_ONCE) { + OsSwtmrDelete(swtmr); + + if (swtmr->usTimerID < (OS_SWTMR_MAX_TIMERID - LOSCFG_BASE_CORE_SWTMR_LIMIT)) { + swtmr->usTimerID += LOSCFG_BASE_CORE_SWTMR_LIMIT; + } else { + swtmr->usTimerID %= LOSCFG_BASE_CORE_SWTMR_LIMIT; + } + } else if (swtmr->ucMode == LOS_SWTMR_MODE_NO_SELFDELETE) { + swtmr->ucState = OS_SWTMR_STATUS_CREATED; + } else { + swtmr->ucOverrun++; + OsSwtmrStart(swtmr); + } + if (LOS_ListEmpty(listObject)) { + break; + } + + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); + } + + LOS_SpinUnlock(&g_swtmrSpin); +} +``` +### **最后看调度算法的实现** ```cpp -//重新调度实现 +//调度算法的实现 VOID OsSchedResched(VOID) { LosTaskCB *runTask = NULL; @@ -125,201 +285,10 @@ VOID OsSchedResched(VOID) newProcess->threadScheduleMap, newTask->taskName, newTask->taskID, newTask->taskStatus); /* do the task context switch */ - OsTaskSchedule(newTask, runTask);//再执行调度,主要是切换CPU的上下文 + OsTaskSchedule(newTask, runTask);//切换任务上下文,注意OsTaskSchedule是一个汇编函数 见于 los_dispatch.s } - - - ``` - -## 在哪里设置tick的回调函数? - -从main中可以看到tick 的初始化和中断服务程序的注册 - -![](https://img-blog.csdnimg.cn/20200915170002382.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t1YW5neXVmZWk=,size_16,color_FFFFFF,t_70) - -```cpp -// 中断处理函数 -VOID OsTickEntry(VOID) -{ - OsTickHandler(); //最最关键函数 - - /* clear private timer */ - g_privateTimer->intStatus = 0x01; -} - - -// 由 main 函数调用,注册中断处理函数 OsTickEntry -VOID HalClockInit(VOID) -{ - UINT32 ret; - - ret = LOS_HwiCreate(PRVTIMER_INT_NUM, 0xa0, 0, OsTickEntry, NULL); - if (ret != LOS_OK) { - PRINT_ERR("%s, %d create tick irq failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret); - } -} - - -``` - -OsTickHandler 是tick 的中断处理程序,其中完成了时间片的检查和任务的扫描。 - -```cpp -/* - * Description : Tick interruption handler - *///系统时钟中断处理函数 ,鸿蒙是 10ms触发一次 -LITE_OS_SEC_TEXT VOID OsTickHandler(VOID) -{ -    UINT32 intSave; - -    TICK_LOCK(intSave); -    g_tickCount[ArchCurrCpuid()]++;//当前CPU核 计数器 -    TICK_UNLOCK(intSave); - -#ifdef LOSCFG_KERNEL_VDSO -    OsUpdateVdsoTimeval(); -#endif - -#ifdef LOSCFG_KERNEL_TICKLESS -    OsTickIrqFlagSet(OsTicklessFlagGet()); -#endif - -#if (LOSCFG_BASE_CORE_TICK_HW_TIME == YES) -    HalClockIrqClear(); /* diff from every platform */ -#endif - -    OsTimesliceCheck();//时间片检查 - -    OsTaskScan(); /* task timeout scan *///任务扫描 - -#if (LOSCFG_BASE_CORE_SWTMR == YES) -    OsSwtmrScan();//定时器扫描,看是否有超时的定时器 -#endif -} - - - -``` - -```cpp -LITE_OS_SEC_TEXT VOID OsTimesliceCheck(VOID) -{ - LosTaskCB *runTask = NULL; - LosProcessCB *runProcess = OsCurrProcessGet(); - if (runProcess->policy != LOS_SCHED_RR) { - goto SCHED_TASK; - } - - if (runProcess->timeSlice != 0) { - runProcess->timeSlice--;//进程时间片减少一次 - if (runProcess->timeSlice == 0) { - LOS_Schedule();//进程时间片用完,发起调度 - } - } - -SCHED_TASK: - runTask = OsCurrTaskGet(); - if (runTask->policy != LOS_SCHED_RR) { - return; - } - - if (runTask->timeSlice != 0) { - runTask->timeSlice--;//对应任务时间片也减少一次 - if (runTask->timeSlice == 0) { - LOS_Schedule(); - } - } -} - - - -``` - -## OsTaskScan() - -OsTaskScan()不断查task的状态,有任务就去执行,毫不夸张的可以说是 进程有序执行的源动力之所在! - -```cpp -//任务扫描处理,注意这个函数只有 时钟中断处理函数OsTickHandler调用,非常稳定.所以游标每次进来都+1对应一个tick -LITE_OS_SEC_TEXT VOID OsTaskScan(VOID) -{ -    SortLinkList *sortList = NULL; -    LosTaskCB *taskCB = NULL; -    BOOL needSchedule = FALSE; -    UINT16 tempStatus; -    LOS_DL_LIST *listObject = NULL; -    SortLinkAttribute *taskSortLink = NULL; - -    taskSortLink = &OsPercpuGet()->taskSortLink;//获取任务的排序链表 -    taskSortLink->cursor = (taskSortLink->cursor + 1) & OS_TSK_SORTLINK_MASK; -    listObject = taskSortLink->sortLink + taskSortLink->cursor;//只处理这个游标上的链表,因为系统对超时任务都已经规链表了. -    //当任务因超时而挂起时,任务块处于超时排序链接上,(每个cpu)和ipc(互斥锁、扫描电镜等)的块同时被唤醒 -    /*不管是超时还是相应的ipc,它都在等待。现在使用synchronize sortlink precedure,因此整个任务扫描需要保护,防止另一个核心同时删除sortlink。 -     * When task is pended with timeout, the task block is on the timeout sortlink -     * (per cpu) and ipc(mutex,sem and etc.)'s block at the same time, it can be waken -     * up by either timeout or corresponding ipc it's waiting. -     * -     * Now synchronize sortlink preocedure is used, therefore the whole task scan needs -     * to be protected, preventing another core from doing sortlink deletion at same time. -     */ -    LOS_SpinLock(&g_taskSpin); - -    if (LOS_ListEmpty(listObject)) { -        LOS_SpinUnlock(&g_taskSpin); -        return; -    } -    sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode);//拿本次Tick对应链表的SortLinkList的第一个节点sortLinkNode -    ROLLNUM_DEC(sortList->idxRollNum);//滚动数-- - -    while (ROLLNUM(sortList->idxRollNum) == 0) {//找到时间到了节点,注意这些节点都是由定时器产生的, -        LOS_ListDelete(&sortList->sortLinkNode); -        taskCB = LOS_DL_LIST_ENTRY(sortList, LosTaskCB, sortList);//拿任务,这里的任务都是超时任务 -        taskCB->taskStatus &= ~OS_TASK_STATUS_PEND_TIME; -        tempStatus = taskCB->taskStatus; -        if (tempStatus & OS_TASK_STATUS_PEND) { -            taskCB->taskStatus &= ~OS_TASK_STATUS_PEND; -#if (LOSCFG_KERNEL_LITEIPC == YES) -            taskCB->ipcStatus &= ~IPC_THREAD_STATUS_PEND; -#endif -            taskCB->taskStatus |= OS_TASK_STATUS_TIMEOUT; -            LOS_ListDelete(&taskCB->pendList); -            taskCB->taskSem = NULL; -            taskCB->taskMux = NULL; -        } else { -            taskCB->taskStatus &= ~OS_TASK_STATUS_DELAY; -        } - -        if (!(tempStatus & OS_TASK_STATUS_SUSPEND)) { -            OS_TASK_SCHED_QUEUE_ENQUEUE(taskCB, OS_PROCESS_STATUS_PEND); -            needSchedule = TRUE; -        } - -        if (LOS_ListEmpty(listObject)) { -            break; -        } - -        sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); -    } - -    LOS_SpinUnlock(&g_taskSpin); - -    if (needSchedule != FALSE) { -        LOS_MpSchedule(OS_MP_CPU_ALL); -        LOS_Schedule(); -    } -} - - -``` - -![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==) - -以上代码对应张大爷的故事: 钟声一响起张大爷起身去查 节目时间用完没有,没用完继续你的表演,用完了去外面重新排队,大爷再从外面选一个优先级最高的节目进来表演,就这么简单!除了钟响大爷去工作之外,还有什么情况能让大爷不要偷懒,起来走两步呢? - -## 除了tick 会触发调度,还有哪些情况会触发调度? - -[![WeHarmony/kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/weharmony/kernel_liteos_a_note) +最后的 OsTaskSchedule 是由汇编实现的,后续会详细讲解各个汇编文件,除了tick 会触发调度,还有哪些情况会触发调度? ### **喜欢就关注下吧,您的关注真的很重要** diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\346\263\250\351\207\212\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\346\263\250\351\207\212\347\257\207).md" index 9efda7e6..c37295c9 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\346\263\250\351\207\212\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\346\263\250\351\207\212\347\257\207).md" @@ -1,6 +1,6 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note) | [ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note) | [ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note) | [ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files) 精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. -[鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852) [| HarmonyOS 】](https://weharmony.github.io/) 问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. +[鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. --- @@ -61,10 +61,6 @@ 第二: **专业概念抽象级** 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用程序员,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它的现实认知.试图用 **[鸿蒙源码分析系列篇 【 CSDN](https://blog.csdn.net/kuangyufei/article/details/108727970) [| OSCHINA](https://my.oschina.net/u/3751245/blog/4626852) [| HarmonyOS 】](https://weharmony.github.io/)** 去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱. 第三: **具体微观代码级** 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计? **[kernel\_liteos\_a_note:鸿蒙内核源码注释中文版](https://gitee.com/weharmony/kernel_liteos_a_note)** 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望注释中文版能让更多爱好者快速的理解内核,共同进步. - -- ### **系列博客更新到哪里了?** - - 把研究过程心得写成鸿蒙源码分析系列篇,如此源码中文注释+系列篇文章,将加速理解鸿蒙内核实现过程. - ### **鸿蒙源码分析系列篇** @@ -100,7 +96,7 @@ * [|- 鸿蒙内核源码分析(任务管理篇) | 任务是内核调度的单元【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108621428) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4603919)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(任务管理篇).html) - * [|- 鸿蒙内核源码分析(时钟管理篇) | 触发调度最大的动力来自哪里?【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108603468) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574493)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(时钟管理篇).html) + * [|- 鸿蒙内核源码分析(时钟任务篇) | 触发调度最大的动力来自哪里?【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108603468) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574493)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(时钟管理篇).html) * [|- 鸿蒙内核源码分析(进程管理篇) | 进程是内核资源管理单元【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108595941) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574429)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(进程管理篇).html) @@ -119,19 +115,16 @@ 2. [新建 Issue](https://gitee.com/weharmony/kernel_liteos_a_note/issues) +### **喜欢就关注下吧,您的关注真的很重要** +![在这里插入图片描述](https://gitee.com/weharmony/kernel_liteos_a_note/raw/master/zzz/pic/other/wxcode.png) -- ### **喜欢就关注下吧,您的关注真的很重要** - - ![在这里插入图片描述](https://gitee.com/weharmony/kernel_liteos_a_note/raw/master/zzz/pic/other/wxcode.png) +作者邮箱:weharmony@126.com - 作者邮箱:weharmony@126.com - - --- +--- - [![WeHarmony/kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/weharmony/kernel_liteos_a_note) +[![WeHarmony/kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/weharmony/kernel_liteos_a_note) - [鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. - [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. - \ No newline at end of file +[鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\347\273\223\346\236\204\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\347\273\223\346\236\204\347\257\207).md" index fb7d40e1..7cd0ccc5 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\347\273\223\346\236\204\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\347\273\223\346\236\204\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\347\211\251\347\220\206\345\206\205\345\255\230\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\347\211\251\347\220\206\345\206\205\345\255\230\347\257\207).md" index cea80dcd..6a289026 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\347\211\251\347\220\206\345\206\205\345\255\230\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\347\211\251\347\220\206\345\206\205\345\255\230\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\347\224\250\346\240\210\346\226\271\345\274\217\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\347\224\250\346\240\210\346\226\271\345\274\217\347\257\207).md" index 4dde1ab6..5f7bfb40 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\347\224\250\346\240\210\346\226\271\345\274\217\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\347\224\250\346\240\210\346\226\271\345\274\217\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\260\203\345\272\246\346\234\272\345\210\266\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\260\203\345\272\246\346\234\272\345\210\266\347\257\207).md" index c3d1f458..24ffcd5e 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\260\203\345\272\246\346\234\272\345\210\266\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\260\203\345\272\246\346\234\272\345\210\266\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\260\203\345\272\246\351\230\237\345\210\227\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\260\203\345\272\246\351\230\237\345\210\227\347\257\207).md" index 96372c44..f38c958b 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\260\203\345\272\246\351\230\237\345\210\227\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\260\203\345\272\246\351\230\237\345\210\227\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\277\233\347\250\213\347\256\241\347\220\206\347\257\207).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\277\233\347\250\213\347\256\241\347\220\206\347\257\207).md" index 7d3ee3a3..972fe88b 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\277\233\347\250\213\347\256\241\347\220\206\347\257\207).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\350\277\233\347\250\213\347\256\241\347\220\206\347\257\207).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/md/docs/guide/\351\270\277\350\222\231\346\272\220\347\240\201\345\210\206\346\236\220\347\263\273\345\210\227(\346\200\273\347\233\256\345\275\225).md" "b/zzz/md/docs/guide/\351\270\277\350\222\231\346\272\220\347\240\201\345\210\206\346\236\220\347\263\273\345\210\227(\346\200\273\347\233\256\345\275\225).md" index f2fd2e74..d8508537 100644 --- "a/zzz/md/docs/guide/\351\270\277\350\222\231\346\272\220\347\240\201\345\210\206\346\236\220\347\263\273\345\210\227(\346\200\273\347\233\256\345\275\225).md" +++ "b/zzz/md/docs/guide/\351\270\277\350\222\231\346\272\220\347\240\201\345\210\206\346\236\220\347\263\273\345\210\227(\346\200\273\347\233\256\345\275\225).md" @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. @@ -37,7 +37,7 @@ * [|- 鸿蒙内核源码分析(任务管理篇) | 任务是内核调度的单元【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108621428) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4603919)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(任务管理篇).html) - * [|- 鸿蒙内核源码分析(时钟管理篇) | 触发调度最大的动力来自哪里?【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108603468) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574493)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(时钟管理篇).html) + * [|- 鸿蒙内核源码分析(时钟任务篇) | 触发调度最大的动力来自哪里?【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108603468) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574493)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(时钟管理篇).html) * [|- 鸿蒙内核源码分析(进程管理篇) | 进程是内核资源管理单元【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108595941) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574429)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(进程管理篇).html) diff --git a/zzz/mdmerge/bloglist.md b/zzz/mdmerge/bloglist.md index 6a152abe..05a237a8 100644 --- a/zzz/mdmerge/bloglist.md +++ b/zzz/mdmerge/bloglist.md @@ -32,7 +32,7 @@ * [|- 鸿蒙内核源码分析(任务管理篇) | 任务是内核调度的单元【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108621428) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4603919)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(任务管理篇).html) - * [|- 鸿蒙内核源码分析(时钟管理篇) | 触发调度最大的动力来自哪里?【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108603468) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574493)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(时钟管理篇).html) + * [|- 鸿蒙内核源码分析(时钟任务篇) | 触发调度最大的动力来自哪里?【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108603468) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574493)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(时钟管理篇).html) * [|- 鸿蒙内核源码分析(进程管理篇) | 进程是内核资源管理单元【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108595941) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4574429)|[ HarmonyOS 】](https://weharmony.github.io/guide/鸿蒙内核源码分析(进程管理篇).html) diff --git a/zzz/mdmerge/head.md b/zzz/mdmerge/head.md index 99351735..e8998f1f 100644 --- a/zzz/mdmerge/head.md +++ b/zzz/mdmerge/head.md @@ -1,4 +1,4 @@ -[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文详细注解.深挖地基工程,构建底层网图. +[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note)|[ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)|[ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note)|[ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)精读内核源码,中文注解分析.深挖地基工程,构建底层网图. [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| HarmonyOS 】](https://weharmony.github.io/)问答式导读, 生活式比喻, 图形化展示, 层层剥开内核神秘外衣. diff --git "a/zzz/mdmerge/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\227\266\351\222\237\347\256\241\347\220\206\347\257\207).md" "b/zzz/mdmerge/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\227\266\351\222\237\347\256\241\347\220\206\347\257\207).md" index 2c02b3ff..373a1da4 100644 --- "a/zzz/mdmerge/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\227\266\351\222\237\347\256\241\347\220\206\347\257\207).md" +++ "b/zzz/mdmerge/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\227\266\351\222\237\347\256\241\347\220\206\347\257\207).md" @@ -1,23 +1,18 @@ !import[\zzz\mdmerge\head.md] -**[内核代码详细结构 >> 进入阅读代码](https://my.oschina.net/u/3751245/blog/4869137)** +调度算法让CPU在不同的进程和任务之间切换穿梭,但问题是 -**目录** +### **调度算法的驱动力在哪里? 谁负责推着调度算法走?** -[多久Tick一次?看代码](#%E5%A4%9A%E4%B9%85Tick%E4%B8%80%E6%AC%A1%EF%BC%9F) +有多股力量在推动,但最大的推力应该是:系统时钟. -[在哪里设置tick的回调函数?](#%E5%9C%A8%E5%93%AA%E9%87%8C%E8%AE%BE%E7%BD%AEtick%E7%9A%84%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%EF%BC%9F) +我们整个学生阶段有个东西很重要,就是校园铃声. 它控制着上课,下课,吃饭,睡觉的节奏.没有它学校的管理就乱套了,老师拖课想拖多久就多久,那可不行,下课铃声一响就是在告诉老师时间到了,该停止了让学生HAPPY去了. -[OsTaskScan()](#OsTaskScan()) +应用开发人员对定时器不会陌生,电商平台的每晚10点准时的秒杀活动没有定时任务是不可能实现的,那内核也一定要提供这样的功能被封装给应用层使用,那这个功能在内核层的表述就是系统时钟,它发出来的节奏叫tick(节拍). -[除了tick 会触发调度,还有哪些情况会触发调度?](#%E9%99%A4%E4%BA%86tick%C2%A0%E4%BC%9A%E8%A7%A6%E5%8F%91%E8%B0%83%E5%BA%A6%EF%BC%8C%E8%BF%98%E6%9C%89%E5%93%AA%E4%BA%9B%E6%83%85%E5%86%B5%E4%BC%9A%E8%A7%A6%E5%8F%91%E8%B0%83%E5%BA%A6%EF%BC%9F) - -时钟管理模块很简单,但有内核重要的代码 OsTickHandler(),这是干嘛的,可以理解为 JAVA的定时任务,但这是系统内核的定时器。因鸿蒙目前开放的是 轻量级的内核 lite os (LOS),所以tick的频率不会太高 - -对应张大爷的故事:很简单就是场馆的那个大钟,很准时, 每10分响一次,一次就是一个Tick(节拍) - -## 多久Tick一次?看代码 +对应张大爷的故事:系统时钟就是场馆的那个大钟,很准时, 每10分响一次,一次就是一个Tick(节拍) +### **鸿蒙内核的节拍频率是怎样的呢? 看代码** ```cpp /** * @ingroup los_config @@ -26,39 +21,204 @@ #ifndef LOSCFG_BASE_CORE_TICK_PER_SECOND #define LOSCFG_BASE_CORE_TICK_PER_SECOND 100 //默认每秒100次触发,当然这是可以改的 #endif +``` +每秒100个tick,时间单位为10毫秒, 即每秒调用时钟中断处理程序100次. - - +### **时钟中断处理程序是怎样的?** +```cpp +/* + * Description : Tick interruption handler + *///节拍中断处理函数 ,鸿蒙默认10ms触发一次 +LITE_OS_SEC_TEXT VOID OsTickHandler(VOID) +{ + //... + OsTimesliceCheck();//进程和任务的时间片检查 + OsTaskScan(); /* task timeout scan *///任务扫描 +#if (LOSCFG_BASE_CORE_SWTMR == YES) + OsSwtmrScan();//定时器扫描,看是否有超时的定时器 +#endif +} ``` +它主要干了三件事情 -每秒100 tick ,即每秒100次调用时钟中断处理程序, 时间片单位为10ms +### **第一:检查当前任务的时间片,任务执行一次分配多少时间呢?答案是2个时间片,即 20ms.** +```cpp +#ifndef LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT +#define LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT 2 //2个时间片,20ms +#endif +//检查进程和任务的时间片,如果没有时间片了直接调度 +LITE_OS_SEC_TEXT VOID OsTimesliceCheck(VOID) +{ + LosTaskCB *runTask = NULL; + LosProcessCB *runProcess = OsCurrProcessGet();//获取当前进程 + if (runProcess->policy != LOS_SCHED_RR) {//进程调度算法是否是抢占式 + goto SCHED_TASK;//进程不是抢占式调度直接去检查任务的时间片 + } -一次任务分配多少时间给进程执行呢?答案是 2个时间片,即 20ms + if (runProcess->timeSlice != 0) {//进程还有时间片吗? + runProcess->timeSlice--;//进程时间片减少一次 + if (runProcess->timeSlice == 0) {//没有时间片了 + LOS_Schedule();//进程时间片用完,发起调度 + } + } -对应张大爷的故事:节目喊到后这次进来的总表演时间,10分钟一个时间片,共2片,表演20分钟。 +SCHED_TASK: + runTask = OsCurrTaskGet();//获取当前任务 + if (runTask->policy != LOS_SCHED_RR) {//任务调度算法是否是抢占式 + return;//任务不是抢占式调度直接结束检查 + } + if (runTask->timeSlice != 0) {//任务还有时间片吗? + runTask->timeSlice--;//任务时间片也减少一次 + if (runTask->timeSlice == 0) {//没有时间片了 + LOS_Schedule();//任务时间片用完,发起调度 + } + } +} +``` +### **第二:扫描任务,主要是检查被阻塞的任务是否可以被重新调度** ```cpp -/** - * @ingroup los_config - * Longest execution time of tasks with the same priorities - */ -#ifndef LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT -#define LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT 2 +LITE_OS_SEC_TEXT VOID OsTaskScan(VOID) +{ + SortLinkList *sortList = NULL; + LosTaskCB *taskCB = NULL; + BOOL needSchedule = FALSE; + UINT16 tempStatus; + LOS_DL_LIST *listObject = NULL; + SortLinkAttribute *taskSortLink = NULL; + + taskSortLink = &OsPercpuGet()->taskSortLink;//获取任务的排序链表 + taskSortLink->cursor = (taskSortLink->cursor + 1) & OS_TSK_SORTLINK_MASK; + listObject = taskSortLink->sortLink + taskSortLink->cursor;//只处理这个游标上的链表,因为系统对超时任务都已经规链表了. + //当任务因超时而挂起时,任务块处于超时排序链接上,(每个cpu)和ipc(互斥锁、扫描电镜等)的块同时被唤醒 + /*不管是超时还是相应的ipc,它都在等待。现在使用synchronize sortlink precedure,因此整个任务扫描需要保护,防止另一个核心同时删除sortlink。 + * When task is pended with timeout, the task block is on the timeout sortlink + * (per cpu) and ipc(mutex,sem and etc.)'s block at the same time, it can be waken + * up by either timeout or corresponding ipc it's waiting. + * + * Now synchronize sortlink preocedure is used, therefore the whole task scan needs + * to be protected, preventing another core from doing sortlink deletion at same time. + */ + LOS_SpinLock(&g_taskSpin); + + if (LOS_ListEmpty(listObject)) { + LOS_SpinUnlock(&g_taskSpin); + return; + } + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode);//拿本次Tick对应链表的SortLinkList的第一个节点sortLinkNode + ROLLNUM_DEC(sortList->idxRollNum);//滚动数-- + + while (ROLLNUM(sortList->idxRollNum) == 0) {//找到时间到了节点,注意这些节点都是由定时器产生的, + LOS_ListDelete(&sortList->sortLinkNode); + taskCB = LOS_DL_LIST_ENTRY(sortList, LosTaskCB, sortList);//拿任务,这里的任务都是超时任务 + taskCB->taskStatus &= ~OS_TASK_STATUS_PEND_TIME; + tempStatus = taskCB->taskStatus; + if (tempStatus & OS_TASK_STATUS_PEND) { + taskCB->taskStatus &= ~OS_TASK_STATUS_PEND; +#if (LOSCFG_KERNEL_LITEIPC == YES) + taskCB->ipcStatus &= ~IPC_THREAD_STATUS_PEND; #endif + taskCB->taskStatus |= OS_TASK_STATUS_TIMEOUT; + LOS_ListDelete(&taskCB->pendList); + taskCB->taskSem = NULL; + taskCB->taskMux = NULL; + } else { + taskCB->taskStatus &= ~OS_TASK_STATUS_DELAY; + } -/** - * @ingroup los_process - * Hold the time slice process - */ -#define OS_PROCESS_SCHED_RR_INTERVAL LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT + if (!(tempStatus & OS_TASK_STATUS_SUSPEND)) { + OS_TASK_SCHED_QUEUE_ENQUEUE(taskCB, OS_PROCESS_STATUS_PEND); + needSchedule = TRUE; + } + + if (LOS_ListEmpty(listObject)) { + break; + } + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); + } + + LOS_SpinUnlock(&g_taskSpin); + if (needSchedule != FALSE) {//需要调度 + LOS_MpSchedule(OS_MP_CPU_ALL);//核间通讯,给所有CPU发送调度信号 + LOS_Schedule();//开始调度 + } +} ``` +### **第三:定时器扫描,看是否有超时的定时器** +```cpp +/* + * Description: Tick interrupt interface module of software timer + * Return : LOS_OK on success or error code on failure + *///OsSwtmrScan 由系统时钟中断处理函数调用 +LITE_OS_SEC_TEXT VOID OsSwtmrScan(VOID)//扫描定时器,如果碰到超时的,就放入超时队列 +{ + SortLinkList *sortList = NULL; + SWTMR_CTRL_S *swtmr = NULL; + SwtmrHandlerItemPtr swtmrHandler = NULL; + LOS_DL_LIST *listObject = NULL; + SortLinkAttribute* swtmrSortLink = &OsPercpuGet()->swtmrSortLink;//拿到当前CPU的定时器链表 + + swtmrSortLink->cursor = (swtmrSortLink->cursor + 1) & OS_TSK_SORTLINK_MASK; + listObject = swtmrSortLink->sortLink + swtmrSortLink->cursor; + //由于swtmr是在特定的sortlink中,所以需要很小心的处理它,但其他CPU Core仍然有机会处理它,比如停止计时器 + /* + * it needs to be carefully coped with, since the swtmr is in specific sortlink + * while other cores still has the chance to process it, like stop the timer. + */ + LOS_SpinLock(&g_swtmrSpin); + + if (LOS_ListEmpty(listObject)) { + LOS_SpinUnlock(&g_swtmrSpin); + return; + } + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); + ROLLNUM_DEC(sortList->idxRollNum); + + while (ROLLNUM(sortList->idxRollNum) == 0) { + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); + LOS_ListDelete(&sortList->sortLinkNode); + swtmr = LOS_DL_LIST_ENTRY(sortList, SWTMR_CTRL_S, stSortList); + + swtmrHandler = (SwtmrHandlerItemPtr)LOS_MemboxAlloc(g_swtmrHandlerPool);//取出一个可用的软时钟处理项 + if (swtmrHandler != NULL) { + swtmrHandler->handler = swtmr->pfnHandler; + swtmrHandler->arg = swtmr->uwArg; + + if (LOS_QueueWrite(OsPercpuGet()->swtmrHandlerQueue, swtmrHandler, sizeof(CHAR *), LOS_NO_WAIT)) { + (VOID)LOS_MemboxFree(g_swtmrHandlerPool, swtmrHandler); + } + } -用完需要可以再分配,但一次就是只给2个时间片,怕你一直占着茅坑,后面还有人在等的.详细代码: OsSchedResched(VOID) + if (swtmr->ucMode == LOS_SWTMR_MODE_ONCE) { + OsSwtmrDelete(swtmr); + + if (swtmr->usTimerID < (OS_SWTMR_MAX_TIMERID - LOSCFG_BASE_CORE_SWTMR_LIMIT)) { + swtmr->usTimerID += LOSCFG_BASE_CORE_SWTMR_LIMIT; + } else { + swtmr->usTimerID %= LOSCFG_BASE_CORE_SWTMR_LIMIT; + } + } else if (swtmr->ucMode == LOS_SWTMR_MODE_NO_SELFDELETE) { + swtmr->ucState = OS_SWTMR_STATUS_CREATED; + } else { + swtmr->ucOverrun++; + OsSwtmrStart(swtmr); + } + if (LOS_ListEmpty(listObject)) { + break; + } + + sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); + } + + LOS_SpinUnlock(&g_swtmrSpin); +} +``` +### **最后看调度算法的实现** ```cpp -//重新调度实现 +//调度算法的实现 VOID OsSchedResched(VOID) { LosTaskCB *runTask = NULL; @@ -121,201 +281,10 @@ VOID OsSchedResched(VOID) newProcess->threadScheduleMap, newTask->taskName, newTask->taskID, newTask->taskStatus); /* do the task context switch */ - OsTaskSchedule(newTask, runTask);//再执行调度,主要是切换CPU的上下文 + OsTaskSchedule(newTask, runTask);//切换任务上下文,注意OsTaskSchedule是一个汇编函数 见于 los_dispatch.s } - - - ``` - -## 在哪里设置tick的回调函数? - -从main中可以看到tick 的初始化和中断服务程序的注册 - -![](https://img-blog.csdnimg.cn/20200915170002382.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t1YW5neXVmZWk=,size_16,color_FFFFFF,t_70) - -```cpp -// 中断处理函数 -VOID OsTickEntry(VOID) -{ - OsTickHandler(); //最最关键函数 - - /* clear private timer */ - g_privateTimer->intStatus = 0x01; -} - - -// 由 main 函数调用,注册中断处理函数 OsTickEntry -VOID HalClockInit(VOID) -{ - UINT32 ret; - - ret = LOS_HwiCreate(PRVTIMER_INT_NUM, 0xa0, 0, OsTickEntry, NULL); - if (ret != LOS_OK) { - PRINT_ERR("%s, %d create tick irq failed, ret:0x%x\n", __FUNCTION__, __LINE__, ret); - } -} - - -``` - -OsTickHandler 是tick 的中断处理程序,其中完成了时间片的检查和任务的扫描。 - -```cpp -/* - * Description : Tick interruption handler - *///系统时钟中断处理函数 ,鸿蒙是 10ms触发一次 -LITE_OS_SEC_TEXT VOID OsTickHandler(VOID) -{ -    UINT32 intSave; - -    TICK_LOCK(intSave); -    g_tickCount[ArchCurrCpuid()]++;//当前CPU核 计数器 -    TICK_UNLOCK(intSave); - -#ifdef LOSCFG_KERNEL_VDSO -    OsUpdateVdsoTimeval(); -#endif - -#ifdef LOSCFG_KERNEL_TICKLESS -    OsTickIrqFlagSet(OsTicklessFlagGet()); -#endif - -#if (LOSCFG_BASE_CORE_TICK_HW_TIME == YES) -    HalClockIrqClear(); /* diff from every platform */ -#endif - -    OsTimesliceCheck();//时间片检查 - -    OsTaskScan(); /* task timeout scan *///任务扫描 - -#if (LOSCFG_BASE_CORE_SWTMR == YES) -    OsSwtmrScan();//定时器扫描,看是否有超时的定时器 -#endif -} - - - -``` - -```cpp -LITE_OS_SEC_TEXT VOID OsTimesliceCheck(VOID) -{ - LosTaskCB *runTask = NULL; - LosProcessCB *runProcess = OsCurrProcessGet(); - if (runProcess->policy != LOS_SCHED_RR) { - goto SCHED_TASK; - } - - if (runProcess->timeSlice != 0) { - runProcess->timeSlice--;//进程时间片减少一次 - if (runProcess->timeSlice == 0) { - LOS_Schedule();//进程时间片用完,发起调度 - } - } - -SCHED_TASK: - runTask = OsCurrTaskGet(); - if (runTask->policy != LOS_SCHED_RR) { - return; - } - - if (runTask->timeSlice != 0) { - runTask->timeSlice--;//对应任务时间片也减少一次 - if (runTask->timeSlice == 0) { - LOS_Schedule(); - } - } -} - - - -``` - -## OsTaskScan() - -OsTaskScan()不断查task的状态,有任务就去执行,毫不夸张的可以说是 进程有序执行的源动力之所在! - -```cpp -//任务扫描处理,注意这个函数只有 时钟中断处理函数OsTickHandler调用,非常稳定.所以游标每次进来都+1对应一个tick -LITE_OS_SEC_TEXT VOID OsTaskScan(VOID) -{ -    SortLinkList *sortList = NULL; -    LosTaskCB *taskCB = NULL; -    BOOL needSchedule = FALSE; -    UINT16 tempStatus; -    LOS_DL_LIST *listObject = NULL; -    SortLinkAttribute *taskSortLink = NULL; - -    taskSortLink = &OsPercpuGet()->taskSortLink;//获取任务的排序链表 -    taskSortLink->cursor = (taskSortLink->cursor + 1) & OS_TSK_SORTLINK_MASK; -    listObject = taskSortLink->sortLink + taskSortLink->cursor;//只处理这个游标上的链表,因为系统对超时任务都已经规链表了. -    //当任务因超时而挂起时,任务块处于超时排序链接上,(每个cpu)和ipc(互斥锁、扫描电镜等)的块同时被唤醒 -    /*不管是超时还是相应的ipc,它都在等待。现在使用synchronize sortlink precedure,因此整个任务扫描需要保护,防止另一个核心同时删除sortlink。 -     * When task is pended with timeout, the task block is on the timeout sortlink -     * (per cpu) and ipc(mutex,sem and etc.)'s block at the same time, it can be waken -     * up by either timeout or corresponding ipc it's waiting. -     * -     * Now synchronize sortlink preocedure is used, therefore the whole task scan needs -     * to be protected, preventing another core from doing sortlink deletion at same time. -     */ -    LOS_SpinLock(&g_taskSpin); - -    if (LOS_ListEmpty(listObject)) { -        LOS_SpinUnlock(&g_taskSpin); -        return; -    } -    sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode);//拿本次Tick对应链表的SortLinkList的第一个节点sortLinkNode -    ROLLNUM_DEC(sortList->idxRollNum);//滚动数-- - -    while (ROLLNUM(sortList->idxRollNum) == 0) {//找到时间到了节点,注意这些节点都是由定时器产生的, -        LOS_ListDelete(&sortList->sortLinkNode); -        taskCB = LOS_DL_LIST_ENTRY(sortList, LosTaskCB, sortList);//拿任务,这里的任务都是超时任务 -        taskCB->taskStatus &= ~OS_TASK_STATUS_PEND_TIME; -        tempStatus = taskCB->taskStatus; -        if (tempStatus & OS_TASK_STATUS_PEND) { -            taskCB->taskStatus &= ~OS_TASK_STATUS_PEND; -#if (LOSCFG_KERNEL_LITEIPC == YES) -            taskCB->ipcStatus &= ~IPC_THREAD_STATUS_PEND; -#endif -            taskCB->taskStatus |= OS_TASK_STATUS_TIMEOUT; -            LOS_ListDelete(&taskCB->pendList); -            taskCB->taskSem = NULL; -            taskCB->taskMux = NULL; -        } else { -            taskCB->taskStatus &= ~OS_TASK_STATUS_DELAY; -        } - -        if (!(tempStatus & OS_TASK_STATUS_SUSPEND)) { -            OS_TASK_SCHED_QUEUE_ENQUEUE(taskCB, OS_PROCESS_STATUS_PEND); -            needSchedule = TRUE; -        } - -        if (LOS_ListEmpty(listObject)) { -            break; -        } - -        sortList = LOS_DL_LIST_ENTRY(listObject->pstNext, SortLinkList, sortLinkNode); -    } - -    LOS_SpinUnlock(&g_taskSpin); - -    if (needSchedule != FALSE) { -        LOS_MpSchedule(OS_MP_CPU_ALL); -        LOS_Schedule(); -    } -} - - -``` - -![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==) - -以上代码对应张大爷的故事: 钟声一响起张大爷起身去查 节目时间用完没有,没用完继续你的表演,用完了去外面重新排队,大爷再从外面选一个优先级最高的节目进来表演,就这么简单!除了钟响大爷去工作之外,还有什么情况能让大爷不要偷懒,起来走两步呢? - -## 除了tick 会触发调度,还有哪些情况会触发调度? - -[![WeHarmony/kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/weharmony/kernel_liteos_a_note) +最后的 OsTaskSchedule 是由汇编实现的,后续会详细讲解各个汇编文件,除了tick 会触发调度,还有哪些情况会触发调度? !import[\zzz\mdmerge\foot.md] !export[\zzz\md\docs\guide\鸿蒙内核源码分析(时钟管理篇).md] \ No newline at end of file diff --git "a/zzz/mdmerge/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\346\263\250\351\207\212\347\257\207).md" "b/zzz/mdmerge/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\346\263\250\351\207\212\347\257\207).md" index aa2c7ddc..94b6078d 100644 --- "a/zzz/mdmerge/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\346\263\250\351\207\212\347\257\207).md" +++ "b/zzz/mdmerge/\351\270\277\350\222\231\345\206\205\346\240\270\346\272\220\347\240\201\345\210\206\346\236\220(\346\272\220\347\240\201\346\263\250\351\207\212\347\257\207).md" @@ -57,10 +57,6 @@ 第二: **专业概念抽象级** 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用程序员,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它的现实认知.试图用 **[鸿蒙源码分析系列篇 【 CSDN](https://blog.csdn.net/kuangyufei/article/details/108727970) [| OSCHINA](https://my.oschina.net/u/3751245/blog/4626852) [| HarmonyOS 】](https://weharmony.github.io/)** 去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱. 第三: **具体微观代码级** 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计? **[kernel\_liteos\_a_note:鸿蒙内核源码注释中文版](https://gitee.com/weharmony/kernel_liteos_a_note)** 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望注释中文版能让更多爱好者快速的理解内核,共同进步. - -- ### **系列博客更新到哪里了?** - - 把研究过程心得写成鸿蒙源码分析系列篇,如此源码中文注释+系列篇文章,将加速理解鸿蒙内核实现过程. !import[\zzz\mdmerge\bloglist.md] @@ -77,8 +73,6 @@ 2. [新建 Issue](https://gitee.com/weharmony/kernel_liteos_a_note/issues) - - !import[\zzz\mdmerge\foot.md] -!export[\zzz\md\docs\guide\鸿蒙内核源码分析(源码注释篇).md] - \ No newline at end of file +!export[\README.md] +!export[\zzz\md\docs\guide\鸿蒙内核源码分析(源码注释篇).md] \ No newline at end of file -- GitLab