Adi*_*Adi 10 linux irq linux-device-driver linux-kernel
当Linux内核中同时发生两个中断时会发生什么?
如果该处理器具有多个CPU,则中断可以同时在不同的CPU内核上运行.
当处理器响应中断时,中断处理的某些敏感阶段受到另一个中断的中断保护.但是,一般情况下,中断处理程序的大部分执行本身是可中断的,这意味着可以暂停执行处理程序以获取另一个中断,其处理程序必须在原始处理程序可以运行之前运行完成(返回)重启:中断嵌套.
通常有一个优先级方案:某些中断可以中断某些其他中断的处理程序,而其他中断则被阻止.(从历史上看,有许多方案:从固定数字优先级到完全灵活的掩码.)通常,在执行自己的处理程序时阻塞相同的中断是有意义的.但这在某些情况下不起作用(例如物理中断线或中断号在多个设备之间共享).
当两个中断请求同时被引发,并且两个中断请求都被取消屏蔽时,给定的处理器只能响应其中一个.从历史上看,这由一些硬件(可能称为"中断控制器")处理,该硬件多路复用中断线并基于某种优先级方案(可能是可编程的,或者是固定的)来决定哪个中断通过.无法同时处理两个中断:至少服务中断操作的一些关键部分必须序列化:CPU确认中断并调度处理程序时的部分.在某些时候,CPU可以准备好处理仍处于待处理状态的其他中断.
在某些实时操作系统中,中断被分配给实时线程.当收到中断时,内核调度与该中断对应的线程; 然后线程为它服务.一旦调度线程,系统就会准备好下一个中断,这将调度另一个线程,依此类推.线程按优先级排序,因此如果优先级较高的中断调度优先级较高的线程,它将抢占较低优先级的中断优先级较低的线程.在这种系统中,如果只有一个处理器,中断仍然没有被同时处理:它只是抢占式多任务处理.
使用多个处理器或内核,可以在不同的内核上独立执行中断服务程序.某些中断只能在特定内核上执行,因为它们与内核有关:例如,一个中断告诉处理器它有来自另一个处理器的重要消息,或者本地完全生成的内容,例如本地可编程中断定时器.与特定的核心联系在一起.特定于设备的中断可以编程为转到特定的CPU或以某种方式指向任意CPU.这些都是特定于硬件的:细节取决于系统的设计方式.可能存在一个系统,其中所有外部中断都绑定到硬件级别的一个特定处理器,Linux可以支持这样的系统.
| 归档时间: |
|
| 查看次数: |
7237 次 |
| 最近记录: |