免费注册 查看新帖 |

Chinaunix

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

关于wake_up跟schedule和中断处理程序的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-13 18:27 |只看该作者 |倒序浏览
在看ldd3,第6章,有个问题请教。

摘录:
Normally, a process that is awakened may preempt the current process and be
scheduled into the processor before wake_up returns. In other words, a call to
wake_up may not be atomic. If the process calling wake_up is running in an
atomic context (it holds a spinlock, for example, or is an interrupt handler), this
rescheduling does not happen.

这里说,wake_up返回之前,就可能有进程切换,除非占用了spinlock或者在中断处理程序中。

我的问题:
1. 在try_to_wake_up()中,只是设置了TIF_NEED_RESCHED标志,那真正调用schedule()是在什么时候?
如果在单处理器,非抢占内核下,是不是肯定会等到wake_up结束,才有调度?

2. 内核是怎么做到:如果在中断处理程序中调用了wake_up,是不会进行调度的。我看2.6的schedule()函数中,也没有
代码在判断是不是在中断处理中。


问题写的有点乱,因为是新手,脑子里本来就比较糊涂,所以问的不清楚。
如果觉得我哪里写的不清楚,请指出来,我改正。

论坛徽章:
0
2 [报告]
发表于 2009-05-13 23:56 |只看该作者
我胡乱猜下:
schedule()也许是在定时器中断里调用的。定时器中断也是个中断处理函数,这时其他进程都停止了,在定时器中断里可以检查下各个进程的状态,是否用完了时间,然后进行调度。

大概看了下代码,看不出来我猜的对不对。等高手来确认下。

论坛徽章:
0
3 [报告]
发表于 2009-05-14 13:10 |只看该作者
个人认为:
1.非抢占内核下,调度在wake_up()返回之后进行,因为非抢占性
2.中断可看做优先级最高的进程,ISR里面调用了wake_up()的话内核会在ISR返回时做schedule,判断是否中断上下文的代码在schedule()函数之外
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP