鸿蒙内核源码分析(信号量篇) | 信号量解决任务同步问题

    搜索 @note_pic 可查看绘制的全部字符图
    搜索 @note_why 是尚未看明白的地方,有看明白的,请Pull Request完善
    搜索 @note_thinking 是一些的思考和建议
    搜索 @note_#if0 是由第三方项目提供不在内核源码中定义的极为重要结构体,为方便理解而添加的。
    搜索 @note_good 是给源码点赞的地方
上级 6200b04a
[![在这里插入图片描述](https://gitee.com/weharmony/docs/raw/master/pic/other/io.png)](https://weharmony.gitee.io)
鸿蒙内核源码中文注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆, 四大源码仓每日同步更新[< 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)
百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新[< 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)
鸿蒙内核源码分析博客 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点每日同步更新[< OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| WeHarmony >](https://weharmony.gitee.io/)
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,多站点每日同步更新[< OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| WeHarmony >](https://weharmony.gitee.io/)
---
## **为何要精读内核源码?**
每个码农,学职生涯,都应精读一遍内核源码.是浇筑计算机知识大厦的地基工程,地基纵深坚固程度,决定了大厦能盖多高。为何一定要精读?因为内核代码本身并不太多,都是浓缩的精华,精读就是让各个知识点高频出现,闪爆大脑,短时间内容易结成一张高浓度,高密度的底层网,形成永久大脑记忆。跟骑单车一样,一旦学会,即便多年不骑,照样跨上就走,游刃有余。
## **百万汉字注解**
**[kernel\_liteos\_a_note](https://gitee.com/weharmony/kernel_liteos_a_note)** 是在鸿蒙官方开源项目 **[kernel\_liteos\_a](https://gitee.com/openharmony/kernel_liteos_a)** 基础上给源码加上中文注解的版本,目前几大核心模块加注已基本完成, **整体加注完成70%**, 正持续加注完善中 ...
### **做了些什么呢?**
### **为何要精读内核源码?**
**[WeHarmony/kernel\_liteos\_a_note](https://gitee.com/weharmony/kernel_liteos_a_note)** 是在鸿蒙官方开源项目 **[OpenHarmony/kernel\_liteos\_a](https://gitee.com/openharmony/kernel_liteos_a)** 基础上给源码加上中文注解的版本,目前几大核心模块加注已基本完成, **整体加注完成70%**, 正持续加注完善中 ...
每个码农,学职生涯,都应精读一遍内核源码.是浇筑计算机知识大厦的地基工程,地基纵深坚固程度,决定了大厦能盖多高。为何一定要精读?因为内核代码本身并不太多,都是浓缩的精华,精读就是让各个知识点高频出现,闪爆大脑,短时间内容易结成一张高浓度,高密度的底层网,形成永久大脑记忆。跟骑单车一样,一旦学会,即便多年不骑,照样跨上就走,游刃有余。
### **2020/9/10**
......@@ -44,27 +45,13 @@
注者认为理解内核可分三个层级:
**第一: 普通概念映射级** 这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念.说别人能听得懂的话这很重要!!! 一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗? 不一定!,在系列篇中试图用
[鸿蒙内核源码分析(总目录)](https://my.oschina.net/u/3751245/blog/4626852)
必读故事篇去引导这一层级的认知,希望能卷入更多的人来关注基础软件,尤其是那些资本大鳄,加大对基础软件的投入.
**第二: 专业概念抽象级** 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用程序员,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它的现实认知.试图用
[鸿蒙内核源码分析(总目录)](https://my.oschina.net/u/3751245/blog/4626852)
去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱.
**第三: 具体微观代码级** 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计? **[鸿蒙内核源码注释中文版](https://gitee.com/weharmony/kernel_liteos_a_note)** 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望注释中文版能让更多爱好者快速的理解内核,共同进步.
### **主流站点**
感谢开源中国,CSDN,51CTO,电子发烧友,以及其他小伙伴通过自己的公众号对系列文章的转载和推荐,无以为报,唯有不断的深挖内核地基,输出更多文章,错漏之处请多见谅,会持续完善源码注解和文档内容,精雕细琢,尽全力打磨精品内容。以下是博客的输出站点
**第一: 普通概念映射级** 这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念.说别人能听得懂的话这很重要!!! 一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗? 不一定!,在系列篇中试图用 鸿蒙内核源码分析(总目录)[< OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| CSDN > ](https://blog.csdn.net/kuangyufei/article/details/108727970)故事篇去引导这一层级的认知,希望能卷入更多的人来关注基础软件,尤其是那些资本大鳄,加大对基础软件的投入.
**[CSDN |](https://blog.csdn.net/kuangyufei/article/details/108727970)** **[开源中国 |](https://my.oschina.net/u/3751245/blog/4626852)** **[51CTO |](https://harmonyos.51cto.com/column/34)** **[头条号 |](https://gitee.com/weharmony/docs/raw/master/pic/other/tt.png)** **[WeHarmony |](https://weharmony.gitee.io)** **[公众号](https://gitee.com/weharmony/docs/raw/master/pic/other/wxcode.png)**
**第二: 专业概念抽象级** 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用程序员,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它的现实认知.试图用 鸿蒙内核源码分析(总目录)[< OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| CSDN > ](https://blog.csdn.net/kuangyufei/article/details/108727970) 百篇博客去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱.
## **鸿蒙源码分析系列篇**
**第三: 具体微观代码级** 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计? **[鸿蒙内核源码注解分析](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)[| WeHarmony >](https://weharmony.gitee.io)
......@@ -94,9 +81,11 @@
### **进程通讯(IPC)**
(进程通讯篇) | 进程间有哪九种通讯方式 ? [< CSDN](https://blog.csdn.net/kuangyufei/article/details/113700751) [ | OSCHINA ](https://my.oschina.net/weharmony/blog/4947398)[| WeHarmony >](https://weharmony.gitee.io)
(信号量篇) | 信号量解决任务同步问题 [< CSDN](https://blog.csdn.net/kuangyufei/article/details/113744267) [ | OSCHINA ](https://my.oschina.net/weharmony/blog/4949720)[| WeHarmony >](https://weharmony.gitee.io)
(进程通讯篇) | 九大通讯方式一网打尽 [< CSDN](https://blog.csdn.net/kuangyufei/article/details/113700751) [ | OSCHINA ](https://my.oschina.net/weharmony/blog/4947398)[| WeHarmony >](https://weharmony.gitee.io)
(互斥锁篇) | 为何任务会因拥有锁而被迫改变优先级 ? [< CSDN](https://blog.csdn.net/kuangyufei/article/details/113660357) [ | OSCHINA ](https://my.oschina.net/weharmony/blog/4945465)[| WeHarmony >](https://weharmony.gitee.io)
(互斥锁篇) | 互斥锁比自旋锁丰满许多 [< CSDN](https://blog.csdn.net/kuangyufei/article/details/113660357) [ | OSCHINA ](https://my.oschina.net/weharmony/blog/4945465)[| WeHarmony >](https://weharmony.gitee.io)
(自旋锁篇) | 汇编到令人心碎的自旋锁 [< CSDN](https://blog.csdn.net/kuangyufei/article/details/113616250) [ | OSCHINA ](https://my.oschina.net/weharmony/blog/4944129)[| WeHarmony >](https://weharmony.gitee.io)
......@@ -107,7 +96,7 @@
(内存规则篇) | 内存管理到底在管什么?[< CSDN](https://blog.csdn.net/kuangyufei/article/details/109437223) [ | OSCHINA ](https://my.oschina.net/u/3751245/blog/4698384)[| WeHarmony >](https://weharmony.gitee.io)
(内存映射篇) | 虚实内存是如何映射的?[< CSDN](https://blog.csdn.net/kuangyufei/article/details/109032636) [ | OSCHINA ](https://my.oschina.net/u/3751245/blog/4694841)[| WeHarmony >](https://weharmony.gitee.io)
(内存映射篇) | 什么是内存最重要的实现基础 ?[< CSDN](https://blog.csdn.net/kuangyufei/article/details/109032636) [ | OSCHINA ](https://my.oschina.net/u/3751245/blog/4694841)[| WeHarmony >](https://weharmony.gitee.io)
(内存汇编篇) | 什么是虚拟内存的实现基础?[< CSDN](https://blog.csdn.net/kuangyufei/article/details/108994081) [ | OSCHINA ](https://my.oschina.net/u/3751245/blog/4692156)[| WeHarmony >](https://weharmony.gitee.io)
......@@ -133,8 +122,13 @@
(双向链表篇) | 谁是内核最重要结构体?[< CSDN](https://blog.csdn.net/kuangyufei/article/details/108585659) [ | OSCHINA ](https://my.oschina.net/u/3751245/blog/4572304)[| WeHarmony >](https://weharmony.gitee.io)
### **主流站点**
感谢 OSCHINA,CSDN,华为开发者论坛, 51CTO, 电子发烧友,以及其他小伙伴通过自己的公众号对系列文章的转载和推荐,无以为报,唯有不断的深挖内核地基,输出更多文章,错漏之处请多见谅,会持续完善源码注解和文档内容,精雕细琢,尽全力打磨精品内容。文章输出站点:
**[CSDN |](https://blog.csdn.net/kuangyufei/article/details/108727970)** **[开源中国 |](https://my.oschina.net/u/3751245/blog/4626852)** **[51CTO |](https://harmonyos.51cto.com/column/34)** **[头条号 |](https://gitee.com/weharmony/docs/raw/master/pic/other/tt.png)** **[WeHarmony |](https://weharmony.gitee.io)** **[公众号](https://gitee.com/weharmony/docs/raw/master/pic/other/wxcode.png)**
### **Fork Me**
## **Fork Me**
注解几乎占用了所有的空闲时间,每天都会更新,每天都有新感悟,一行行源码在不断的刷新和拓展对内核知识的认知边界. 对已经关注和fork的同学请及时同步最新的注解内容. 内核知识点体量实在太过巨大,过程会反复修正完善,力求言简意赅,词达本意.肯定会有诸多错漏之处,请多包涵. :)
......@@ -168,6 +162,6 @@
---
鸿蒙内核源码中文注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆, 四大源码仓每日同步更新[< 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)
百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新[< 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)
鸿蒙内核源码分析博客 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点每日同步更新[< OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| WeHarmony >](https://weharmony.gitee.io/)
\ No newline at end of file
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,多站点每日同步更新[< OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852)[| CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970)[| WeHarmony >](https://weharmony.gitee.io/)
\ No newline at end of file
......@@ -157,7 +157,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsSemCreate(UINT16 count, UINT16 maxCount, UINT32 *
OS_GOTO_ERR_HANDLER(LOS_ERRNO_SEM_OVERFLOW);
}
SCHEDULER_LOCK(intSave);//进入临界区,拿自旋锁
SCHEDULER_LOCK(intSave);//进入临界区,拿自旋锁
if (LOS_ListEmpty(&g_unusedSemList)) {//没有可分配的空闲信号提供
SCHEDULER_UNLOCK(intSave);
......@@ -165,7 +165,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 OsSemCreate(UINT16 count, UINT16 maxCount, UINT32 *
OS_GOTO_ERR_HANDLER(LOS_ERRNO_SEM_ALL_BUSY);
}
unusedSem = LOS_DL_LIST_FIRST(&g_unusedSemList);//拿第一个出来创建
unusedSem = LOS_DL_LIST_FIRST(&g_unusedSemList);//从未使用信号量池中取首个
LOS_ListDelete(unusedSem);//从空闲链表上摘除
semCreated = GET_SEM_LIST(unusedSem);//通过semList挂到链表上的,这里也要通过它把LosSemCB头查到. 进程,线程等结构体也都是这么干的.
semCreated->semCount = count;//设置数量
......@@ -230,7 +230,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_SemDelete(UINT32 semHandle)
ERR_HANDLER:
OS_RETURN_ERROR_P2(errLine, errNo);
}
//对外接口 等待信号
//对外接口 等待信号
LITE_OS_SEC_TEXT UINT32 LOS_SemPend(UINT32 semHandle, UINT32 timeout)
{
UINT32 intSave;
......@@ -324,7 +324,7 @@ LITE_OS_SEC_TEXT UINT32 OsSemPostUnsafe(UINT32 semHandle, BOOL *needSched)
return LOS_OK;
}
//对外接口 释放信号
//对外接口 释放信号
LITE_OS_SEC_TEXT UINT32 LOS_SemPost(UINT32 semHandle)
{
UINT32 intSave;
......
git add -A
git commit -m '鸿蒙内核源码分析(进程通讯篇) | 进程间有哪九种通讯方式 ?
git commit -m '鸿蒙内核源码分析(信号量篇) | 信号量解决任务同步问题
搜索 @note_pic 可查看绘制的全部字符图
搜索 @note_why 是尚未看明白的地方,有看明白的,请Pull Request完善
搜索 @note_thinking 是一些的思考和建议
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册