首页 > 系统服务 > 详细

linux下信号的响应过程

时间:2021-04-22 09:00:06      阅读:28      评论:0      收藏:0      [点我收藏+]

技术分享图片

1.内核为每个进程给了两个位图,一个为mask(默认为1),一个为pending(默认为0)

2.当内核态转到用户态时,检测是否有信号,用mask & pending得到结果,如果没有接到信号,那么结果为32位的0,此时通过内核中保存的地址返回原进程。

3.当有一个信号来时,pending中对应位置变为1,当一个中断到来时,在内核中保存原进程的地址等待调度,当调度到时,从内核态转为用户态,此时由于pengding & mask的值不全为0,所以也就发现了信号,也就能够执行signal了。

4.此时替换内核中地址,将要执行的signal参数中的函数地址装进,设置mask和pengding的对应位为0

5.执行完signal中的函数后,将内核中的地址换为之前函数的地址,设置mask为1.最后通过将内核态转为用户态执行之前的进程。

 

思考:1.如何忽略一个信号?

  在signal中有一个参数设置为忽略模式后,在信号对应的位置的mask设置为0,即可永久屏蔽信号

   2.信号从收到到相应有一个不可忽略的时延

  响应是在内核转用户时候发生的,所以需要有中断进入内核的情况才可以

   3.标准信号为什么要丢失

  因为如果一次性发送1W个信号的话,位图的同一个位置只有一个1存在,也就是只能在中断后,在内核转向用户态的时候响应一次

 

linux下信号的响应过程

原文:https://www.cnblogs.com/hxl-learning-space/p/14687363.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!