第8章 下半部和推后执行的工作

软中断

      软中断在编译期间静态分配,不像tasklet能被动态地注册或注销。软中断由结构体softirq_action表示

struct softirq_action{

        void (*action) (struct softirq_action *);

 

}

kernel/softirq.c中定义一个包含有32个该结构体的数组

static struct softirq_action softirq_vec[NR_SOFTIRQS];

1.软中断处理程序

软中断处理程序action的函数原型如下

void softirq_handler(struct softirq_action *)

2.执行软中断

一个注册的软中断必须在被标记后都会执行,这被称作触发软中断。通常中断处理程序会在返回前标记它的软中断,使其稍后被执行。                        

3.使用软中断

软中断保留给系统中对时间要求最严格以及最重要的下半部使用。

(1)分配索引

编译期间,在<linux/interrupt.h>中定义的一个枚举类型来静态地声明软中断。内核用从0开始的索引来表示一种相对优先级,索引号小的软中断在索引号大的软中断之前执行

(2)注册处理程序

调用open_softirq()注册软中断处理程序,两个参数:软中断的索引号和处理程序。如网络子系统。

open_softirq(NET_TX_SOFTIRQ, net_tx_action);

open_softirq(NET_TX_SOFTIRQ, net_rx_action);

(3)触发软中断

raise_softirq()函数可以将一个软中断设置为扶起状态,让它在下次调用do_softirq()函数时投入运行。

raise_softirq(NET_TX_SOFTIRQ);

会触发NET_TX_SOFTIRQ软中断。它的处理程序net_tx_action()就会在内核下一次执行软中断时投入使用。该函数在触发一个软中断之前先要禁止中断,触发后再恢复状态

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值