码迷,mamicode.com
首页 > 系统相关 > 详细

linux下信号的响应过程

时间:2021-04-22 16:17:45      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:返回   检测   signal   不可   alt   思考   sig   ima   通过   

技术图片

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下信号的响应过程

标签:返回   检测   signal   不可   alt   思考   sig   ima   通过   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!