免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2077 | 回复: 8
打印 上一主题 下一主题

谁能给我讲讲信号 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-10 16:29 |只看该作者 |倒序浏览
主要是从信号的产生之后,内核所做的操作,  直到进程收到信号。

论坛徽章:
1
申猴
日期:2014-04-18 16:29:14
2 [报告]
发表于 2011-03-10 16:44 |只看该作者
端沙发听讲,恐怕牛人会喊你去看apue

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
3 [报告]
发表于 2011-03-10 16:49 |只看该作者
恐怕看APUE也不行哦,得看kernel

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
4 [报告]
发表于 2011-03-10 17:26 |只看该作者
估计高手都不屑于跟你讲。我以前看APUE的时候也是十分的不解与好奇,所以非常理解你现在的感受。我试着讲讲大体流程,你看看能不能懂。

1.A进程想给B进程发信号。
2.A进程用系统调用向内核申请此动作。
3.到内核态,内核在B进程的进程描述符里某地方做个记号。
4.内核调度到B,B返回用户态前发现有人给它发信号。
5.B处理信号:将内核栈上的内容搬到用户栈上去,然后在用户栈上构造一些特殊的结构,其中之一是在栈上伪造一个返回返回地址。然后改一下存在内核栈上原先用户态的环境,将其中的EIP改为用户指定的信号处理函数(假设用户注册了)。
6.正常返回用户态,因为之前动了手脚,返回用户态时直接到了信号处理函数。
7.处理函数执行完毕,正常返回,但是之前已经在用户栈上伪造了一个返回地址,于是CPU返回到那个地方。
8.那个地址里放的是内核安排的一段特殊代码,那段代码通过系统调用再次进入内核。
9.相应的系统调用函数把用户栈上的内容搬回内核栈。
10.于是又回到了B进程准备正常返回到用户态的情景。
11.B进程正常返回到用户态(进入内核态之前的地方)。

论坛徽章:
0
5 [报告]
发表于 2011-03-10 17:58 |只看该作者
回复 4# tempname2


   
讲得不错,8和9两点不是很懂,再一次陷入内核的作用是什么?

论坛徽章:
0
6 [报告]
发表于 2011-03-10 18:11 |只看该作者
本帖最后由 davelv 于 2011-03-10 18:12 编辑

回复 4# tempname2

腿控兄,CU上好久不见 ^^

论坛徽章:
0
7 [报告]
发表于 2011-03-10 19:04 |只看该作者
回复 4# tempname2


    恩 。我就是看了APUE不懂现在又没有看内核的实力。谢谢你

论坛徽章:
0
8 [报告]
发表于 2011-03-11 13:51 |只看该作者
看看这个文章
http://www.spongeliu.com/linux/linux内核信号处理机制介绍/

和4楼的介绍差不多

论坛徽章:
0
9 [报告]
发表于 2011-03-11 13:53 |只看该作者
地址重新发一下
http://goo.gl/Aj7HR
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP