免费注册 查看新帖 |

Chinaunix

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

请问如果在中断上下文中调用可能引起阻塞的代码到底会怎么样? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-01 14:07 |只看该作者 |倒序浏览
是不是中断处理程序就永远不能继续执行了?

论坛徽章:
0
2 [报告]
发表于 2006-08-01 17:47 |只看该作者
原帖由 dengcainiao 于 2006-8-1 14:07 发表
是不是中断处理程序就永远不能继续执行了?


在solaris下,这样会引起系统panic的

论坛徽章:
0
3 [报告]
发表于 2006-08-01 23:01 |只看该作者
fb下中断处理已经线程化,可以休眠。不过休眠以后这个线程就不能再唤醒了。

论坛徽章:
0
4 [报告]
发表于 2006-08-02 08:23 |只看该作者
原帖由 richardhesidu 于 2006-8-1 23:01 发表
fb下中断处理已经线程化,可以休眠。不过休眠以后这个线程就不能再唤醒了。


所谓中断线程化,也是低优先级的中断。
高优先级的中断还是特殊的上下文,不能够阻塞的。

所以在solaris或者bsd这样的中断线程化的系统里,在高优先级中断睡眠,基本上就是panic或者hang了

论坛徽章:
0
5 [报告]
发表于 2006-08-02 11:07 |只看该作者
原帖由 richardhesidu 于 2006-8-1 23:01 发表
fb下中断处理已经线程化,可以休眠。不过休眠以后这个线程就不能再唤醒了。


不知道fb是什么? 如果中断线程化指的是RT内核中实现的那样, 中断handler在线程中执行,这样的ISR可以阻塞。

如果是到现在为止的2.6.18-RC3的内核,在中断handler中执行导致阻塞的代码,内核会把调用栈打出来,提示在atomic中调用schedule(),这个判断在schedule().  假设没有这些判断,允许你sleep,我想到了下面的结果:
1. 如果你的handler关中断运行(flags & IRQF_DISABLED),
    a 可能会导致系统死掉,这取决于你的sleep是否因为其它中断 handler,
    b 系统延迟很大
2. 如果你的系统handler开中断运行,
    a 系统死掉, 如果你用4K内核栈
    b 系统死掉,即使handler运行在任务栈中,因为任务的唤醒不一定取决于这次阻塞,如信号等

而且,根据sleep是否因为和哪些不同的上下文互斥,异常的现象需要具体分析。但你的那个设备肯定是不能正常工作的。

所谓中断线程化,也是低优先级的中断。
高优先级的中断还是特殊的上下文,不能够阻塞的。

所以在solaris或者bsd这样的中断线程化的系统里,在高优先级中断睡眠,基本上就是panic或者hang了

是这样的,在Linux的RT Patch中,如时钟中断肯定不能线程化,所以中断handler中执行导致阻塞的代码,肯定有问题。

论坛徽章:
0
6 [报告]
发表于 2006-08-02 11:24 |只看该作者
学习了。。。。。
对中断线程话的概念完全不了解。不知道是不是用现在内核中用工作队列处理工作下半部一样。将中断处理程序挂到一个内核线程下的工作队列里?

论坛徽章:
0
7 [报告]
发表于 2006-08-02 13:19 |只看该作者
原帖由 dengcainiao 于 2006-8-2 11:24 发表
学习了。。。。。
对中断线程话的概念完全不了解。不知道是不是用现在内核中用工作队列处理工作下半部一样。将中断处理程序挂到一个内核线程下的工作队列里?


solaris下低于时钟中断或者是dispatch lock级别以下的中断,如网卡中断,是以内核线程的形式存在的。这些线程是per CPU的,每个level一个,组成一个线程list,挂在cpu structure的结构里。

这些线程具有比一般内核线程高的优先级,可以保证尽快执行。

[ 本帖最后由 Solaris12 于 2006-8-2 13:20 编辑 ]

论坛徽章:
1
午马
日期:2013-09-10 11:03:08
8 [报告]
发表于 2011-12-06 10:29 |只看该作者
在下半部记得只有工作队列机制可以阻塞,因为工作队列实质上是调用内核线程来执行下半部的工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP