中断优先级和中断线程优先级

中断是一种当今很重要的硬件与cpu通信的方式,主板上集成很多硬件,那么就可以认为会有很多中断,但是cpu的数目往往要少得多,那么肯定会有多个硬件中断竞争一个cpu的情况,任何系统(包括自然界)都不能乱套,肯定会有一定的机制防止事情变得不可控制,这种机制的结果就是使一切变得有序化,出现多竞争一的情况时,最常用的方法就是排队,而排队有很多策略,比如先来先服务,优先级队列,加权优先级队列,多级队列等等。这是硬件方面的情况,那么cpu方 面呢,cpu的中断引脚往往只有一个,这就是说,排队必须在中断到达cpu前进行,所以中断控制器的作用就体现出来了,有了中断控制器,我们就可以把控制 器后面的硬件当成黑盒子了,只要管控制器里面会接受很多中断并且仲裁它们就可以了。
现在中断控制器和cpu都讨论了,那么终极控制者--操作系统还没有登场呢,最终需要os来控制着一切,就是说,控制器和cpu提供机制,而os提供策 略,中断优先级是中断控制器的机制,操作系统可以更改,而中断线程化是os为了更好的控制中断而实现的一种策略,不同os控制中断的方式不同,而中断线程 化只是其中的一种。
像unix比如solaris都是中断线程化的,线程拥有自己的优先级,优先级高的中断线程当然可以抢占优先级低的中断线程(如果内核可抢占的话),但是由于中断是cpu外界的事件报告,所以它的到来不受cpu控制,那么中断发生的那一瞬间,中断并不是线程化的,而是也像linux那样进入中断处理,然后 将其对应的中断线程唤醒,此线程就开始参与调度参与抢占了。
那么中断控制器处排队的中断优先级和中断线程的线程优先级有何关系呢?按照道理来说就是一个线性正比关系,事实上也是这样,每个中断控制器都实现了中断优先级管理,大部分是通过寄存器实现的,比如,x86芯片组的tpr寄存器,sun sparc也有类似的机制,比如通过pil。
ia架构的tpr寄存器可以将所有低优先级的中断屏蔽掉,并且可以限制嵌套次数。但是在linux中并没有用到这里的tpr,它将中断一视同仁,不区分由 县级,用最短的时间处理上半部,然后在下半部处理耗时任务,这一方面是效率需要(该来的就让它来,阻止并不是好事!),二来是为了移植性,windows 只在x86,soaris只在sparc和x86,这些平台都实现了硬件的中断优先级概念,而linux基于多平台。引用 :
在上半部没有实现中断优先级正是因为linux的中断处理是分上下部分的。如果把中断处理放在一起,恰恰需要实现中断优先级。
试想一下,一个高优先级中断还没处理完,就被低优先级中断打断了,而低优先级中断频繁发生,会导致高优先级中断得不到处理,不正需要屏蔽低优先级中断吗?
而linux中断分两部分,所以高优先级中断不怕被打断,因为低优先级中断的上半部处理会马上完成。注意,在中断嵌套的时候linux只处理中断的上半部哦,在进行下半部之前有个判断如下:

QUOTE:

if (!in_interrupt() && local_softirq_pending())
  invoke_softirq();
//引用完了
ipl是solaris里面的一个抽象概念,对应中断线程优先级,irql是windows里的一个同样意义的抽象概念,它们都实现了低优先中断屏蔽以的 作用,不同的是solaris中断是线程化的,而windows是在任意上下文的,后者可能在唤醒中断线程后马上就可以恢复ipl,而前者必须执行完上半部后才可;linux并没有用这些繁琐的东西,它直接允许中断嵌套,不屏蔽任何中断,可谓大气~~
必须理解两个概念,中断响应和中断执行,前者影响到吞吐,后者受os机制(调度,softirq...)影响,中断只要被响应,至于怎么执行就看我的了,linux正是这么做的,它百分百响应任何中断,所以效率高。在中断线程实现中,有两种方法,一个是预先为每个中断设置线程,二是设置线程池。中断线程化有个很大的优势就是实时化,因为实时线程可以将优先级调到比中断线程还高(windows似乎做不到,因为比硬件中断还高的irql会受到很多限制, 比如,分页内存的访问,调度,睡眠等等)

原文链接: https://blog.csdn.net/dog250/article/details/5302745

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    中断优先级和中断线程优先级

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/410739

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 下午12:12
下一篇 2023年4月26日 下午12:12

相关推荐