【问题标题】:Linux Interrupts ConcurencyLinux 中断并发
【发布时间】:2014-02-11 10:13:40
【问题描述】:

是在所有处理器上执行中断,还是只在一个处理器上执行? 例如,当我键入时,是否所有处理器都处理中断?还是只有其中一个,其余的继续进行其他任务?

【问题讨论】:

  • 只有一个处理器被中断。这是由硬件定义的,而不是由操作系统定义的。
  • 那么如果我有 8 个内核,我可以同时处理键盘、网络、IO、鼠标等 - 中断吗?
  • 可能最多同时处理8个中断;禁止对中断处理程序中的关键部分等进行限制。

标签: linux kernel interrupt


【解决方案1】:

这是低级处理的高级视图。我描述的是一个简单的典型架构,实际的架构可能更复杂,或者在细节方面有所不同。

当中断发生时,处理器会查看中断是否被屏蔽。如果是,那么在它们被揭开之前什么都不会发生。当中断被取消屏蔽时,如果有任何挂起的中断,处理器就会选择一个。

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

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

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

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

【讨论】:

  • 信息量很大,但这不是问题的答案。
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多