中断系统

了解更多
由CPU 或硬件产生事件,打断当前正常程序运行流程,执行指定程序,执行完中断处理程序后恢复正常程序运行。有如下两类:

  • 异常, 由执行程序产生,比如总线访问异常,除零运算。
  • 中断,外部硬件产,比如外部gpio, 网络中断等。

大多数中断是可以被屏蔽,也有部分不能屏蔽。更多细节参考CPU 芯片手册,类似MCU 中断,同架构的处理器设计类似。
这里更多讨论Linux 操作系统对中断设计思路。Linux 将中断处理分为bottom/top 两部分,即将紧急事件快速处理,对不那么紧急的事件延迟到线程中处理,这样增加内核的中断响应、同时也平衡中断性能。
有以下几种处理思路, 从延迟上看,soft-irq < tasklet < workqueue.

soft irq

了解更多
一般驱动开发者不常用,主要用于低延迟处理,内核设计以下类型的软件中断,是静态设定的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//inlude/linux/interrupt.h
enum
{
HI_SOFTIRQ=0,
TIMER_SOFTIRQ,
NET_TX_SOFTIRQ,
NET_RX_SOFTIRQ,
BLOCK_SOFTIRQ,
IRQ_POLL_SOFTIRQ,
TASKLET_SOFTIRQ,
SCHED_SOFTIRQ,
HRTIMER_SOFTIRQ,
RCU_SOFTIRQ,
NR_SOFTIRQS
};

tasklet

由soft-irq (TASKLET_SOFITIRQ 和 HI_SOFTIRQ)实现tasklet,

线程处理

  • 工作队列workueue

  • 中断线程化处理