中断分层机制之软中断

Hntea bio photo By Hntea

概念:

软中断是模拟硬件中断的概念,实现宏观上的异步执行效果。其实tasklet也是基于软中断实现的。

软中断和硬中断的区别

  1. 硬中断是外部设备对CPU的中断,软中断时程序对内核的中断

  2. 信号是由内核(或者其他进程)对某个进程的软中断

  3. 结构表示

struct softirq_action
{

void (*action)(struct softirq_action *);

};

注:该结构体包含软中断处理函数指针和传递给该函数的参数

编程相关函数

  • open_softirq(): 用于注册软中断对应的处理函数
void open_softirq(int nr, void (*action)(struct softirq_action *))
{
	softirq_vec[nr].action = action;
}
  • raise_softirq():触发一个软中断
void raise_softirq(unsigned int nr)
{
	unsigned long flags;

	local_irq_save(flags);

	raise_softirq_irqoff(nr);

	local_irq_restore(flags);
}

编程模型

a) 定义一个软中断结构,如果需要传递参数给中断处理函数的话

b) 构建软中断处理函数

c) 注册软软中断

d) 在某个程序中触发软中断