3

在查看中断处理程序(ISR)的运行方式时,我有些困惑。在 Wiki http://en.wikipedia.org/wiki/Context_switch中,它通过 2 个步骤描述了中断处理:

1)上下文切换

When an interrupt occurs, the hardware automatically switches a part of the 
context (at least enough to allow the handler to return to the interrupted code).
The handler may save additional context, depending on details of the particular
hardware and software designs.

2)运行处理程序

The kernel does not spawn or schedule a special process to handle interrupts, 
but instead the handler executes in the (often partial) context established at 
the beginning of interrupt handling. Once interrupt servicing is complete, the 
context in effect before the interrupt occurred is restored so that the 
interrupted process can resume execution in its proper state.

假设中断处理程序是上半部分,用于内核空间设备驱动程序(我假设用户空间设备驱动程序中断遵循相同的逻辑)。

当中断发生时:

1) 当前内核进程被挂起。但context这里的情况如何?根据 Wiki 的描述,内核不会产生新的进程来运行 ISR,而且context established at the beginning of interrupt handling, 听起来很像被中断进程中的另一个函数调用。那么中断处理程序是否使用interrupted process's stack(context) 来运行?或者内核会分配一些其他内存空间/资源来运行它?

2) 因为这里的 ISR 不是可以被调度程序置于睡眠状态的“进程”类型。无论如何都必须完成?甚至不受任何时间片的限制?如果 ISR 挂了怎么办,系统如何处理?

对不起,如果这个问题是基本的。我对这个主题的研究时间还不够长。

谢谢,

4

2 回答 2

1

那么中断处理程序是否使用被中断进程的堆栈(上下文)来运行?或者内核会分配一些其他内存空间/资源来运行它?

这取决于 CPU 和内核。一些 CPU 使用当前堆栈执行 ISR。其他人会自动切换到特殊的 ISR 堆栈或内核堆栈。如果需要,内核也可以切换堆栈。

因为这里的 ISR 不是可以被调度程序置于睡眠状态的“进程”类型。无论如何都必须完成?

是的,否则你冒着挂起电脑的风险。你看,中断中断进程和线程。事实上,大多数 CPU 没有线程或进程的概念,对它们来说,中断/抢占什么并不重要(它甚至可以是另一个 ISR!),它只是在 ISR 完成之前不会再次执行。

甚至不受任何时间片的限制?如果 ISR 挂了怎么办,系统如何处理?

它挂起,特别是如果它是单 CPU 系统。它可能会报告错误,然后挂起/重新启动。事实上,在 Windows 中(从 Vista 开始?)挂起或执行延迟过程太慢DPCs( . 操作系统监视 DPC 的执行,它可以在多个 CPU 上同时执行此操作。

无论如何,这不是正常情况,通常除了系统重置之外别无他法。抬头看watchdog timers。它们有助于发现此类不良挂起并执行重置。许多电子设备都有它们。

于 2012-10-06T09:59:52.070 回答
0
  1. 将中断处理程序视为在其自己的线程中以高优先级运行的函数。当设备设置中断时,任何其他优先级最低的活动都将暂停,并执行 ISR。这就像线程上下文切换。

  2. 当 ISR 挂起时(例如,在无限循环中),整个计算机都会挂起 - 假设我们正在谈论 PC 驱动程序中的 ISR。不允许任何具有低于该 ISR 优先级的活动,因此计算机看起来已死机。但是,如果附加了硬件远程调试器命令,它仍然会对硬件远程调试器命令作出反应。

于 2012-10-06T08:47:41.500 回答