it-swarm.cn

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

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

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

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

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

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

硬件中断实际上并不是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会将其当前状态压入堆栈,以便以后可以返回到正在执行的操作。该中断可能会停止:正在运行的程序;内核代码处理另一个中断;或空闲过程。

57
BillThor