免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dengcainiao
打印 上一主题 下一主题

LINUX的中断处理是否没有中断优先级的概念? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2008-03-26 08:34 |只看该作者
原帖由 zx_wing 于 2008-3-25 22:24 发表

是的,LZ理解是对的。
你的疑问我在上面的帖子回复了,因为在上半部处理使用中断优先级的唯一结果就是阻止了中断嵌套,但这样有什么好处呢?我没想到。
此外对ksoftirqd论述是对的,它确实是为了在进程和中 ...


这点我非常同意, Solaris里写驱动程序, 根本没有上下半部的概念.

但实际上, Solaris在dispatch中断之前, 会有一个短暂的上半部, 但它不在驱动程序里实现.
再加上中断线程的有优先级,可以按优先级调度, 因此驱动的处理就简单多了.

论坛徽章:
0
22 [报告]
发表于 2008-03-26 08:38 |只看该作者
原帖由 dengcainiao 于 2008-3-25 23:14 发表
另外,我感觉solaris中应该不是所有设备的中断处理程序都可以用线程化的中断处理程序来实现下半部,类似时钟中断这样的中断处理程序我想应该不会用中断线程化来处理


Solaris的中断优先级有16个级别, 时钟中断也是线程化的.时钟中断以上的中断, 例如处理器间中断不是线程化的.

论坛徽章:
0
23 [报告]
发表于 2008-03-26 08:41 |只看该作者
原帖由 zx_wing 于 2008-3-25 23:15 发表

那就等solaris12同志来解释一下solaris中的软件中断优先级到底是指:CPU规定的中断优先级还是中断处理线程的优先级


这个都做到了:

1. 有一个PIL(processor interrupt level)来规定CPU的中断优先级
2. 中断线程优先级主要是为线程调度用的,可以映射到整个系统的调度优先级上.

论坛徽章:
0
24 [报告]
发表于 2008-03-26 08:44 |只看该作者
原帖由 zx_wing 于 2008-3-25 23:16 发表

LZ考虑的很深入啊,赞一个!
应该是不行,至少linux的中断线程化的patch对于时钟这样的中断是不能被线程化的。


这个在Solaris上有点特殊:

Solaris上对时钟编程, 是一个高优先级中断, 即没有线程实体. 这个中断里会遍历一个树结构, 真正的系统时间片处理是注册在树结构上的.

每个tick到来,这个真正意义上的时钟中断处理是线程方式执行的, 在整个系统线程中,优先级最高.

论坛徽章:
0
25 [报告]
发表于 2008-03-26 08:49 |只看该作者
原帖由 Solaris12 于 2008-3-26 08:34 发表


这点我非常同意, Solaris里写驱动程序, 根本没有上下半部的概念.

但实际上, Solaris在dispatch中断之前, 会有一个短暂的上半部, 但它不在驱动程序里实现.
再加上中断线程的有优先级,可以按优先级调度,  ...

这样说的话想来用来做中断处理的线程优先级应该普遍高于普通线程,而在中断线程内部再进行优先级细分,这样才能保证中断执行的实时性。这种处理方式其实也达到了软中断的主要目的,并且有更细的粒度,感觉比linux的实现要好一些。不过对于这种模型还有些想不通的地方,如果有设备很频繁的触发驱动,而该设备的中断线程的优先级又比较高(例如网卡,SCSI?不知道是否准确)会不会引起用户进程的饥饿?

[ 本帖最后由 dengcainiao 于 2008-3-26 08:51 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2008-03-26 08:54 |只看该作者
另外solaris12,你所说的solaris中实现的中断优先级指的是中断线程化后的中断线程优先级吗??还是硬件中断本身的优先级?

论坛徽章:
0
27 [报告]
发表于 2008-03-26 09:59 |只看该作者
原帖由 dengcainiao 于 2008-3-26 08:54 发表
另外solaris12,你所说的solaris中实现的中断优先级指的是中断线程化后的中断线程优先级吗??还是硬件中断本身的优先级?


我前面回复了, 硬件和中断线程的优先级是对应的.

论坛徽章:
0
28 [报告]
发表于 2008-03-26 10:03 |只看该作者
原帖由 dengcainiao 于 2008-3-26 08:49 发表

这样说的话想来用来做中断处理的线程优先级应该普遍高于普通线程,而在中断线程内部再进行优先级细分,这样才能保证中断执行的实时性。这种处理方式其实也达到了软中断的主要目的,并且有更细的粒度,感觉比l ...



极端情况下, 中断过度频繁会导致用户进程饥饿.

在UP系统上,比较难解决.

在SMP系统上, 中断dispacher 会对中断计数, 达到门限值后, 触发一个内核抢占, 把用户线程从那个中断所在CPU上偷到其它CPU上.

论坛徽章:
0
29 [报告]
发表于 2008-03-26 10:11 |只看该作者
原帖由 Solaris12 于 2008-3-26 09:59 发表


我前面回复了, 硬件和中断线程的优先级是对应的.


你的意思是说中断线程的优先级是参照硬件优先级设计的.是否说在执行高优先级的中断线程时要将低优先级的中断屏蔽掉?

论坛徽章:
0
30 [报告]
发表于 2008-03-26 10:16 |只看该作者
原帖由 dengcainiao 于 2008-3-26 10:11 发表


你的意思是说中断线程的优先级是参照硬件优先级设计的.是否说在执行高优先级的中断线程时要将低优先级的中断屏蔽掉?


是这样的, 低优先级无法中断高优先级中断.

Solaris把中断控制器的处理抽象出一套通用方法, setspl就是做你说的屏蔽处理的

x86的具体实现, 可以查看apic代码的实现:


usr/src/uts/i86pc/io/pcplusmp/apic.c

/*
* Mask all interrupts below or equal to the given IPL
*/
static void
apic_setspl(int ipl)
{
...............

}

我也没有好好看过这块的代码, 所以再细节我也帮不了你了.

[ 本帖最后由 Solaris12 于 2008-3-26 10:24 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP