【发布时间】:2012-02-28 07:03:08
【问题描述】:
我已阅读(并研究过)有关中断处理的内容。
我一直无法理解的是,我们如何知道从中断处理程序返回到(PC / IP)的位置。
据我了解:
- 中断是由设备(比如键盘)引起的
- 在运行进程下调用相关处理程序。也就是说,不执行到 OS 的上下文切换。
- 中断处理程序完成,并将控制权交还给正在运行的应用程序。
上面描述的过程,这是我对中断处理的理解,发生在当前运行进程的上下文中。所以它类似于方法调用,而不是上下文切换。
但是,由于我们实际上并未调用中断处理程序,因此我们没有机会将当前 IP 推入堆栈。
那么我们如何知道从中断中跳回的位置。我很困惑。
希望有任何解释,包括简单地指出一个很好的 pdf/ppt 专门解决这个问题的单行词。
[我一般是指Linux和C代码下的上述过程-但欢迎所有好的答案]
【问题讨论】:
-
有点迂腐,但上面的第 (2) 点并不是这么说的。在中断时,核心肯定会在 ring 0 内核代码中切换到“操作系统”。内核可以在不更改 CR3 页表指针的情况下处理中断,因此从这个意义上说,没有上下文切换。由于这个原因,用户进程都映射了全局内核页表。
-
@srking:我会重新变得迂腐 - 很明显,处理程序已在操作系统中注册。同样在任何正常情况下,处理程序本身都将位于内核地址空间中。但是,正在运行的进程将继续运行 - 所以是的,没有上下文切换。此外,任何花费的 CPU 周期都将计入该进程的计费。
标签: operating-system interrupt interrupt-handling context-switch