linux内核研究-6-work queue

linux内核研究-6-work queue

1,work queue 与软中断和tasklet的关系
1》work queue是内核线程来执行的,软中断和tasklet是qsoftirqd内核线程来执行的。
2》work queue能休眠,软中断和tasklet不能。


2,work queue工作原理和过程
1》内核有一个默认的工作者线程(worker thread),event(n),n代表CPU。
2》每个工作者线程有一个工作结构体链表。
3》链表的节点结构体成员有个函数指针,和函数参数。来执行下半部任务。
4》工作者线程检查这个链表,发现有节点,就执行这个节点的函数指针。
5》执行完毕后,将这个节点移除链表。
6》如果链表为空,工作者线程休眠。

3,如何在驱动中使用work queue
1》一般使用内核默认的工作者线程(evnet),也可以自己创建一个(rill):
struct workqueue_struct *rill_wq;
rill_wq = creat_workqueue("rill");

2》创建工作结构体(链表的一个节点)
静态:
DECLARE_WORK(name,void(*func)(void*),void*data);

动态:
INIT_WORK(struct work_struct *work,void(*func)(void*),void*data);

3》实现处理函数
在驱动里实现func函数。

4》调度工作队列
schedule_work(&rill_wq);
5》刷新
flush_workqueue(&rill_wq);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值