什么是软件和硬件中断?如何处理?


43

我不确定我是否了解硬件和软件中断的概念。

如果我理解正确,则硬件中断的目的是引起CPU的注意,这是实现CPU多任务处理的一部分。

  1. 那么什么发出硬件中断?它是硬件驱动程序过程吗?
  2. 如果是,硬件驱动程序进程在哪里运行?如果它在CPU上运行,那么它就不必通过硬件中断来引起CPU的注意,对吗?那么它在其他地方运行吗?
  3. 硬件中断是直接中断CPU,还是先联系内核进程,然后内核进程联系/中断CPU?

另一方面,我认为软件中断的目的是让当前正在CPU上运行的进程请求一些资源。

  1. 有哪些资源?它们都是以运行过程的形式存在吗?例如,CPU驱动程序进程和内存驱动程序进程是否代表CPU和内存资源?I / O设备的驱动程序进程是否代表I / O资源?该进程是否还希望与其他正在运行的进程进行资源通信?
  2. 如果是,软件中断是否通过内核进程间接联系进程(代表资源)?与硬件中断不同,软件中断从不直接中断CPU,而是中断/联系内核进程,对吗?

Answers:


55

硬件中断实际上并不是CPU多任务处理的一部分,但可以驱动它。

  1. 硬件中断由磁盘,网卡,键盘,时钟等硬件设备发出。每个设备或一组设备将具有自己的IRQ(中断请求)线。CPU将基于IRQ将请求分派到适当的硬件驱动程序。(硬件驱动程序通常是内核中的子例程,而不是单独的进程。)

  2. 处理中断的驱动程序在CPU上运行。CPU因处理中断而被中断,因此不需要其他任何操作即可引起CPU的注意。在多处理器系统中,中断通常只会中断一个CPU。(在特殊情况下,大型机具有硬件通道,这些通道可以处理多个中断而无需主CPU的支持。)

  3. 硬件中断直接中断CPU。这将导致内核进程中的相关代码被触发。对于需要花费一些时间来处理的过程,中断代码可能允许其自身被其他硬件中断所中断。

    在计时器中断的情况下,内核调度程序代码可能会挂起正在运行的进程,并允许另一个进程运行。调度程序代码的存在使多任务处理成为可能。

软件中断的处理与硬件中断非常相似。但是,它们只能由当前正在运行的进程生成。

  1. 通常,软件中断是对I / O(输入或输出)的请求。这些将调用内核例程,这些例程将安排I / O发生的时间。对于某些设备,I / O将立即完成,但磁盘I / O通常会排队等待稍后再进行。根据完成的I / O,可能会挂起进程,直到I / O完成,从而使内核调度程序选择另一个要运行的进程。I / O可能在进程之间发生,并且通常以与磁盘I / O相同的方式调度处理。

  2. 软件中断仅与内核对话。内核负责调度其他需要运行的进程。这可能是管道末端的另一个过程。一些内核允许设备驱动程序的某些部分存在于用户空间中,并且内核将调度该进程在需要时运行。

    没错,软件中断不会直接中断CPU。只有当前正在运行的代码才能生成软件中断。中断是请求内核为正在运行的进程做一些事情(通常是I / O)。一个特殊的软件中断是Yield调用,它要求内核调度程序检查是否可以运行其他进程。

对评论的回应:

  1. 对于I / O请求,内核将工作委托给适当的内核驱动程序。该例程可以将I / O排队等待以后处理(磁盘I / O常见),或者在可能的情况下立即执行。队列通常在响应硬件中断时由驱动程序处理。一个I / O完成后,队列中的下一项将发送到设备。

  2. 是的,软件中断避免了硬件信令步骤。生成软件请求的进程必须是当前正在运行的进程,因此它们不会中断CPU。但是,它们确实会中断调用代码的流程。

    如果硬件需要让CPU执行某项操作,则会导致CPU中断对正在运行的代码的关注。CPU会将其当前状态压入堆栈,以便以后可以返回到正在执行的操作。该中断可能会停止:正在运行的程序;内核代码处理另一个中断;或空闲过程。


谢谢!(1)在软件中断中,内核进程中的I / O设备驱动程序例程是否完成I / O操作?(2)软件中断所经过的路径比硬件中断所经过的路径短一步吗?换句话说,对于软件中断:内核程序内的软件程序->设备驱动程序例程;对于硬件中断:内核进程中的硬件-> CPU->设备驱动程序例程?
蒂姆

谢谢!硬件中断导致CPU将其当前状态压入堆栈是正确的,以便硬件驱动程序可以在CPU上运行,然后在CPU上弹出中断的进程,对吗?软件中断是否还会导致在CPU上运行的进程被推入堆栈,以便可以在CPU上运行所请求的服务?
蒂姆(Tim)

任何一个中断都会导致将状态压入堆栈。这使系统在完成中断后可以重新加载状态。
BillThor

谢谢!如果请求的服务不会在CPU上运行,例如在IO设备而不是CPU上运行的IO操作,并且请求进程可以继续运行而无需等待请求的服务完成,则请求进程是否仍将放入堆栈中?
蒂姆(Tim)

通常,同步读取I / O读操作,直到I / O完成,该过程才会运行。对于阅读,您几乎总是想要这个。写操作通常异步发生,以使进程继续运行。
BillThor 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.