Linux.ChinaUnix.net
ChinaUnix | Linux首页 | 新闻 | 博客 | 文章 | 专栏 | 新手 | 方案 | 图书 | 下载 | 人才 | 手册 | wiki | 搜索     
Linux论坛
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


在一次中断或者系统调用返回用户态的过程中,是否会将所有的未阻塞信号全部处理掉?
首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
ahhhhwang
圣骑士




UID:554698
注册:2007-4-21
最后登录: 2008-07-20
帖子:117
精华:0

可用积分:115
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
1楼 发表于 2008-5-15 10:13 
在一次中断或者系统调用返回用户态的过程中,是否会将所有的未阻塞信号全部处理掉?还是返回到用户态,只是处理了一个信号。
应该在sys_sigreturn将要返回的时候还会处理别的信号吧,如此重复一直到所有的信号都被处理掉,才返回到被中断的代码后一句或者系统调用后一句的代码处。

[ 本帖最后由 ahhhhwang 于 2008-5-15 19:16 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
xpl
圣骑士




UID:397977
注册:2006-4-5
最后登录: 2008-07-18
帖子:118
精华:2

可用积分:165
信誉积分:100
专家积分:5 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
2楼 发表于 2008-5-15 13:14 
会递交所有未决信号,然后才返回的.



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ahhhhwang
圣骑士




UID:554698
注册:2007-4-21
最后登录: 2008-07-20
帖子:117
精华:0

可用积分:115
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
3楼 发表于 2008-5-15 14:48 
回复 #2 xpl 的帖子

某个进程的未决信号这个术语不太清楚,是不是:是不是指内核为这个进程的待处理信号队列添加的但是还没有被处理的信号实体?
另外递送就是说:从待处理信号队列上获得信号实体,并分别作出处理?

如果是这样的话,有个另外的问题:
比如某个系统调用阻塞,被信号发生者唤醒,且此系统调用返回-ERESTARTSYS,要求在这种情况下重新启动。
在返回被中断用户态代码的过程中,如果被处理的第一个未决信号的sa_flags标志要求不应该重新启动系统调用话,在返回到被中断代码时候,就不会重新启动。但是有可能被处理的第二个未决信号sa_flags标志并没有要求重新启动系统调用。
所以,对于上面的这种情况,如果第一个被处理的信号如果是上面说的第二个信号的话,系统调用就会重启了。
那么系统调用的是否重新启动就依赖于返回被中断代码过程中信号处理的顺序了。
情况是这样的吗?

[ 本帖最后由 ahhhhwang 于 2008-5-15 15:05 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
xpl
圣骑士




UID:397977
注册:2006-4-5
最后登录: 2008-07-18
帖子:118
精华:2

可用积分:165
信誉积分:100
专家积分:5 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
4楼 发表于 2008-5-15 15:41 
从中断返回用户态和系统调用重启是两个概念.


do_signal的时候, 可能是处于内核的出口路径中,也可能不是.

对于这两种情况, 处理起来是不同的.

从中断返回用户态的时候,是处于内核的出口路径, 要递交所有未决信号的.

而对于系统调用重启, 是在系统调用执行过程中出现了信号.
不过我并不能完全回答你的问题,因为对于系统调用重启这部分,我也不是很清楚.

不过对于你所说的信号导致系统调用重启的问题, 我觉的因该是立即递交该信号,然后再对系统调用进行处理,重启或者返回错误之类的.
但是对于你的假设, 我有一个问题,导致系统调用重启的信号发生时,此时有可能同时存在其他未决信号吗?



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ahhhhwang
圣骑士




UID:554698
注册:2007-4-21
最后登录: 2008-07-20
帖子:117
精华:0

可用积分:115
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
5楼 发表于 2008-5-15 15:58 
回复 #4 xpl 的帖子

我想问的就是处于内核态返回到用户态的过程中调用的do_signal,也就是你说的内核的出口路径。

对于最后你问的那个问题,我想是可能出现这种情况:
进程a调用系统调用的过程中睡眠,另外一个进程b给进程a发生了两个信号。发生第一个信号时候唤醒了睡眠的进程a,但a并没有马上开始执行,进程b又发生了第二个不同的信号。
这应该算是可能的一种情况。

当进程a又开始执行时候,根据ulk中讲的,它正在执行系统调用会以 EINTR, ERESTARTNOHAND, ERESTART_RESTARTBLOCK, ERESTARTSYS, or ERESTARTNOINTR 错误码退出,然后就是进入了返回用户态的过程中。这样在返回过程中就至少有两个信号待处理了。根据你说的,这两个信号会都被处理掉,然后进程a才重新开始执行系统调用后面的用户态代码了。

[ 本帖最后由 ahhhhwang 于 2008-5-15 16:02 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
xpl
圣骑士




UID:397977
注册:2006-4-5
最后登录: 2008-07-18
帖子:118
精华:2

可用积分:165
信誉积分:100
专家积分:5 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
6楼 发表于 2008-5-15 16:13 


QUOTE:
原帖由 ahhhhwang 于 2008-5-15 15:58 发表

当进程a又开始执行时候,根据ulk中讲的,它正在执行系统调用会以 EINTR, ERESTARTNOHAND, ERESTART_RESTARTBLOCK, ERESTARTSYS, or ERESTARTNOINTR 错误码退出,然后就是进入了返回用户态的过程中。这样在返回过程中就至少有两个信号待处理了。根据你说的,这两个信号会都被处理掉,然后进程a才重新开始执行系统调用后面的用户态代码了。

我没有说这两个信号都会被处理的.  

你误解我的话了?

对于系统调用重启这部分我也不清楚, 这部分code没有怎么看过.

对于你的这个发两个信号的假设, 我要想想,总觉的哪里有些不对.



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ahhhhwang
圣骑士




UID:554698
注册:2007-4-21
最后登录: 2008-07-20
帖子:117
精华:0

可用积分:115
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
7楼 发表于 2008-5-15 16:31 
回复 #6 xpl 的帖子

你说的递交所有未决信号,不是说处理所有待处理信号吗?
Signal delivery

The kernel forces the destination process to react to the signal by changing its execution state, by starting the execution of a specified signal handler, or both.

这段话的意思应该就是说,信号递送就是被内核强制去执行信号处理函数的过程。
那么递交所有未决信号就是说,被强制执行所有的待处理信号的信号处理函数,也就是说处理所有待处理信号

[ 本帖最后由 ahhhhwang 于 2008-5-15 16:47 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
xpl
圣骑士




UID:397977
注册:2006-4-5
最后登录: 2008-07-18
帖子:118
精华:2

可用积分:165
信誉积分:100
专家积分:5 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
8楼 发表于 2008-5-15 16:46 
我的语文表达能力没有那么差吧.

我说的是在正常的内核出口路径,是指正常的系统调用执行完成然后返回. 而不是你说的系统调用重启.


好了,这种文字的问题没有必要讨论这么多.

我们还是讨论一下你说的系统调用重启的问题吧.



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ahhhhwang
圣骑士




UID:554698
注册:2007-4-21
最后登录: 2008-07-20
帖子:117
精华:0

可用积分:115
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
9楼 发表于 2008-5-15 16:52 


QUOTE:
原帖由 xpl 于 2008-5-15 16:13 发表


我没有说这两个信号都会被处理的.  

你误解我的话了?

对于系统调用重启这部分我也不清楚, 这部分code没有怎么看过.

对于你的这个发两个信号的假设, 我要想想,总觉的哪里有些不对.

假如是系统调用成功返回,不涉及到系统调用重启,如果不是两个信号都被处理了,那您的意思是会怎么样?

[ 本帖最后由 ahhhhwang 于 2008-5-15 16:53 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ahhhhwang
圣骑士




UID:554698
注册:2007-4-21
最后登录: 2008-07-20
帖子:117
精华:0

可用积分:115
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[资料] [站内短信] [Blog]


顶部
10楼 发表于 2008-5-15 17:00 


QUOTE:
原帖由 xpl 于 2008-5-15 16:46 发表
我的语文表达能力没有那么差吧.

我说的是在正常的内核出口路径,是指正常的系统调用执行完成然后返回. 而不是你说的系统调用重启.


好了,这种文字的问题没有必要讨论这么多.

我们还是讨论一下你说的系 ...

内容是通过文字表达,我这样只是为了保证我们没有误解对方的意思,如果觉得不自在,这里先抱歉了



您对本贴的看法:鲜花[0] 臭蛋[0]
CU可用积分兑换Linux/Unix精品图书 |《Ubuntu标准教程》书评获奖名单公布 | 致电800-858-2903,了解DELL如何为你量身订制笔记本

首页 » CU论坛 » Linux » 汇总贴列表 » 内核源码 »

 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - Linux时代 - Archiver - WAP - TOP

Processed in 0.049530 second(s), 5 queries , Gzip enabled