linux中断底半部机制

中断处理程序

----中断处理程序ISR是在中断发生时被调用时用来处理中断的函数,在中断运行期间,不能

----执行有可能引起睡眠测操作,不能同用户空间交换数据,不能调用schedule函数,实现

----中断处理有一个原则,就是尽可能快处理并返回地,但是多数中断产生时要进行大量的

----耗时处理,为了使中断处理尽可能短并完成后续大量工作,linux引入了一种底半部机制,

----分为顶半部(top half)和底半部(buttomhalf)。

底半部机制

----Tasklet

----工作队列

Tasklet和下半部处理

----tasklet将任务延迟到安全时间执行,每个tasklet都和一个函数相关联,当tasklet运行时,

----该函数就被调用,并且tasklet可以调度自己。

Tasklet的实现

----定义一个处理函数:

----void tasklet_func(unsigned  long);

----定义一个tasklet结构my_tasklet与tasklet_func(data)函数关联

----struct tasklet_struct  my_tasklet;

----DECLARE_TASKLET(my_tasklet,tasklet_func,data);

----调度tasklet

----tasklet_schedule(&my_tasklet);

工作队列和下半部处理

----工作队列使用方法和tasklet非常相似

----定义一个工作队列:

----struct work_struct  my_wq;

----定义一个处理函数

----void my_wq_func(struct work_struct  *work);

----初始化工作队列并将其处理函数绑定

----INIT_WORK(&my_wq,my_wq_func);

----调度工作队列执行

----schedule_work(&my_wq);

Tasklet和工作队列的区别

----tasklet工作在中断上下文

----工作队列工作在进程上下文

----tasklet处理函数中不能睡眠

----工作队列中允许有睡眠

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值