免费注册 查看新帖 |

Chinaunix

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

在定时器handler内可睡眠吗(解决) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-15 15:57 |只看该作者 |倒序浏览
内核在时钟中断发生后执行定时器, 定时器作为软中断在下半部上下文执行。《From LKD》

因为软中断在下半部上下文执行是不可以阻塞 睡眠的, 在定时器handler内是不可睡眠, 对吗?

[ 本帖最后由 studyboy_3w 于 2009-6-18 13:11 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-06-15 22:55 |只看该作者
我也不太明白,讨论一下:
为什么不可以阻塞呢?如果在软终端中读取硬件可能时间很长,就需要阻塞。
软中断这部分一直没仔细想过,明天我得研究研究

论坛徽章:
0
3 [报告]
发表于 2009-06-17 18:27 |只看该作者
还是不清楚阿??

论坛徽章:
0
4 [报告]
发表于 2009-06-17 18:28 |只看该作者
睡觉,等答案..............

论坛徽章:
0
5 [报告]
发表于 2009-06-17 23:10 |只看该作者
原帖由 studyboy_3w 于 2009-6-15 15:57 发表
内核在时钟中断发生后执行定时器, 定时器作为软中断在下半部上下文执行。《From LKD》

因为软中断在下半部上下文执行是不可以阻塞 睡眠的, 在定时器handler内是不可睡眠, 对吗?


在handler里面已經把spin lock釋放,中斷打開了,所以這個時候block也沒有關系呀

樓主可以看下kernel/timer.c里面__run_timers這個函數。

個人之見,呵呵

论坛徽章:
0
6 [报告]
发表于 2009-06-17 23:54 |只看该作者
我的也、理解是
软中断不能阻塞,不能睡眠。软中断有一个入口是在irq_exit(),也就是上半部完成后的一个检查,如果软中断可以阻塞,那么这个中断没有返回,被调度出去就麻烦了。而在ksoftirq入口的应该是可以阻塞的,设计ksoftirq就是为了让软中断能真正的延后,不要老在上半部完成后执行

论坛徽章:
0
7 [报告]
发表于 2009-06-18 10:36 |只看该作者
软中断是不能睡眠的,睡眠会导致进程调度。又由于local_bh_disable();那么BH部分实际是被锁住了,那么在其他进程里面都不能执行软中断,直到本进程被调用。
你想想你的中断处理程序真的需要睡眠么,如果需要,用工作队列来做,这个是可以睡眠的。

论坛徽章:
0
8 [报告]
发表于 2009-06-18 11:04 |只看该作者
我知道软中断是不能睡眠的,睡眠会导致进程调度。
问题是在内核定时器handler中能否睡眠?

论坛徽章:
0
9 [报告]
发表于 2009-06-18 11:11 |只看该作者
那你说内核定时器handler是什么?

论坛徽章:
0
10 [报告]
发表于 2009-06-18 11:27 |只看该作者
不能睡眠,楼上解释非常清楚了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP