和Linux内核打交道,中断是绕不开的概念。
一、日常生活中的“中断”
在日常生活中,中断常用作(被)打断的含义,比如,你在厨房烧水,打开煤气后, 你就转身看NBA了,等水壶响的时候,你知道水开了,然后去厨房关煤气并且把水壶里的水灌入暖壶,OK, 继续看NBA,再喝点茶…再比如,想象你是一名山东或者湖北的高三学生,你身处军事化管理的校园, 在自习课上,数学老师让你复习数学,这样就必须停止复习历史…
二、经典书籍的说法
日常生活中的中断让你停下手头上的事情,去干另一件事情, 那么Linux内核中的中断时什么样那?中断(Interrupt)在一些经典书籍上的说法如下:
Understatnd the Linux Kernel 3rd:
An interrupt is usually defined as an event that alters the sequence of instructions executed by a processor. Such events correspond to electrical signals generated by hardware circuits both inside and outside the CPU chip.
(中断经常被定义为通知处理器执行执行序列的事件。这类事件与CPU内部或者CPU外部硬件产生的电信号相关.)
Linux Kernel Development 3rd:
How can the processor work with hardware without impacting the machine’s overall performance? One answer…A better solution is to provide a mechanism for the hardware to signal to the kernel when attention is needed.This mechanism is called an interrupt… Interrupts enable hardware to signal to the processor…
(处理器与硬件打交道,如何才能不影响整体性能(CPU快,外围硬件慢),一种方式是…(指轮训). 当硬件需要获得(内核)关注时,硬件主动向内核发出信号是一种较好(相对轮训)的机制… 中断使硬件能够主动向处理器发出信号…)
Professional Linux Kernel Architecture: Two types of interrupt are distinguished:
- Hardware Interrupts — Are produced automatically by the system and connected peripherals. They support more efficient implementation of device drivers, but are also needed by the processor itself to draw attention to exceptions or errors that require interaction with the kernel code.
- SoftIRQs — Are used to effectively implement deferred activities in the kernel itself.
(硬件中断:由系统和与之连接的外设自动产生。他们用于支持更高效地实现设备驱动程序,也用于处理器自身对异常和错误的关注,这些是需要与内核代码进行交互的 软中断:用于有效地实现内核中的延期操作)
三、归纳中断特点
不难从定义中看出,中断的定义过程中,有几个主体:处理器(processor)、硬件(hardware)和系统(system). 硬件通过中断机制向处理器发出请求信号,处理器收到信号后执行硬件的请求,而系统为整个中断机制做软件上的保障和实现。 总结一下:
- 中断是一种硬件主动请求处理器处理其产生的工作的机制。
- 中断解决的一个问题是处理器快,外设慢的问题。
- 与中断对应的是轮训。
- 中断信号的产生是一种硬件电信号。
- 中断的来源也可以是处理器内部。
四、总结
抽象一些的说,中断就是这样一种模式:A和B两类主体,A和B经常按照串行流程完成某项工作, B干完一个流程,A继续下一个流程,主体A的工作效率高过主体B很多,主体B完成自己的工作后, 主动通知A继续与B相关的下一步工作,A根据B的通知,去完成相关的工作。而在Linux内核中, A就是处理器,B就是外设(和处理器自身)。
在Linux内核中,中断机制主要确保上述流程能够兼容、高效、稳定的运行, 而我们研究和学习的中断机制,就是Linux内核中断机制实现的原理、软件架构以及简单的硬件功能。