免费注册 查看新帖 |

Chinaunix

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

[进程管理] 进程是如何从schedule();到set_crrent_state(TASK_RUNNING);的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-13 10:45 |只看该作者 |倒序浏览
DECLARE_WAITQUEUE(wait,current);
add_wait_queue(q, &wait);
set_current_state(TASK_INTERRUPTIBLE);
/* 或TASK_INTERRUPTIBLE */
while(!condition) /* ‘condition’ 是等待的条件*/
schedule();
set_current_state(TASK_RUNNING);
remove_wait_queue(q, &wait);

如上,是一个常见的进程睡眠和唤醒的程序,理论上说进程在休眠状态的时候,是等待某一事件的发生,当事件满足的时候,会从新被调度到红黑树。我不明白既然进程进入了休眠状态,也就是说不会再调用CPU,那它如何检测唤醒事件的呢?是由schedule();唤醒的吗?但是当前进程被休眠之后,CPU就会执行新的任务,唤醒事件是如何唤醒当前休眠进程的?---------------------------谢谢!

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
2 [报告]
发表于 2013-09-13 11:13 |只看该作者
睡眠会挂在wait queue上, 事件来了的时候再dequeue它,设置为running状态。

论坛徽章:
0
3 [报告]
发表于 2013-09-13 12:22 |只看该作者
回复 2# 帅绝人寰

是谁检测事件的?中断吗?既然检测到事件,又是谁来唤醒休眠进程的?


   

论坛徽章:
0
4 [报告]
发表于 2013-09-13 13:30 来自手机 |只看该作者
中断,软中断

论坛徽章:
0
5 [报告]
发表于 2013-09-13 13:36 来自手机 |只看该作者
中断,软中断

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
6 [报告]
发表于 2013-09-13 14:01 |只看该作者
回复 1# shao6254842
take a look try_to_wake_up() function!

   

论坛徽章:
0
7 [报告]
发表于 2013-09-13 14:42 |只看该作者
回复 6# 瀚海书香

我知道唤醒操作通过函数wake_up进行,它调用函数try_to_wake_up,该函数负责将进程设置为 TASK_RUNNING状态,我想问的是谁调用了wake_up();?
   

论坛徽章:
0
8 [报告]
发表于 2013-09-13 14:43 |只看该作者
回复 5# longddr

可否细讲一下?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
9 [报告]
发表于 2013-09-13 15:06 |只看该作者
回复 7# shao6254842
我知道唤醒操作通过函数wake_up进行,它调用函数try_to_wake_up,该函数负责将进程设置为 TASK_RUNNING状态,我想问的是谁调用了wake_up();?


这有很多种可能。

以等待某一个条件为例,当另一个进程发现条件满足后可以主动调用wake_up来唤醒,比如读取链表中item的情形,一个进程等待读,另一个进程将item放入链表后唤醒等待的进程;
如果条件是有软中断满足,那么软中断发生后会主动调用wake_up,比如block recv数据包的情况。。。。

   

论坛徽章:
0
10 [报告]
发表于 2013-09-13 15:11 |只看该作者
回复 9# 瀚海书香


    噢,明白了,谢谢哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP