首页 文章

中断处理程序是这样运行的,持续多长时间?

提问于
浏览
1

在查看中断处理程序(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)暂停当前内核进程 . 但是这里的情况是什么?根据Wiki的描述,内核不会产生一个运行ISR的新进程, context established at the beginning of interrupt handling 听起来就像被中断进程中的另一个函数调用 . 中断处理程序使用 interrupted process 的堆栈(上下文)来运行吗?或者内核会分配一些其他内存空间/资源来运行它?

2)因为这里ISR不是可由调度程序进入睡眠状态的“进程”类型 . 它无论如何都必须完成?甚至不受任何时间片限制?如果ISR挂起,系统如何处理呢?

对不起,如果问题是根本的 . 我还没有深入研究这个问题 .

谢谢,

2 回答

  • 0

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

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

    因为这里ISR不是可由调度程序进入睡眠状态的“进程”类型 . 它无论如何都必须完成?

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

    甚至不受任何时间片限制?如果ISR挂起,系统如何处理呢?

    它会挂起,特别是如果它是一个单CPU系统 . 它可能会报告错误,然后挂起/重新启动 . 事实上,在Windows中(因为Vista?)挂起或执行延迟程序( DPCs ),这些程序不是ISR但有点像它们(它们在优先级/抢占方面在ISR和线程之间执行)会导致"bugcheck" . 操作系统监视DPC的执行,它可以在多个CPU上同时执行 .

    无论如何,除了系统重置之外,它还没有出路 . 查找 watchdog timers . 它们有助于发现这种糟糕的挂起并执行重置 . 许多电子设备都有它们 .

  • 0
    • 将中断处理程序视为在其自己的线程中以高优先级运行的函数 . 当设备设置中断时,暂停任何其他优先级最低的活动,并执行ISR . 这就像线程上下文切换 .

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

相关问题