免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dengcainiao

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

论坛徽章:
0
发表于 2008-03-28 10:31 |显示全部楼层
它的仲裁机制应该是:
1) 每CPU有一个固定的优先级,它将不会理会这个定值以下的中断。
2) CPU正在处理的中断,有一个优先级,在EOI之前,CPU也不会理会这个优先级以下的中断

CPU的当前优先级就应该是1)与2)中的最大者。

估计你指的TPR可能是1),它总是会将这个值设置为0。

论坛徽章:
0
发表于 2008-03-28 11:45 |显示全部楼层
原帖由 albcamus 于 2008-3-28 10:23 发表


是TPR。  这个仲裁机制相当复杂, 手册目前还没看完, 似乎还有ABR、PPR等等?

此外, 现在的linux内核已经, 至少, 设置TPR了, 我在代码里看到过。

关于ACK和EOI等, 我开个新贴。

换个帖也好,linux不使用TPR的优先级功能。
没有优先级功能,只有中断平衡功能

论坛徽章:
0
发表于 2008-03-29 04:52 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2008-04-01 23:30 |显示全部楼层

论坛徽章:
0
发表于 2008-04-05 02:38 |显示全部楼层
原帖由 zx_wing 于 2008-3-26 15:24 发表

那就是IA架构CPU TPR寄存器的功能嘛。
但这有什么好处呢?前面已经说过了,这样做的唯一用处就是减少了中断嵌套,因为低优先级的中断被屏蔽了

IPL是一个Solaris抽象的概念,map到sparc上时,是sparc内部的一个控制寄存器,map到IA32上时,是TPR
BTW,如果系统没有APIC,只有PIC,也是可以实现IPL的吧,mask PIC就行了?
这个东东的好处对OS而言就是对中断优先级的抽象啦

论坛徽章:
0
发表于 2008-04-05 03:12 |显示全部楼层

回复 #45 sudy 的帖子

关于中断优先级(IRQL),我觉得应该从两个方面来看:OS和硬件。两者相互联系,又相互区别:)
先从OS来看吧,为什么要IRQL呢,直接的好处就是抽象啰,不管你硬件是什么样子,我都可以抽象出一个中断优先级来。经典的例子就是Windows了,从NT4.0起就有这个东东了吧?优先级一共有32个,从0~31,数字越大优先级越高,依次是Passive,APC,DPC,Device n, clock, ipi,high。有了这个抽象之后呢,kernel开发者就幸福啦,到某个优先级,我直接raise/low就可以了。
在从硬件的角度来看,外部设备产生的中断是否有优先级,或者优先级是否可以编程,这些都是在中断控制器上实现的吧,比如PIC,设备的终端优先级就是固定了的吧,timer的中断就是最高的。
那剩下的就是怎样将OS抽象出来的IRQL map到硬件上去,这就是HAL要做的事情啦。举最简单的例子,怎样将windows的32个中断优先级map到PIC上:首先是device这一级的中断优先级和PIC上设备IRQ号对应,剩下的就是如何处理低于硬件中断的irql和高于硬件中断的irql了。对低于硬件中断的irql(passive,apc,dpc),能想到的方法就是中断优先级队列了(hmm,这个跟linux的 softirq/tasklet比较像了哇),对高于硬件中断的irql呢,那就mask掉所有的硬件中断,然后在排队就实现了吧。这也说明IRQL不一定就是在APIC下才能实现了。BTW:在nt4.0的年代已经有apic了吗(不清楚。。。)?还有一个问题就是,APIC里面一定要添加TPR吗?按照前面的推理,不用TPR,直接mask中断呢?有了TPR之后呢,或许只是方便了使用(不知道对不对,大胆假设。。)
从上面的分析,可以得出Linux里面并没有像windows那样完整的关于IRQL的东东。
个人愚见,欢迎板砖。。。

论坛徽章:
0
发表于 2008-04-05 12:17 |显示全部楼层
原帖由 sudy 于 2008-4-5 02:38 发表

IPL是一个Solaris抽象的概念,map到sparc上时,是sparc内部的一个控制寄存器,map到IA32上时,是TPR
BTW,如果系统没有APIC,只有PIC,也是可以实现IPL的吧,mask PIC就行了?
这个东东的好处对OS而言就是对 ...

多谢指教。
通过mask中断线是可以提供和TPR一样的功能。但TPR也不仅仅是mask低优先级中断的功能,还有决定当前CPU处理中断优先级的功能。
此外,前面已经说了,这种mask低优先级中断的功能对linux来说用处不大,linux本身的前后半部的中断处理可以很好的响应中断嵌套。

论坛徽章:
0
发表于 2008-04-05 14:26 |显示全部楼层
原帖由 zx_wing 于 2008-4-5 12:17 发表

多谢指教。
通过mask中断线是可以提供和TPR一样的功能。但TPR也不仅仅是mask低优先级中断的功能,还有决定当前CPU处理中断优先级的功能。
此外,前面已经说了,这种mask低优先级中断的功能对linux来说用处不 ...

指教谈不上,共同学习啦
关于mask低优先级的问题,现在的OS中,windows的DPC,linux的BH,其运行时的优先级都低于外部硬件中断,所以看起来mask低优先级从这个意义上讲是没有什么意义。但如果有一天linux将bh的优先级高于某个硬件中断优先级的时候,TPR就有用了。。。TPR这种东东至少提供了一种可能性吧,可以方便的实现IRQL

论坛徽章:
0
发表于 2008-04-06 12:27 |显示全部楼层
原帖由 sudy 于 2008-4-5 14:26 发表

指教谈不上,共同学习啦
关于mask低优先级的问题,现在的OS中,windows的DPC,linux的BH,其运行时的优先级都低于外部硬件中断,所以看起来mask低优先级从这个意义上讲是没有什么意义。但如果有一天linux将b ...

TPR倒并非无用,至少windows就用它。
只是在当前linux的中断模型下,它的用处不大。从现在的PC架构来看,后半部处理高于前半部的优先级可能性不大。对于优先级特别高的中断例如时钟完全可以关中断执行。所以只有在SMP情况下,充分使用中断re-directing功能时,TPR的效用才能真正发挥。

论坛徽章:
0
发表于 2012-08-15 10:25 |显示全部楼层
ULK中说没有优先级的概念,那么当Linux用于ARM上时,ARM是明确的有中断优先级的,那当中断同时到来时,Linux是如何响应的呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP