Linux中断冲突



中断是在所有处理器上执行,还是只在一个处理器上执行?例如,当我打字时,所有的处理器都处理中断吗?还是只有其中一个,其余的继续其他tak?

下面是低级别处理的高级视图。我描述的是一个简单的典型体系结构,真实的体系结构可能更复杂,或者在这种细节级别上不重要的方面有所不同。

当中断发生时,处理器会查看中断是否被屏蔽。如果他们是,什么都不会发生,直到他们被揭穿。当中断被取消屏蔽时,如果有任何挂起的中断,处理器会选择一个。

然后,处理器通过分支到存储器中的特定地址来执行中断。该地址处的代码称为中断处理程序。当处理器在那里分支时,它屏蔽中断(因此中断处理程序具有独占控制),并将一些寄存器的内容保存在某个位置(通常是其他寄存器)。

中断处理程序做它必须做的事情,通常是通过与触发中断的外围设备通信来发送或接收数据。如果中断是由计时器引发的,则处理程序可能会触发操作系统调度程序,切换到不同的线程。当处理程序完成执行时,它执行一个特殊的中断返回指令,该指令恢复保存的寄存器并取消屏蔽中断。

中断处理程序必须快速运行,因为它可以防止任何其他中断运行。在Linux内核中,中断处理分为两部分:

"上半部分"是中断处理程序。它做了最低限度的必要工作,通常与硬件通信,并在内核内存中的某个位置设置标志。"下半部分"执行任何其他必要的处理,例如将数据复制到进程内存中、更新内核数据结构等。由于它在启用中断的情况下运行,它可能会花费时间,甚至会阻塞等待系统的其他部分。

最新更新