1.相关名词
轮询: CPU不断的去读硬件状态。另一种是当硬件完成某种事件后,给 CPU一个中断,让 CPU 停下手上的事情,去处理这个中断。
内部中断: 是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执行期间。
异步中断:是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断。
IRQ:IRQ的全称是“Interrupt ReQuest”,即“中断要求。
2.中断常用的API
函数 | 主要功能 |
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) | 注册IRQ |
void free_irq(unsigned int, void *) | 释放IRQ |
local_irq_enable() | 激活当前CPU中断 |
local_irq_disable() | 禁止当前CPU中断 |
void enable_irq(unsigned int irq) | 激活指定中断线 |
void disable_irq(unsigned int irq) | 禁止指定中断线 |
void disable_irq_nosync(unsigned int irq) | 禁止指定中断线 |
注:最后一个函数调用irq_chip中disable禁止指定中断线,所以不会保证中断线上执行的中断服务程序已经退出。
3.技术特点
Linux系统把中断的意义扩展了,对于按键中断等硬件产生的中断,称之为“硬件中断”(hard irq)。每个硬件中断都有对应的处理函数,比如按键中断、网卡中断等。这里可以理解为对硬件中断的处理是用数组来实现的,数组里存放的是函数指针。