一、软中断的触发时机
软中断有4个执行时机
1、从系统调用中返回(arch/i386/kernel/entry.S::ENTRY(ret_from_sys_call))、
2、从异常中返回(arch/i386/kernel/entry.S::ret_from_exception标号)、
3、调度程序中(kernel/sched.c::schedule())、
4、处理完硬件中断之后(kernel/irq.c::do_IRQ())。
它将遍历所有的softirq_vec,依次启动其中的action()。需要注意的是,软中断服务程序,不允许在硬中断服务程序中执行,也不允许在软中断服务程序中嵌套执行,但允许多个软中断服务程序同时在多个CPU上并发。
软中断是一种推后执行的机制,定时器,网卡的数据的处理是很典型的软中断,这个和中断向 量表里的中断是完全不一样的,以网络数据的处理为例,当网卡接到一个数据包后,其中断处理程序只是把数据复制到缓冲区,然后就告诉网卡,你可以再传数据给 我了,也就是中断返回,但在此之前,网卡的中断处理程序要置一个标志位,告诉操作系统有事要做,这个事就是软中断,但软中断只是很多中断返回时要做的事情 之一,操作系统每次中断返回时会检查着个标志位,看是否有事要做,如果有,就会去处理,象前面提到的网卡,这时候操作系统就回调用软中断的处理函数,网卡 的软中断程序就是做分析数据包啊,这个数据应该传给谁啊等这些工作.没有,就返回了,除了必须的部分
软中断与硬中断区别详细参考
http://blog.csdn.net/cjsycyl/article/details/7387655
二、浅析linux中断
http://blog.csdn.net/super_demo/article/details/16362801
三、中断编程示例、及深入分析
http://blog.csdn.net/tigerjibo/article/details/6069516
四、软中断、tasklet和工作队列区别
http://www.cnblogs.com/li-hao/archive/2012/01/12/2321084.html
五、linux系统调用
http://blog.csdn.net/super_demo/article/details/16363341