diff --git a/README.md b/README.md index 276e55b5b9f1f2eba4f92399adf9a5fc5af96975..e809be47b216950bb8776283d4ff90dd952b3d49 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ ### **鸿蒙源码百篇博客 往期回顾** -* [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)[>]()** +* [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)[>]()** * [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)[>]()** @@ -92,7 +92,7 @@ * [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)[>]()** -* [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)[>]()** +* [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)[>]()** * [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)[>]()** @@ -112,15 +112,15 @@ * [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)[>]()** -* [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)[>]()** +* [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)[>]()** -* [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)[>]()** +* [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)[>]()** * [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)[>]()** * [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)[>]()** -* [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)[>]()** +* [v18.xx (源码结构篇) | 梳理内核源文件的作用和含义 ](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)[>]()** * [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)[>]()** @@ -138,19 +138,19 @@ * [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)[>]()** -* [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)[>]()** +* [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)[>]()** * [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)[>]()** * [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)[>]()** -* [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)[>]()** +* [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)[>]()** -* [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)[>]()** +* [v05.xx (任务管理篇) | 任务池是如何管理的? ](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)[>]()** * [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)[>]()** -* [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)[>]()** +* [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)[>]()** * [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)[>]()** @@ -195,7 +195,7 @@ ### 喜欢请「点赞+关注+收藏」 -* [关注「鸿蒙内核源码分析」公众号](https://gitee.com/weharmony/docs/raw/master/pic/other/so1so.png) +* [![鸿蒙内核源码分析](https://gitee.com/weharmony/docs/raw/master/pic/other/so1so.png)](https://gitee.com/weharmony/docs/raw/master/pic/other/so1so.png) * 各大站点搜 **「鸿蒙内核源码分析」**.欢迎转载,请注明出处. diff --git a/kernel/base/include/los_process_pri.h b/kernel/base/include/los_process_pri.h index 2c8479ebe9ac4147f7b59d5bc409bcbb3df9875e..5785f46e6f3946b0852208c93c5b15e063139a9c 100644 --- a/kernel/base/include/los_process_pri.h +++ b/kernel/base/include/los_process_pri.h @@ -107,7 +107,7 @@ typedef struct ProcessCB { UINT32 timerCpu; /**< CPU core number of this task is delayed or pended *///统计各线程被延期或阻塞的时间 #endif UINTPTR sigHandler; /**< signal handler */ //信号处理函数,处理如 SIGSYS 等信号 - sigset_t sigShare; /**< signal share bit */ //信号共享位 + sigset_t sigShare; /**< signal share bit */ //信号共享位 sigset_t是个64位的变量,对应64种信号 #if (LOSCFG_KERNEL_LITEIPC == YES) ProcIpcInfo ipcInfo; /**< memory pool for lite ipc */ //用于进程间通讯的虚拟设备文件系统,设备装载点为 /dev/lite_ipc #endif diff --git a/kernel/base/include/los_signal.h b/kernel/base/include/los_signal.h index 6262243191445c4f6e681fccc957b8542eab1242..eed50c62958914a97de19b20ca62e571459e2cc5 100644 --- a/kernel/base/include/los_signal.h +++ b/kernel/base/include/los_signal.h @@ -164,6 +164,23 @@ typedef struct { unsigned long sig[MAX_SIG_ARRAY_IN_MUSL / sizeof(unsigned long)]; } sigset_t_l; +/*************************************************** +struct sigaction { + union { + void (*sa_handler)(int); //信号处理函数——普通版 + void (*sa_sigaction)(int, siginfo_t *, void *);//信号处理函数——高级版 + } __sa_handler; + sigset_t sa_mask;//指定信号处理程序执行过程中需要阻塞的信号; + int sa_flags; //标示位 + // SA_RESTART:使被信号打断的syscall重新发起。 + // SA_NOCLDSTOP:使父进程在它的子进程暂停或继续运行时不会收到 SIGCHLD 信号。 + // SA_NOCLDWAIT:使父进程在它的子进程退出时不会收到SIGCHLD信号,这时子进程如果退出也不会成为僵 尸进程。 + // SA_NODEFER:使对信号的屏蔽无效,即在信号处理函数执行期间仍能发出这个信号。 + // SA_RESETHAND:信号处理之后重新设置为默认的处理方式。 + // SA_SIGINFO:使用sa_sigaction成员而不是sa_handler作为信号处理函数。 + void (*sa_restorer)(void); +}; +****************************************************/ typedef struct sigaction sigaction_t; struct sigactq { @@ -218,8 +235,8 @@ typedef struct {//信号控制块(描述符) sigset_t sigprocmask; /* Signals that are blocked */ //进程屏蔽了哪些信号 sq_queue_t sigactionq; //信号捕捉队列 LOS_DL_LIST waitList; //等待链表,上面挂的是等待信号到来的任务, 请查找 OsTaskWait(&sigcb->waitList, timeout, TRUE) 理解 - sigset_t sigwaitmask; /* Waiting for pending signals */ //任务在等待某某信号的掩码 - siginfo_t sigunbinfo; /* Signal info when task unblocked */ //任务解除阻止时的信号信息 + sigset_t sigwaitmask; /* Waiting for pending signals */ //任务在等待阻塞信号 + siginfo_t sigunbinfo; /* Signal info when task unblocked */ //任务解锁时的信号信息 sig_switch_context context; //信号切换上下文, 用于保存切换现场, 比如发生系统调用时的返回,涉及同一个任务的两个栈进行切换 } sig_cb; diff --git a/kernel/base/ipc/los_signal.c b/kernel/base/ipc/los_signal.c index 49621788151266aacdb6b50b027c9c13a109f6a9..e94507677d332bfb31fe067d67928e3d3ccdab90 100644 --- a/kernel/base/ipc/los_signal.c +++ b/kernel/base/ipc/los_signal.c @@ -513,7 +513,7 @@ int OsPause(void) oldSigprocmask = spcb->sig.sigprocmask; return OsSigSuspend(&oldSigprocmask); } -//用set代替进程的原有掩码,并暂停进程执行,直到收到信号再恢复原有掩码并继续执行进程。 +//用参数set代替进程的原有掩码,并暂停进程执行,直到收到信号再恢复原有掩码并继续执行进程。 int OsSigSuspend(const sigset_t *set) { unsigned int intSave; @@ -545,7 +545,7 @@ int OsSigSuspend(const sigset_t *set) return -EINTR; } /************************************************** -安装信号,函数用于改变进程接收到特定信号后的行为。 +信号安装,函数用于改变进程接收到特定信号后的行为。 sig:信号的值,可以为除SIGKILL及SIGSTOP外的任何一个特定有效的信号(为这两个信号定义自己的处理函数,将导致信号安装错误)。 act:设置对signal信号的新处理方式。 oldact:原来对信号的处理方式。 diff --git a/zzz/git/push.sh b/zzz/git/push.sh index cd94826d0667aacbf3727616435e067fc9846213..6fece6f5f74d37771b74da6a6cde2bef23a0363b 100644 --- a/zzz/git/push.sh +++ b/zzz/git/push.sh @@ -1,5 +1,5 @@ git add -A -git commit -m '进程回收过程注解 +git commit -m '信号模块代码注解 百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码 https://my.oschina.net/weharmony '