计算机中断

计算机中断

1 什么是中断

中断[1](英语:Interrupt),又称插断,在计算机科学中是指处理器接收到来自硬件或软件的信号,提示发生了某个事件,应予以注意,这种情况就称为中断。

2 中断是如何工作的

计算机中的中断机制是CPU和操作系统共同配合的结果。

  1. CPU层面的机制
    中断在硬件层面是由CPU管理的。CPU中内置了处理中断的硬件电路,当接收到中断信号时,它会暂停当前正在执行的指令,将程序计数器(PC)和相关寄存器的内容保存起来,然后跳转到一个预定义的中断处理程序的入口地址。CPU需要具备检测中断信号、保存现场(当前程序的状态)、并执行相应的中断处理程序的能力。

  2. 操作系统层面的机制
    中断处理程序(Interrupt Service Routine, ISR)通常是由操作系统编写和管理的。操作系统负责:

    • 注册和管理中断处理程序。
    • 响应不同的中断类型(如硬件中断、软件中断、时钟中断等)。
    • 保存和恢复进程的上下文,确保中断处理完毕后能够恢复正常程序执行。
    • 控制任务调度,在多任务环境下,当中断发生时,操作系统会决定是继续运行当前任务,还是切换到其他任务。

因此,中断机制的基础来自于CPU硬件支持,而操作系统负责管理中断的高层逻辑。两者紧密协作,确保中断处理的高效和系统的正常运行。

一般来说,中断的优先级高于普通进程

3 中断的种类

3.1 硬件中断

硬件中断是由计算机外部硬件设备(如键盘、鼠标、硬盘、网络接口等)或内部硬件组件(如定时器、控制器)生成的信号,用来通知CPU发生了某个事件,要求CPU暂停当前任务并立即进行处理。这是一种异步的通信方式,能够确保外部设备与CPU高效互动。

3.2 软件中断

软件中断是由程序通过特定的指令主动触发的中断,它通常用于实现系统调用或处理特定的程序异常。与硬件中断不同,软件中断是由软件发出的,而不是由外部设备或硬件组件引发的。

3.3 Linux 中断处理

Linux 将中断处理过程分成了两个阶段,也就是上半部和下半部:

3.3.1 查看中断

                    CPU0       CPU1
          HI:         32          4
       TIMER:     217168     160788
      NET_TX:      58113          1
      NET_RX:      73923         35
       BLOCK:      12544         10
    IRQ_POLL:          0          0
     TASKLET:       2802         54
       SCHED:     283839     258237
     HRTIMER:          0          0
         RCU:     116166     128092

具体字段解释如下:

  1. HI:高优先级软中断,用于处理非常紧急的软中断任务,极少使用。
  2. TIMER:定时器软中断,系统定时器触发的中断。用于定期任务(如进程调度、系统计时)的处理。
  3. NET_TX:网络传输(发送)软中断,处理网络数据包的发送。
  4. NET_RX:网络接收软中断,处理网络数据包的接收。
  5. BLOCK:块设备 I/O 的软中断,处理硬盘等块设备的 I/O 操作。
  6. BLOCK_IOPOLL:块设备 I/O 轮询软中断,处理块设备的 I/O 轮询操作,通常在高性能场景中用到。
  7. TASKLET:任务队列(Tasklets),用于延迟执行一些非紧急任务。
  8. SCHED:调度软中断,触发进程调度相关的任务。
  9. HRTIMER:高精度定时器软中断,用于高精度计时任务。
  10. RCU:RCU(Read-Copy Update)软中断,RCU 是 Linux 内核中的一种同步机制,通常用于读写锁的管理和延迟删除任务。

软中断实际上是以内核线程的方式运行的,每个 CPU 都对应一个软中断内核线程,这个软中断内核线程就叫做 ksoftirqd/CPU 编号。

wudanyang@dy-turbo-vm:~$ ps aux | grep softirq
root          16  0.0  0.0      0     0 ?        S    02:08   0:00 [ksoftirqd/0]
root          24  0.0  0.0      0     0 ?        S    02:08   0:00 [ksoftirqd/1]

4 参考


  1. 中断 - 维基百科,自由的百科全书: https://zh.wikipedia.org/wiki/中斷 ↩︎


本文总阅读量