motalelf 发表于 2008-03-28 10:31

它的仲裁机制应该是:
1) 每CPU有一个固定的优先级,它将不会理会这个定值以下的中断。
2) CPU正在处理的中断,有一个优先级,在EOI之前,CPU也不会理会这个优先级以下的中断

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

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

zx_wing 发表于 2008-03-28 11:45

原帖由 albcamus 于 2008-3-28 10:23 发表 http://linux.chinaunix.net/bbs/images/common/back.gif


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

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

关于ACK和EOI等, 我开个新贴。
换个帖也好,linux不使用TPR的优先级功能。
没有优先级功能,只有中断平衡功能

zhu616 发表于 2008-03-29 04:52

mustang88 发表于 2008-04-01 23:30

:em14: :em14:

sudy 发表于 2008-04-05 02:38

原帖由 zx_wing 于 2008-3-26 15:24 发表 http://linux.chinaunix.net/bbs/images/common/back.gif

那就是IA架构CPU TPR寄存器的功能嘛。
但这有什么好处呢?前面已经说过了,这样做的唯一用处就是减少了中断嵌套,因为低优先级的中断被屏蔽了
IPL是一个Solaris抽象的概念,map到sparc上时,是sparc内部的一个控制寄存器,map到IA32上时,是TPR
BTW,如果系统没有APIC,只有PIC,也是可以实现IPL的吧,mask PIC就行了?
这个东东的好处对OS而言就是对中断优先级的抽象啦

sudy 发表于 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的东东。
个人愚见,欢迎板砖。。。:em02:

zx_wing 发表于 2008-04-05 12:17

原帖由 sudy 于 2008-4-5 02:38 发表 http://linux.chinaunix.net/bbs/images/common/back.gif

IPL是一个Solaris抽象的概念,map到sparc上时,是sparc内部的一个控制寄存器,map到IA32上时,是TPR
BTW,如果系统没有APIC,只有PIC,也是可以实现IPL的吧,mask PIC就行了?
这个东东的好处对OS而言就是对 ...
多谢指教。
通过mask中断线是可以提供和TPR一样的功能。但TPR也不仅仅是mask低优先级中断的功能,还有决定当前CPU处理中断优先级的功能。
此外,前面已经说了,这种mask低优先级中断的功能对linux来说用处不大,linux本身的前后半部的中断处理可以很好的响应中断嵌套。

sudy 发表于 2008-04-05 14:26

原帖由 zx_wing 于 2008-4-5 12:17 发表 http://linux.chinaunix.net/bbs/images/common/back.gif

多谢指教。
通过mask中断线是可以提供和TPR一样的功能。但TPR也不仅仅是mask低优先级中断的功能,还有决定当前CPU处理中断优先级的功能。
此外,前面已经说了,这种mask低优先级中断的功能对linux来说用处不 ...
指教谈不上,共同学习啦
关于mask低优先级的问题,现在的OS中,windows的DPC,linux的BH,其运行时的优先级都低于外部硬件中断,所以看起来mask低优先级从这个意义上讲是没有什么意义。但如果有一天linux将bh的优先级高于某个硬件中断优先级的时候,TPR就有用了。。。TPR这种东东至少提供了一种可能性吧,可以方便的实现IRQL

zx_wing 发表于 2008-04-06 12:27

原帖由 sudy 于 2008-4-5 14:26 发表 http://linux.chinaunix.net/bbs/images/common/back.gif

指教谈不上,共同学习啦
关于mask低优先级的问题,现在的OS中,windows的DPC,linux的BH,其运行时的优先级都低于外部硬件中断,所以看起来mask低优先级从这个意义上讲是没有什么意义。但如果有一天linux将b ...
TPR倒并非无用,至少windows就用它。
只是在当前linux的中断模型下,它的用处不大。从现在的PC架构来看,后半部处理高于前半部的优先级可能性不大。对于优先级特别高的中断例如时钟完全可以关中断执行。所以只有在SMP情况下,充分使用中断re-directing功能时,TPR的效用才能真正发挥。

leon_yu 发表于 2012-08-15 10:25

ULK中说没有优先级的概念,那么当Linux用于ARM上时,ARM是明确的有中断优先级的,那当中断同时到来时,Linux是如何响应的呢?
页: 1 2 3 4 [5] 6
查看完整版本: LINUX的中断处理是否没有中断优先级的概念?