【发布时间】:2011-12-07 15:01:27
【问题描述】:
我想知道程序在执行时如何查看和使用中断。我已经阅读了有关中断的级别、边缘、混合和消息类型的信息,并且设备会发送一个脉冲来发出中断信号,但是程序如何看到该中断?还是程序根本就可以看到中断? 感谢您对此的任何帮助
【问题讨论】:
-
我们谈论的是在 PC 或微控制器上运行的程序吗?
标签: architecture system execution interrupt-handling
我想知道程序在执行时如何查看和使用中断。我已经阅读了有关中断的级别、边缘、混合和消息类型的信息,并且设备会发送一个脉冲来发出中断信号,但是程序如何看到该中断?还是程序根本就可以看到中断? 感谢您对此的任何帮助
【问题讨论】:
标签: architecture system execution interrupt-handling
一般来说,中断的发生会导致处理器停止执行它正在执行的操作,记住它停止的位置并转到一段特殊的代码,该代码会以某种方式对其做出反应。硬件始终检查中断,无论处理器目前正在做什么。所以它转到了一段特殊的代码,即所谓的interrupt handler,在它完成之后,它会返回到它之前正在做的事情。被中断的程序没有注意到任何东西。
中断处理程序所在的地址取决于处理器架构和中断类型。有时它需要位于内存中的固定点,其地址在处理器的数据表中给出。大多数情况下,内存中的固定地址处有一个特殊的数组intrrupt vector table,它存储处理不同类型中断的过程的地址。
在 PC 或任何其他稍微先进的电子设备上,中断处理程序和中断向量表是操作系统的一部分。除非您正在编写操作系统或对嵌入式设备进行编程,否则您根本不需要被中断所困扰。
【讨论】:
取决于操作系统(如果有)。在我们最熟悉的通用“桌面”操作系统上,用户模式程序永远不必直接处理硬件中断。来自键盘、鼠标、磁盘、网卡等外围设备的中断由驱动程序处理。通常,“程序”中的线程会发出读/写请求 API 调用,并且在请求完成之前调用不会返回 - 这是程序最接近硬件的地方。在内核中,调用线程被阻塞,直到被寻址的驱动程序发出请求的 I/O 已完成的信号。
【讨论】: