进程回收过程注解

    百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
    https://my.oschina.net/weharmony
上级 af76a9f9
[![在这里插入图片描述](https://gitee.com/weharmony/docs/raw/master/pic/other/io.png)](https://weharmony.gitee.io) [![在这里插入图片描述](https://gitee.com/weharmony/docs/raw/master/pic/other/io.png)](https://weharmony.gitee.io)
[百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新<](https://gitee.com/weharmony/kernel_liteos_a_note)[ gitee ](https://gitee.com/weharmony/kernel_liteos_a_note)[| github ](https://github.com/kuangyufei/kernel_liteos_a_note)[| csdn ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)[| coding ](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)[>]() [百万汉字注解 >> 精读鸿蒙源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新<](https://gitee.com/weharmony/kernel_liteos_a_note)[ gitee ](https://gitee.com/weharmony/kernel_liteos_a_note)[| github ](https://github.com/kuangyufei/kernel_liteos_a_note)[| csdn ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note)[| coding ](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)[>]()
[百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点定期更新中<](https://my.oschina.net/weharmony)[ oschina ](https://my.oschina.net/weharmony)[| csdn ](https://blog.csdn.net/kuangyufei)[| harmony ](https://weharmony.gitee.io/)[>]() [百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点定期更新中<](https://my.oschina.net/weharmony)[ oschina ](https://my.oschina.net/weharmony)[ | 51cto ](https://harmonyos.51cto.com/column/34)[| csdn ](https://blog.csdn.net/kuangyufei)[| harmony ](https://weharmony.gitee.io/)[>]()
--- ---
...@@ -55,121 +55,115 @@ ...@@ -55,121 +55,115 @@
* **专业概念抽象级:** 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用程序员,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它的现实认知.试图用 **[鸿蒙内核源码分析(总目录)百篇博客](https://my.oschina.net/weharmony)** 去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱. * **专业概念抽象级:** 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用程序员,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它的现实认知.试图用 **[鸿蒙内核源码分析(总目录)百篇博客](https://my.oschina.net/weharmony)** 去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱.
* **具体微观代码级:** 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计? **[鸿蒙内核源码注解分析](https://gitee.com/weharmony/kernel_liteos_a_note)** 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望对鸿蒙内核源码注解分析能让更多爱好者快速的理解内核,共同进步. * **具体微观代码级:** 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计? **[鸿蒙内核源码注解分析](https://gitee.com/weharmony/kernel_liteos_a_note)** 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望对鸿蒙内核源码注解分析能让更多爱好者快速的理解内核,共同进步.
## **百篇博客分析** ## 百篇博客分析
***[鸿蒙内核源码加注释](https://gitee.com/weharmony/kernel_liteos_a_note)** 过程中,整理出以下文章.内容多以 轻松口语化的故事,生活场景打比方,表格,图像 将尽可能多的内核知识点置入某种场景,具有画面感,形成多重联接路径,达到轻松记忆,甚至永久记忆的目的. *[鸿蒙内核源码加注释](https://gitee.com/weharmony/kernel_liteos_a_note) 过程中,整理出以下文章.内容多以 轻松口语化的故事,生活场景打比方,表格,图像 将尽可能多的内核知识点置入某种场景,具有画面感,形成多重联接路径,达到轻松记忆,甚至永久记忆的目的.
* 鸿蒙内核源码注解分析系列不是百度教条式的在说清楚一堆诘屈聱牙的概念,那没什么意思.更希望是让内核变得栩栩如生,倍感亲切.确实有难度,不自量力,但已经出发,回头已是不可能的了.:P * 鸿蒙内核源码注解分析系列不是百度教条式的在说清楚一堆诘屈聱牙的概念,那没什么意思.更希望是让内核变得栩栩如生,倍感亲切.确实有难度,自不量力,但已经出发,回头已是不可能的了.:P
### **鸿蒙源码百篇博客 往期回顾** ### **鸿蒙源码百篇博客 往期回顾**
* [v46.xx (特殊进程篇) | 龙生龙,凤生凤,老鼠生儿会打洞 ](https://my.oschina.net/weharmony/blog/5014444) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115556505) [ | harmony ](https://weharmony.gitee.io/46_特殊进程篇篇.html)[>]()** * [v47.xx (进程回收篇) | 老父亲如何向老祖宗临终托孤 ? ](https://my.oschina.net/weharmony/blog/5017716) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115672752) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/47_进程回收篇.html)[>]()**
* [v45.xx (fork篇) | fork是如何做到调用一次,返回两次的 ? ](https://my.oschina.net/weharmony/blog/5010301) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115467961) [ | harmony ](https://weharmony.gitee.io/45_fork篇.html)[>]()** * [v46.xx (特殊进程篇) | 龙生龙,凤生凤,老鼠生儿会打洞 ](https://my.oschina.net/weharmony/blog/5014444) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115556505) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/46_特殊进程篇.html)[>]()**
* [v44.xx (中断管理篇) | 硬中断的实现<>观察者模式 ](https://my.oschina.net/weharmony/blog/4995800) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115130055) [ | harmony ](https://weharmony.gitee.io/44_中断管理篇.html)[>]()** * [v45.xx (fork篇) | fork是如何做到调用一次,返回两次的 ? ](https://my.oschina.net/weharmony/blog/5010301) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115467961) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/45_fork篇.html)[>]()**
* [v43.xx (中断概念篇) | 外人眼中权势滔天的当红海公公 ](https://my.oschina.net/weharmony/blog/4992750) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115014442) [ | harmony ](https://weharmony.gitee.io/43_中断概念篇.html)[>]()** * [v44.xx (中断管理篇) | 硬中断的实现<>观察者模式 ](https://my.oschina.net/weharmony/blog/4995800) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115130055) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/44_中断管理篇.html)[>]()**
* [v42.xx (中断切换篇) | 中断切换到底在切换什么?](https://my.oschina.net/weharmony/blog/4990948) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114988891) [ | harmony ](https://weharmony.gitee.io/42_中断切换篇.html)[>]()** * [v43.xx (中断概念篇) | 外人眼中权势滔天的当红海公公 ](https://my.oschina.net/weharmony/blog/4992750) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/115014442) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/43_中断概念篇.html)[>]()**
* [v41.xx (任务切换篇) | 汇编逐行注解分析任务上下文 ](https://my.oschina.net/weharmony/blog/4988628) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114890180) [ | harmony ](https://weharmony.gitee.io/41_任务切换篇.html)[>]()** * [v42.xx (中断切换篇) | 中断切换到底在切换什么?](https://my.oschina.net/weharmony/blog/4990948) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114988891) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/42_中断切换篇.html)[>]()**
* [v40.xx (汇编汇总篇) | 所有的汇编代码都在这里 ](https://my.oschina.net/weharmony/blog/4977924) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114597179) [ | harmony ](https://weharmony.gitee.io/40_汇编汇总篇.html)[>]()** * [v41.xx (任务切换篇) | 汇编逐行注解分析任务上下文 ](https://my.oschina.net/weharmony/blog/4988628) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114890180) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/41_任务切换篇.html)[>]()**
* [v39.xx (异常接管篇) | 社会很单纯,复杂的是人 ](https://my.oschina.net/weharmony/blog/4973016) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114438285) [ | harmony ](https://weharmony.gitee.io/39_异常接管篇.html)[>]()** * [v40.xx (汇编汇总篇) | 所有的汇编代码都在这里 ](https://my.oschina.net/weharmony/blog/4977924) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114597179) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/40_汇编汇总篇.html)[>]()**
* [v38.xx (寄存器篇) | ARM所有寄存器一网打尽,不再神秘 ](https://my.oschina.net/weharmony/blog/4969487) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114326994) [ | harmony ](https://weharmony.gitee.io/38_寄存器篇.html)[>]()** * [v39.xx (异常接管篇) | 社会很单纯,复杂的是人 ](https://my.oschina.net/weharmony/blog/4973016) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114438285) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/39_异常接管篇.html)[>]()**
* [v37.xx (系统调用篇) | 全盘解剖系统调用实现过程 ](https://my.oschina.net/weharmony/blog/4967613) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114285166) [ | harmony ](https://weharmony.gitee.io/37_系统调用篇.html)[>]()** * [v38.xx (寄存器篇) | ARM所有寄存器一网打尽,不再神秘 ](https://my.oschina.net/weharmony/blog/4969487) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114326994) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/38_寄存器篇.html)[>]()**
* [v36.xx (工作模式篇) | CPU是韦小宝,有哪七个老婆? ](https://my.oschina.net/weharmony/blog/4965052) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114168567) [ | harmony ](https://weharmony.gitee.io/36_工作模式篇.html)[>]()** * [v37.xx (系统调用篇) | 全盘解剖系统调用实现过程 ](https://my.oschina.net/weharmony/blog/4967613) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114285166) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/37_系统调用篇.html)[>]()**
* [v35.xx (时间管理篇) | Tick是操作系统的基本时间单位 ](https://my.oschina.net/weharmony/blog/4956163) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113867785) [ | harmony ](https://weharmony.gitee.io/35_时间管理篇.html)[>]()** * [v36.xx (工作模式篇) | CPU是韦小宝,有哪七个老婆? ](https://my.oschina.net/weharmony/blog/4965052) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/114168567) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/36_工作模式篇.html)[>]()**
* [v34.xx (原子操作篇) | 是谁在为原子操作保驾护航? ](https://my.oschina.net/weharmony/blog/4955290) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113850603) [ | harmony ](https://weharmony.gitee.io/34_原子操作篇.html)[>]()** * [v35.xx (时间管理篇) | Tick是操作系统的基本时间单位 ](https://my.oschina.net/weharmony/blog/4956163) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113867785) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/35_时间管理篇.html)[>]()**
* [v33.xx (消息队列篇) | 进程间如何异步解耦传递大数据 ? ](https://my.oschina.net/weharmony/blog/4952961) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113815355) [ | harmony ](https://weharmony.gitee.io/33_消息队列篇.html)[>]()** * [v34.xx (原子操作篇) | 是谁在为原子操作保驾护航? ](https://my.oschina.net/weharmony/blog/4955290) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113850603) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/34_原子操作篇.html)[>]()**
* [v32.xx (CPU篇) | 内核是如何描述CPU的? ](https://my.oschina.net/weharmony/blog/4952034) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113782749) [ | harmony ](https://weharmony.gitee.io/32_CPU篇.html)[>]()** * [v33.xx (消息队列篇) | 进程间如何异步解耦传递大数据 ? ](https://my.oschina.net/weharmony/blog/4952961) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113815355) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/33_消息队列篇.html)[>]()**
* [v31.xx (定时器篇) | 内核最高优先级任务是谁? ](https://my.oschina.net/weharmony/blog/4951625) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113774260) [ | harmony ](https://weharmony.gitee.io/31_定时器机制篇.html)[>]()** * [v32.xx (CPU篇) | 内核是如何描述CPU的? ](https://my.oschina.net/weharmony/blog/4952034) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113782749) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/32_CPU篇.html)[>]()**
* [v30.xx (事件控制篇) | 任务间多对多的同步方案 ](https://my.oschina.net/weharmony/blog/4950956) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113759481) [ | harmony ](https://weharmony.gitee.io/30_事件控制篇.html)[>]()** * [v31.xx (定时器篇) | 内核最高优先级任务是谁? ](https://my.oschina.net/weharmony/blog/4951625) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113774260) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/31_定时器机制篇.html)[>]()**
* [v29.xx (信号量篇) | 信号量解决任务同步问题 ](https://my.oschina.net/weharmony/blog/4949720) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113744267) [ | harmony ](https://weharmony.gitee.io/29_信号量篇.html)[>]()** * [v30.xx (事件控制篇) | 任务间多对多的同步方案 ](https://my.oschina.net/weharmony/blog/4950956) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113759481) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/30_事件控制篇.html)[>]()**
* [v28.xx (进程通讯篇) | 进程间通讯有哪九大方式? ](https://my.oschina.net/weharmony/blog/4947398) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113700751) [ | harmony ](https://weharmony.gitee.io/28_进程通讯篇.html)[>]()** * [v29.xx (信号量篇) | 信号量解决任务同步问题 ](https://my.oschina.net/weharmony/blog/4949720) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113744267) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/29_信号量篇.html)[>]()**
* [v27.xx (互斥锁篇) | 互斥锁比自旋锁可丰满许多 ](https://my.oschina.net/weharmony/blog/4945465) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113660357) [ | harmony ](https://weharmony.gitee.io/27_互斥锁篇.html)[>]()** * [v28.xx (进程通讯篇) | 进程间通讯有哪九大方式? ](https://my.oschina.net/weharmony/blog/4947398) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113700751) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/28_进程通讯篇.html)[>]()**
* [v26.xx (自旋锁篇) | 真的好想为自旋锁立贞节牌坊! ](https://my.oschina.net/weharmony/blog/4944129) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113616250) [ | harmony ](https://weharmony.gitee.io/26_自旋锁篇.html)[>]()** * [v27.xx (互斥锁篇) | 互斥锁比自旋锁可丰满许多 ](https://my.oschina.net/weharmony/blog/4945465) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113660357) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/27_互斥锁篇.html)[>]()**
* [v25.xx (并发并行篇) | 怎么记住并发并行的区别? ](https://my.oschina.net/u/3751245/blog/4940329) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113516222) [ | harmony ](https://weharmony.gitee.io/25_并发并行篇.html)[>]()** * [v26.xx (自旋锁篇) | 真的好想为自旋锁立贞节牌坊! ](https://my.oschina.net/weharmony/blog/4944129) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113616250) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/26_自旋锁篇.html)[>]()**
* [v24.xx (进程概念篇) | 进程在管理哪些资源? ](https://my.oschina.net/u/3751245/blog/4937521) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113395872) [ | harmony ](https://weharmony.gitee.io/24_进程概念篇.html)[>]()** * [v25.xx (并发并行篇) | 怎么记住并发并行的区别? ](https://my.oschina.net/u/3751245/blog/4940329) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113516222) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/25_并发并行篇.html)[>]()**
* [v23.xx (汇编传参篇) | 汇编如何传递复杂的参数? ](https://my.oschina.net/u/3751245/blog/4927892) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113265990) [ | harmony ](https://weharmony.gitee.io/23_汇编传参篇.html)[>]()** * [v24.xx (进程概念篇) | 进程在管理哪些资源? ](https://my.oschina.net/u/3751245/blog/4937521) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113395872) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/24_进程概念篇.html)[>]()**
* [v22.xx (汇编基础篇) | CPU在哪里打卡上班? ](https://my.oschina.net/u/3751245/blog/4920361) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/112986628) [ | harmony ](https://weharmony.gitee.io/22_汇编基础篇.html)[>]()** * [v23.xx (汇编传参篇) | 汇编如何传递复杂的参数? ](https://my.oschina.net/u/3751245/blog/4927892) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/113265990) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/23_汇编传参篇.html)[>]()**
* [v21.xx (线程概念篇) | 是谁在不断的折腾CPU? ](https://my.oschina.net/u/3751245/blog/4915543) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/112870193) [ | harmony ](https://weharmony.gitee.io/21_线程概念篇.html)[>]()** * [v22.xx (汇编基础篇) | CPU在哪里打卡上班? ](https://my.oschina.net/u/3751245/blog/4920361) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/112986628) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/22_汇编基础篇.html)[>]()**
* [v20.xx (用栈方式篇) | 栈是构建底层运行的基础 ](https://my.oschina.net/u/3751245/blog/4893388) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/112534331) [ | harmony ](https://weharmony.gitee.io/20_用栈方式篇.html)[>]()** * [v21.xx (线程概念篇) | 是谁在不断的折腾CPU? ](https://my.oschina.net/u/3751245/blog/4915543) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/112870193) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/21_线程概念篇.html)[>]()**
* [v19.xx (位图管理篇) | 为何进程和线程优先级都是32个? ](https://my.oschina.net/u/3751245/blog/4888467) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/112394982) [ | harmony ](https://weharmony.gitee.io/19_位图管理篇.html)[>]()** * [v20.xx (用栈方式篇) | 栈是构建底层运行的基础 ](https://my.oschina.net/u/3751245/blog/4893388) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/112534331) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/20_用栈方式篇.html)[>]()**
* [v18.xx (源码结构篇) | 内核500问你能答对多少? ](https://my.oschina.net/u/3751245/blog/4869137) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/111938348) [ | harmony ](https://weharmony.gitee.io/18_源码结构篇.html)[>]()** * [v19.xx (位图管理篇) | 为何进程和线程优先级都是32个? ](https://my.oschina.net/u/3751245/blog/4888467) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/112394982) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/19_位图管理篇.html)[>]()**
* [v17.xx (物理内存篇) | 这样记伙伴算法永远不会忘 ](https://my.oschina.net/u/3751245/blog/4842408) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/111765600) [ | harmony ](https://weharmony.gitee.io/17_物理内存篇.html)[>]()** * [v18.xx (源码结构篇) | 内核500问你能答对多少? ](https://my.oschina.net/u/3751245/blog/4869137) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/111938348) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/18_源码结构篇.html)[>]()**
* [v16.xx (内存规则篇) | 内存管理到底在管什么? ](https://my.oschina.net/u/3751245/blog/4698384) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/109437223) [ | harmony ](https://weharmony.gitee.io/16_内存规则篇.html)[>]()** * [v17.xx (物理内存篇) | 这样记伙伴算法永远不会忘 ](https://my.oschina.net/u/3751245/blog/4842408) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/111765600) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/17_物理内存篇.html)[>]()**
* [v15.xx (内存映射篇) | 什么是内存最重要的实现基础 ? ](https://my.oschina.net/u/3751245/blog/4694841) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/109032636) [ | harmony ](https://weharmony.gitee.io/15_内存映射篇.html)[>]()** * [v16.xx (内存规则篇) | 内存管理到底在管什么? ](https://my.oschina.net/u/3751245/blog/4698384) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/109437223) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/16_内存规则篇.html)[>]()**
* [v14.xx (内存汇编篇) | 什么是虚拟内存的实现基础? ](https://my.oschina.net/u/3751245/blog/4692156) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108994081) [ | harmony ](https://weharmony.gitee.io/14_内存汇编篇.html)[>]()** * [v15.xx (内存映射篇) | 什么是内存最重要的实现基础 ? ](https://my.oschina.net/u/3751245/blog/4694841) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/109032636) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/15_内存映射篇.html)[>]()**
* [v13.xx (源码注释篇) | 热爱是所有的理由和答案 ](https://my.oschina.net/u/3751245/blog/4686747) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/109251754) [ | harmony ](https://weharmony.gitee.io/13_源码注释篇.html)[>]()** * [v14.xx (内存汇编篇) | 什么是虚拟内存的实现基础? ](https://my.oschina.net/u/3751245/blog/4692156) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108994081) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/14_内存汇编篇.html)[>]()**
* [v12.xx (内存管理篇) | 虚拟内存全景图是怎样的? ](https://my.oschina.net/u/3751245/blog/4652284) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108821442) [ | harmony ](https://weharmony.gitee.io/12_内存管理篇.html)[>]()** * [v13.xx (源码注释篇) | 热爱是所有的理由和答案 ](https://my.oschina.net/u/3751245/blog/4686747) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/109251754) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/13_源码注释篇.html)[>]()**
* [v11.xx (内存分配篇) | 内存有哪些分配方式? ](https://my.oschina.net/u/3751245/blog/4646802) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108989906) [ | harmony ](https://weharmony.gitee.io/11_内存分配篇.html)[>]()** * [v12.xx (内存管理篇) | 虚拟内存全景图是怎样的? ](https://my.oschina.net/u/3751245/blog/4652284) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108821442) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/12_内存管理篇.html)[>]()**
* [v10.xx (内存主奴篇) | 紫禁城的主子和奴才如何相处? ](https://my.oschina.net/u/3751245/blog/4646802) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108723672) [ | harmony ](https://weharmony.gitee.io/10_内存主奴篇.html)[>]()** * [v11.xx (内存分配篇) | 内存有哪些分配方式? ](https://my.oschina.net/u/3751245/blog/4646802) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108989906) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/11_内存分配篇.html)[>]()**
* [v09.xx (调度故事篇) | 用故事说内核调度 ](https://my.oschina.net/u/3751245/blog/4634668) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108745174) [ | harmony ](https://weharmony.gitee.io/09_调度故事篇.html)[>]()** * [v10.xx (内存主奴篇) | 紫禁城的主子和奴才如何相处? ](https://my.oschina.net/u/3751245/blog/4646802) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108723672) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/10_内存主奴篇.html)[>]()**
* [v08.xx (总目录) | 百万汉字注解 百篇博客分析 ](https://my.oschina.net/weharmony) **[<]()[ csdn](https://blog.csdn.net/kuangyufei) [ | harmony ](https://weharmony.gitee.io/08_总目录.html)[>]()** * [v09.xx (调度故事篇) | 用故事说内核调度 ](https://my.oschina.net/u/3751245/blog/4634668) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108745174) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/09_调度故事篇.html)[>]()**
* [v07.xx (调度机制篇) | 任务是如何被调度执行的? ](https://my.oschina.net/u/3751245/blog/4623040) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108705968) [ | harmony ](https://weharmony.gitee.io/07_调度机制篇.html)[>]()** * [v08.xx (总目录) | 百万汉字注解 百篇博客分析 ](https://my.oschina.net/weharmony) **[<]()[ csdn](https://blog.csdn.net/kuangyufei) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/08_总目录.html)[>]()**
* [v06.xx (调度队列篇) | 就绪队列对调度的作用 ](https://my.oschina.net/u/3751245/blog/4606916) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108626671) [ | harmony ](https://weharmony.gitee.io/06_调度队列篇.html)[>]()** * [v07.xx (调度机制篇) | 任务是如何被调度执行的? ](https://my.oschina.net/u/3751245/blog/4623040) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108705968) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/07_调度机制篇.html)[>]()**
* [v05.xx (任务管理篇) | 谁在让CPU忙忙碌碌? ](https://my.oschina.net/u/3751245/blog/4603919) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108661248) [ | harmony ](https://weharmony.gitee.io/05_任务管理篇.html)[>]()** * [v06.xx (调度队列篇) | 就绪队列对调度的作用 ](https://my.oschina.net/u/3751245/blog/4606916) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108626671) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/06_调度队列篇.html)[>]()**
* [v04.xx (任务调度篇) | 任务是内核调度的单元 ](https://my.oschina.net/weharmony/blog/4595539) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108621428) [ | harmony ](https://weharmony.gitee.io/04_任务调度篇.html)[>]()** * [v05.xx (任务管理篇) | 谁在让CPU忙忙碌碌? ](https://my.oschina.net/u/3751245/blog/4603919) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108661248) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/05_任务管理篇.html)[>]()**
* [v03.xx (时钟任务篇) | 触发调度最大的动力来自哪里? ](https://my.oschina.net/u/3751245/blog/4574493) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108603468) [ | harmony ](https://weharmony.gitee.io/03_时钟任务篇.html)[>]()** * [v04.xx (任务调度篇) | 任务是内核调度的单元 ](https://my.oschina.net/weharmony/blog/4595539) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108621428) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/04_任务调度篇.html)[>]()**
* [v02.xx (进程管理篇) | 进程是内核资源管理单元 ](https://my.oschina.net/u/3751245/blog/4574429) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108595941) [ | harmony ](https://weharmony.gitee.io/02_进程管理篇.html)[>]()** * [v03.xx (时钟任务篇) | 触发调度最大的动力来自哪里? ](https://my.oschina.net/u/3751245/blog/4574493) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108603468) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/03_时钟任务篇.html)[>]()**
* [v01.xx (双向链表篇) | 谁是内核最重要结构体? ](https://my.oschina.net/u/3751245/blog/4572304) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108585659) [ | harmony ](https://weharmony.gitee.io/01_双向链表篇.html)[>]()** * [v02.xx (进程管理篇) | 进程是内核资源管理单元 ](https://my.oschina.net/u/3751245/blog/4574429) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108595941) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/02_进程管理篇.html)[>]()**
* [v01.xx (双向链表篇) | 谁是内核最重要结构体? ](https://my.oschina.net/u/3751245/blog/4572304) **[<]()[ csdn](https://blog.csdn.net/kuangyufei/article/details/108585659) [ | 51cto ](https://harmonyos.51cto.com/column/34)[ | harmony ](https://weharmony.gitee.io/01_双向链表篇.html)[>]()**
### **主流站点**
### 主流站点
感谢 `oschina``csdn``华为开发者论坛`, `51cto`, `掘金`,`电子发烧友`,以及其他小伙伴对系列文章的转载和推荐,无以为报,唯有不断的深挖内核地基,输出更多内容,错漏之处请多见谅,会持续完善源码注解和文档内容,精雕细琢,尽全力打磨精品内容。 感谢 `oschina``csdn``华为开发者论坛`, `51cto`, `掘金`,`电子发烧友`,以及其他小伙伴对系列文章的转载和推荐,无以为报,唯有不断的深挖内核地基,输出更多内容,错漏之处请多见谅,会持续完善源码注解和文档内容,精雕细琢,尽全力打磨精品内容。
**文章输出站点:** ### 文章输出站点
* **[oschina ](https://my.oschina.net/weharmony)** [oschina |](https://my.oschina.net/weharmony)[ csdn |](https://blog.csdn.net/kuangyufei)[ 51cto |](https://harmonyos.51cto.com/column/34)[ 简书 |](https://www.jianshu.com/u/f7f5bf861106)[ 掘金 |](https://harmonyos.51cto.com/column/34)[ 华为开发者论坛 |](https://developer.huawei.com/consumer/cn/forum/)[ 头条号 |](https://gitee.com/weharmony/docs/raw/master/pic/other/tt.png)[ 公众号 |](https://gitee.com/weharmony/docs/raw/master/pic/other/so1so.png)[ weharmony.gitee.io |](https://weharmony.gitee.io)[ weharmony.github.io |](https://weharmony.github.io)
* **[csdn ](https://blog.csdn.net/kuangyufei)**
* **[51cto](https://harmonyos.51cto.com/column/34)**
* **[掘金](https://harmonyos.51cto.com/column/34)**
* **[华为开发者论坛](https://developer.huawei.com/consumer/cn/forum/)**
* **[头条号](https://gitee.com/weharmony/docs/raw/master/pic/other/tt.png)**
* **[公众号](https://gitee.com/weharmony/docs/raw/master/pic/other/so1so.png)**
* **[weharmony.gitee.io](https://weharmony.gitee.io)**
* **[weharmony.github.io](https://weharmony.github.io)**
## **Fork Me** ## **Fork Me**
...@@ -201,6 +195,8 @@ ...@@ -201,6 +195,8 @@
### 喜欢请「点赞+关注+收藏」 ### 喜欢请「点赞+关注+收藏」
* [关注「鸿蒙内核源码分析」公众号,百万汉字注解 + 百篇博客分析 => 深挖鸿蒙内核源码](https://gitee.com/weharmony/docs/raw/master/pic/other/so1so.png) * [关注「鸿蒙内核源码分析」公众号](https://gitee.com/weharmony/docs/raw/master/pic/other/so1so.png)
* 各大站点搜 **「鸿蒙内核源码分析」**.欢迎转载,请注明出处.
* 各大站点搜 **「鸿蒙内核源码分析」** .欢迎转载,请注明出处. * [进入 >> oschina ](https://my.oschina.net/weharmony)[| csdn ](https://blog.csdn.net/kuangyufei)[| 51cto ](https://harmonyos.51cto.com/column/34)[| 简书 ](https://www.jianshu.com/u/f7f5bf861106)[| 掘金 ](https://juejin.cn/user/756888642000808)[| harmony ](https://weharmony.gitee.io/)
\ No newline at end of file \ No newline at end of file
...@@ -540,7 +540,7 @@ STATIC VOID OsUserExcHandle(ExcContext *excBufAddr) ...@@ -540,7 +540,7 @@ STATIC VOID OsUserExcHandle(ExcContext *excBufAddr)
UINT32 currCpu = ArchCurrCpuid(); UINT32 currCpu = ArchCurrCpuid();
LosProcessCB *runProcess = OsCurrProcessGet(); LosProcessCB *runProcess = OsCurrProcessGet();
if (g_excFromUserMode[ArchCurrCpuid()] == FALSE) {//内核态直接退出,8处理了. if (g_excFromUserMode[ArchCurrCpuid()] == FALSE) {//内核态直接退出,处理了.
return; return;
} }
...@@ -572,7 +572,7 @@ STATIC VOID OsUserExcHandle(ExcContext *excBufAddr) ...@@ -572,7 +572,7 @@ STATIC VOID OsUserExcHandle(ExcContext *excBufAddr)
#endif #endif
OsProcessExitCodeSignalSet(runProcess, SIGUSR2); OsProcessExitCodeSignalSet(runProcess, SIGUSR2);
/* kill user exc process */ /* kill user exc process */
LOS_Exit(OS_PRO_EXIT_OK); LOS_Exit(OS_PRO_EXIT_OK);//进程退出
/* User mode exception handling failed , which normally does not exist */ //用户态的异常处理失败,通常情况下不会发生 /* User mode exception handling failed , which normally does not exist */ //用户态的异常处理失败,通常情况下不会发生
g_curNestCount[currCpu]++; g_curNestCount[currCpu]++;
......
...@@ -420,7 +420,7 @@ LITE_OS_SEC_TEXT STATIC VOID OsRecycleZombiesProcess(LosProcessCB *childCB, Proc ...@@ -420,7 +420,7 @@ LITE_OS_SEC_TEXT STATIC VOID OsRecycleZombiesProcess(LosProcessCB *childCB, Proc
OsInsertPCBToFreeList(childCB);//直接插到freeList中去,可用于重新分配了。 OsInsertPCBToFreeList(childCB);//直接插到freeList中去,可用于重新分配了。
} }
} }
//当一个进程自然退出的时候,它的孩子进程要怎么处理 //当一个进程自然退出的时候,它的孩子进程由两位老祖宗收养
STATIC VOID OsDealAliveChildProcess(LosProcessCB *processCB) STATIC VOID OsDealAliveChildProcess(LosProcessCB *processCB)
{ {
UINT32 parentID; UINT32 parentID;
...@@ -430,25 +430,25 @@ STATIC VOID OsDealAliveChildProcess(LosProcessCB *processCB) ...@@ -430,25 +430,25 @@ STATIC VOID OsDealAliveChildProcess(LosProcessCB *processCB)
LOS_DL_LIST *childHead = NULL; LOS_DL_LIST *childHead = NULL;
if (!LOS_ListEmpty(&processCB->childrenList)) {//如果存在孩子进程 if (!LOS_ListEmpty(&processCB->childrenList)) {//如果存在孩子进程
childHead = processCB->childrenList.pstNext; childHead = processCB->childrenList.pstNext;//获取孩子链表
LOS_ListDelete(&(processCB->childrenList)); LOS_ListDelete(&(processCB->childrenList));//清空自己的孩子链表
if (OsProcessIsUserMode(processCB)) {//是用户态进程 if (OsProcessIsUserMode(processCB)) {//是用户态进程
parentID = g_userInitProcess;//指定1号进程父ID parentID = g_userInitProcess;//用户态进程老祖宗
} else { } else {
parentID = g_kernelInitProcess;//指定2号进程为父ID parentID = g_kernelInitProcess;//内核态进程老祖宗
} }
for (nextList = childHead; ;) { for (nextList = childHead; ;) {//遍历孩子链表
childCB = OS_PCB_FROM_SIBLIST(nextList); childCB = OS_PCB_FROM_SIBLIST(nextList);//找到孩子的真身
childCB->parentProcessID = parentID; childCB->parentProcessID = parentID;//孩子磕头认老祖宗为爸爸
nextList = nextList->pstNext; nextList = nextList->pstNext;//找下一个孩子进程
if (nextList == childHead) { if (nextList == childHead) {//一圈下来,孩子们都磕完头了
break; break;
} }
} }
parentCB = OS_PCB_FROM_PID(parentID); parentCB = OS_PCB_FROM_PID(parentID);//找个老祖宗的真身
LOS_ListTailInsertList(&parentCB->childrenList, childHead); LOS_ListTailInsertList(&parentCB->childrenList, childHead);//挂到老祖宗的孩子链表上
} }
return; return;
...@@ -1275,11 +1275,11 @@ STATIC UINT32 OsWaitOptionsCheck(UINT32 options) ...@@ -1275,11 +1275,11 @@ STATIC UINT32 OsWaitOptionsCheck(UINT32 options)
UINT32 flag = LOS_WAIT_WNOHANG | LOS_WAIT_WUNTRACED | LOS_WAIT_WCONTINUED; UINT32 flag = LOS_WAIT_WNOHANG | LOS_WAIT_WUNTRACED | LOS_WAIT_WCONTINUED;
flag = ~flag & options; flag = ~flag & options;
if (flag != 0) { if (flag != 0) {//三种方式中一种都没有
return LOS_EINVAL;//无效参数 return LOS_EINVAL;//无效参数
} }
if ((options & (LOS_WAIT_WCONTINUED | LOS_WAIT_WUNTRACED)) != 0) { if ((options & (LOS_WAIT_WCONTINUED | LOS_WAIT_WUNTRACED)) != 0) {//暂不支持这两种方式.
return LOS_EOPNOTSUPP;//不支持 return LOS_EOPNOTSUPP;//不支持
} }
...@@ -1299,7 +1299,7 @@ LITE_OS_SEC_TEXT INT32 LOS_Wait(INT32 pid, USER INT32 *status, UINT32 options, V ...@@ -1299,7 +1299,7 @@ LITE_OS_SEC_TEXT INT32 LOS_Wait(INT32 pid, USER INT32 *status, UINT32 options, V
LosProcessCB *processCB = NULL; LosProcessCB *processCB = NULL;
LosTaskCB *runTask = NULL; LosTaskCB *runTask = NULL;
ret = OsWaitOptionsCheck(options);//参数检查 只支持 LOS_WAIT_WNOHANG | LOS_WAIT_WUNTRACED ret = OsWaitOptionsCheck(options);//参数检查,只支持LOS_WAIT_WNOHANG
if (ret != LOS_OK) { if (ret != LOS_OK) {
return -ret; return -ret;
} }
...@@ -1318,7 +1318,7 @@ LITE_OS_SEC_TEXT INT32 LOS_Wait(INT32 pid, USER INT32 *status, UINT32 options, V ...@@ -1318,7 +1318,7 @@ LITE_OS_SEC_TEXT INT32 LOS_Wait(INT32 pid, USER INT32 *status, UINT32 options, V
return OsWaitRecycleChildPorcess(childCB, intSave, status);//回收进程 return OsWaitRecycleChildPorcess(childCB, intSave, status);//回收进程
} }
//没有找到,看是否要返回还是去做个登记 //没有找到,看是否要返回还是去做个登记
if ((options & LOS_WAIT_WNOHANG) != 0) {//不登记的方式,立即返回 if ((options & LOS_WAIT_WNOHANG) != 0) {//有LOS_WAIT_WNOHANG标签
runTask->waitFlag = 0;//等待标识置0 runTask->waitFlag = 0;//等待标识置0
pid = 0;//这里置0,是为了 return 0 pid = 0;//这里置0,是为了 return 0
goto ERROR; goto ERROR;
......
...@@ -1140,7 +1140,7 @@ STATIC INLINE VOID OsTaskReleaseHoldLock(LosProcessCB *processCB, LosTaskCB *tas ...@@ -1140,7 +1140,7 @@ STATIC INLINE VOID OsTaskReleaseHoldLock(LosProcessCB *processCB, LosTaskCB *tas
OsTaskSyncWake(taskCB);//同步唤醒任务 OsTaskSyncWake(taskCB);//同步唤醒任务
} }
////删除一个正在运行的任务 //删除一个正在运行的任务
LITE_OS_SEC_TEXT VOID OsRunTaskToDelete(LosTaskCB *taskCB) LITE_OS_SEC_TEXT VOID OsRunTaskToDelete(LosTaskCB *taskCB)
{ {
LosProcessCB *processCB = OS_PCB_FROM_PID(taskCB->processID);//拿到task所属进程 LosProcessCB *processCB = OS_PCB_FROM_PID(taskCB->processID);//拿到task所属进程
......
...@@ -338,18 +338,18 @@ STATIC INLINE BOOL OsProcessIsUserMode(const LosProcessCB *processCB)//用户模 ...@@ -338,18 +338,18 @@ STATIC INLINE BOOL OsProcessIsUserMode(const LosProcessCB *processCB)//用户模
* 31 15 8 7 0 * 31 15 8 7 0
* | | exit code | core dump | signal | * | | exit code | core dump | signal |
*/ */
#define OS_PRO_EXIT_OK 0 //进程退出 #define OS_PRO_EXIT_OK 0 //进程正常退出
//以下函数都是进程的退出方式 //置进程退出码第七位为1
STATIC INLINE VOID OsProcessExitCodeCoreDumpSet(LosProcessCB *processCB) STATIC INLINE VOID OsProcessExitCodeCoreDumpSet(LosProcessCB *processCB)
{ {
processCB->exitCode |= 0x80U;// 0b10000000 对应退出码为看 processCB->exitCode |= 0x80U;// 0b10000000
} }
//设置进程退出信号(0 ~ 7)
STATIC INLINE VOID OsProcessExitCodeSignalSet(LosProcessCB *processCB, UINT32 signal) STATIC INLINE VOID OsProcessExitCodeSignalSet(LosProcessCB *processCB, UINT32 signal)
{ {
processCB->exitCode |= signal & 0x7FU;//0b01111111 processCB->exitCode |= signal & 0x7FU;//0b01111111
} }
//清除进程退出信号(0 ~ 7)
STATIC INLINE VOID OsProcessExitCodeSignalClear(LosProcessCB *processCB) STATIC INLINE VOID OsProcessExitCodeSignalClear(LosProcessCB *processCB)
{ {
processCB->exitCode &= (~0x7FU);//低7位全部清0 processCB->exitCode &= (~0x7FU);//低7位全部清0
...@@ -359,8 +359,8 @@ STATIC INLINE BOOL OsProcessExitCodeSignalIsSet(LosProcessCB *processCB) ...@@ -359,8 +359,8 @@ STATIC INLINE BOOL OsProcessExitCodeSignalIsSet(LosProcessCB *processCB)
{ {
return (processCB->exitCode) & 0x7FU; return (processCB->exitCode) & 0x7FU;
} }
//设置进程退出号(8 ~ 15)
STATIC INLINE VOID OsProcessExitCodeSet(LosProcessCB *processCB, UINT32 code)//由外界提供退出码 STATIC INLINE VOID OsProcessExitCodeSet(LosProcessCB *processCB, UINT32 code)
{ {
processCB->exitCode |= ((code & 0x000000FFU) << 8U) & 0x0000FF00U; /* 8: Move 8 bits to the left, exitCode */ processCB->exitCode |= ((code & 0x000000FFU) << 8U) & 0x0000FF00U; /* 8: Move 8 bits to the left, exitCode */
} }
...@@ -426,14 +426,14 @@ STATIC INLINE User *OsCurrUserGet(VOID)//获取当前进程的所属用户 ...@@ -426,14 +426,14 @@ STATIC INLINE User *OsCurrUserGet(VOID)//获取当前进程的所属用户
/* /*
* return immediately if no child has exited. * return immediately if no child has exited.
*/ */
#define LOS_WAIT_WNOHANG (1 << 0U) //如果没有孩子退出,请立即返回 no hang #define LOS_WAIT_WNOHANG (1 << 0U) //如果没有孩子进程退出,则立即返回,而不是阻塞在这个函数上等待;如果结束了,则返回该子进程的进程号。
/* /*
* return if a child has stopped (but not traced via ptrace(2)). * return if a child has stopped (but not traced via ptrace(2)).
* Status for traced children which have stopped is provided even * Status for traced children which have stopped is provided even
* if this option is not specified. * if this option is not specified.
*/ */
#define LOS_WAIT_WUNTRACED (1 << 1U) //如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。untraced #define LOS_WAIT_WUNTRACED (1 << 1U) //如果子进程进入暂停情况则马上返回,不予以理会结束状态。untraced
/* /*
* return if a stopped child has been resumed by delivery of SIGCONT. * return if a stopped child has been resumed by delivery of SIGCONT.
......
...@@ -608,7 +608,7 @@ void OsSaveSignalContext(unsigned int *sp) ...@@ -608,7 +608,7 @@ void OsSaveSignalContext(unsigned int *sp)
/* One pthread do the share signal */ /* One pthread do the share signal */
sigcb->sigFlag |= process->sigShare;//记录由一个线程执行可进程的共享信号,这些恢复上下文时就找到对应的任务 sigcb->sigFlag |= process->sigShare;//记录由一个线程执行可进程的共享信号,这些恢复上下文时就找到对应的任务
unsigned int signo = (unsigned int)FindFirstSetedBit(sigcb->sigFlag) + 1; unsigned int signo = (unsigned int)FindFirstSetedBit(sigcb->sigFlag) + 1;
OsProcessExitCodeSignalSet(process, signo); OsProcessExitCodeSignalSet(process, signo);//设置进程退出信号
sigcb->context.CPSR = cpsr; //保存当前各寄存器的信息 sigcb->context.CPSR = cpsr; //保存当前各寄存器的信息
sigcb->context.PC = sp[REG_PC]; //获取被打断现场寄存器的值 sigcb->context.PC = sp[REG_PC]; //获取被打断现场寄存器的值
sigcb->context.USP = sp[REG_SP]; sigcb->context.USP = sp[REG_SP];
......
...@@ -308,7 +308,7 @@ int SysSchedRRGetInterval(int pid, struct timespec *tp) ...@@ -308,7 +308,7 @@ int SysSchedRRGetInterval(int pid, struct timespec *tp)
return 0; return 0;
} }
//阻塞参数进程 //等待子进程结束
int SysWait(int pid, USER int *status, int options, void *rusage) int SysWait(int pid, USER int *status, int options, void *rusage)
{ {
(void)rusage; (void)rusage;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册