免费注册 查看新帖 |

Chinaunix

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

remove_wait_queue后要不要set_current_state(TASK_RUNNING)? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-23 09:22 |只看该作者 |倒序浏览
在调用remove_wait_queue后需不需要手工调用set_current_state(TASK_RUNNING)设置进程状态了?
网上和书上的说明中有些说需要,有些说不需要。
如果说不需要的话,内核中有很多地方都手工设置进程状态到TASK_RUNNING了,
如果说需要的话,内核中的sleep_on实现中又没有设置,而sleep_on是不太可能有问题的。
理解的比较乱,以下是我找到的各种说法,先抛出来:
1:有人认为default_wake_function中已经设置了进程状态,所以不需要设置了
2:我看到default_wake_function中有一条路径是跳过设置进程状态的语句的
3:也有人认为如果因为信号退出等待,因为没有调用wake_up,所以没有自动设置进程状态,所以还需要手工设置,但这又和sleep_on矛盾了
因此向大家请教。

论坛徽章:
0
2 [报告]
发表于 2008-05-23 10:30 |只看该作者
原帖由 OstrichFly 于 2008-5-23 09:22 发表
在调用remove_wait_queue后需不需要手工调用set_current_state(TASK_RUNNING)设置进程状态了?
网上和书上的说明中有些说需要,有些说不需要。
如果说不需要的话,内核中有很多地方都手工设置进程状态到TASK_ ...

remove_wait_queue和set_current_state(TASK_RUNNING)没有必然的关系,主要看该wait队列的作用和该进程的状态。

论坛徽章:
0
3 [报告]
发表于 2008-05-26 10:58 |只看该作者
谢谢!
一般情况下,remove_wait_queue后我们认为进程应该可以被继续运行了,这时是不是已经被设置成TASK_RUNNING了?还是需要我们自己设置?
还有就是,如果没有设置成TASK_RUNNING,会不会对调度产生影响?

论坛徽章:
0
4 [报告]
发表于 2008-05-26 11:15 |只看该作者
原帖由 OstrichFly 于 2008-5-26 10:58 发表
谢谢!
一般情况下,remove_wait_queue后我们认为进程应该可以被继续运行了,这时是不是已经被设置成TASK_RUNNING了?还是需要我们自己设置?
还有就是,如果没有设置成TASK_RUNNING,会不会对调度产生影响?


1. 第一个问号:有的时候系统帮你设置了,关于这点你可以看看引用remove_wait_queue的地方,很多时候系统都是这么做的。如果是你自己的模块,你希望在remove_wait_queue之后,让该进程进入调度,就将其设置成TASK_RUNNING状态,并且通过其run_list成员将其加入runqueue_head运行队列。

2. 第二个问号:如果没有设置成TASK_RUNNING,该进程就不会参与调度了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP