免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-25 20:32 |只看该作者 |倒序浏览
今天看ULK3中断处理的章节。其中4.3章有如下描述:

Linux interleaves kernel control paths for two major reasons:

To improve the throughput of programmable interrupt controllers and device controllers. Assume that a device controller issues a signal on an IRQ line: the PIC transforms it into an external interrupt, and then both the PIC and the device controller remain blocked until the PIC receives an acknowledgment from the CPU. Thanks to kernel control path interleaving, the kernel is able to send the acknowledgment even when it is handling a previous interrupt.

To implement an interrupt model without priority levels. Because each interrupt handler may be deferred by another one, there is no need to establish predefined priorities among hardware devices. This simplifies the kernel code and improves its portability.

难道LINUX的中断处理系统里没考虑实现中断优先级吗?请了解的说一说

论坛徽章:
0
2 [报告]
发表于 2008-03-25 20:58 |只看该作者
原帖由 dengcainiao 于 2008-3-25 20:32 发表
今天看ULK3中断处理的章节。其中4.3章有如下描述:

Linux interleaves kernel control paths for two major reasons:

To improve the throughput of programmable interrupt controllers and device cont ...

确实没有,linux不像windows使用了软件中断优先级概念,solaris好像也有。

论坛徽章:
0
3 [报告]
发表于 2008-03-25 21:13 |只看该作者
恩,solaris是有,我向熟悉solaris的人了解过了。感觉中断优先级应该是中断系统里挺重要的一个概念,不知道为什么LINUX忽略了。。。

论坛徽章:
0
4 [报告]
发表于 2008-03-25 21:30 |只看该作者
原帖由 dengcainiao 于 2008-3-25 21:13 发表
恩,solaris是有,我向熟悉solaris的人了解过了。感觉中断优先级应该是中断系统里挺重要的一个概念,不知道为什么LINUX忽略了。。。

软件优先级是否一定很高效我看不见得,呃,可能我还没想出来这种模型在哪种情况下具有优势。
至于为啥linux没有软件中断优先级,我认为是和linux中断模型有关。
linux处理中断没有使用像solaris中的中断线程那种模型,对于中断的处理都是尽力原则,也就是尽可能快的处理中断,毕竟中断是紧急事件。要注意的是linux本身是通用操作系统,所以在实时性方面就要弱一点(实时性是我目前唯一想到的软件中断优先级的好处,当然linux也有为了实时性而引入的软件中断优先级的patch)。引入软件中断优先级有个条件(个人认为是必须条件),就是中断处理的例程是可以被调度的,说白了就是中断处理应该具有进程/线程上下文,而linux不是这种模型。

此外,linux并非完全不考虑中断频繁而带来的对进程的不公平性,不是还有一个soft_irq嘛。当中断过多的时候,通过ksoftirq内核线程来处理中断,某种意义上就是软件中断优先级的概念,因为线程本身是有优先级的。所以我认为,linux使用的中断模型是:尽可能的处理中断,当中断过多时引入内核线程从而引入优先级的概念。

以上是个人意见,欢迎讨论

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

软件优先级是否一定很高效我看不见得,呃,可能我还没想出来这种模型在哪种情况下具有优势。
至于为啥linux没有软件中断优先级,我认为是和linux中断模型有关。
linux处理中断没有使用像solaris中的中断线程 ...

多谢你的回答。我是这样理解你的观点的,即LINUX的中断处理程序提倡尽量的简短,快速执行。将中断处理过程中比较耗时的部分放入软中断部分实现。当然在软中断中是开中断的,这样可以允许处理新的中断。而solaris这种中断模型的中断服务程序是线程化的本身具备进程上下文,可被调度,因此可以用优先级的形式来加强中断处理的实时性。
  如果我对你的观点理解大概正确的话,我还有一些疑问。我对solaris的中断部分不是很熟悉,但我想solaris可以中断线程化的部分应该和LINUX的软中断相仿,最底层的中断处理程序应该也没有进程上下文,是不能被调度的。但是solaris中实现中断优先级应该就是在最底层的中断处理程序中,而指的不是可中断线程化的部分。所以我对于中断优先级要建立在中断线程化处理的中断模型下的这种观点有些疑问。
  另外,ksoftirqd内核线程主要的目的应该是避免频繁的执行软中断,例如网络驱动中软中断处理程序会自举,如果没有这种机制,用户进程将出现比较严重的饥饿现象。而该线程本身并没有进行任何中断处理,只在系统空闲时运行,检索是否有标记的软中断未被执行,若有则执行之。

[ 本帖最后由 dengcainiao 于 2008-3-25 22:11 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-03-25 22:19 |只看该作者
原帖由 dengcainiao 于 2008-3-25 21:13 发表
恩,solaris是有,我向熟悉solaris的人了解过了。感觉中断优先级应该是中断系统里挺重要的一个概念,不知道为什么LINUX忽略了。。。

刚才又想了一下,LZ说的软件优先级可能和我上面的回复指的不是一个东西。你是问为啥没实现根据CPU定义的外部中断优先级来屏蔽低优先级中断吧?
IA架构的CPU都提供TPR寄存器来屏蔽低优先级的中断,x86的linux实现似乎确实没用。个人认为理由比较简单,就是允许中断嵌套。
如果使用TPR来控制中断优先级,举个例子:
例如优先级15的中断发生了,我们通过TPR把优先级小于15的中断都屏蔽了。但这样仅仅是让15优先级的中断先处理完而已,并且禁止了中断嵌套。而linux对大负荷的中断都是放到下半部去处理的,所以完全没有理由阻止中断嵌套,毕竟上半部处理是个很短的过程。

论坛徽章:
0
7 [报告]
发表于 2008-03-25 22:24 |只看该作者
原帖由 dengcainiao 于 2008-3-25 22:06 发表

多谢你的回答。我是这样理解你的观点的,即LINUX的中断处理程序提倡尽量的简短,快速执行。将中断处理过程中比较耗时的部分放入软中断部分实现。当然在软中断中是开中断的,这样可以允许处理新的中断。而sola ...

是的,LZ理解是对的。
你的疑问我在上面的帖子回复了,因为在上半部处理使用中断优先级的唯一结果就是阻止了中断嵌套,但这样有什么好处呢?我没想到。
此外对ksoftirqd论述是对的,它确实是为了在进程和中断间取平衡的而引入的,我的意思是由于ksoftirqd是线程,同样也引入了中断优先级的概念,进程优先级比它高,先执行就不会饥饿了嘛。呵呵,其实和都是一个道理。

论坛徽章:
0
8 [报告]
发表于 2008-03-25 22:29 |只看该作者
还有一个移植性的问题,假设有的CPU架构没有实现外部中断优先级概念,那么linux的维护就麻烦了,一个系统有几种机制。
而win和solairs本身就是对特定架构的操作系统,现在windows就只支持IA架构的CPU。
solaris移植到x86了,而x86正好又是有外部中断优先级的。
linux就不一样,支持那么多架构,而且可能会越来越多。

论坛徽章:
0
9 [报告]
发表于 2008-03-25 22:30 |只看该作者
我对别的操作系统中断模型没多少了解。不清楚有没有操作系统实现中断处理程序是不区分上半部,下半部的?如果真是有哪个操作系统把所有的中断处理过程都放在一起处理,我想你说的那些原因就比较有道理了。但是就solarsi来说,我感觉它的线程化的中断处理过程应该类似与linux的软中断机制,实际上也是把完整的中断处理程序分成两块来做。如果我的感觉是正确的,那怎么解释solaris中实现的中断优先级呢?solaris12如果看到了这个帖子给解释一下solaris里的实现,是不是象我考虑的那样

[ 本帖最后由 dengcainiao 于 2008-3-25 22:33 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2008-03-25 22:31 |只看该作者
原帖由 zx_wing 于 2008-3-25 22:29 发表
还有一个移植性的问题,假设有的CPU架构没有实现外部中断优先级概念,那么linux的维护就麻烦了,一个系统有几种机制。
而win和solairs本身就是对特定架构的操作系统,现在windows就只支持IA架构的CPU。
solar ...

这个的确是这样,linux的这种中断模型确实有很好的移植性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP