linux内核研究5tasklet

文章来源:角膜穿孔   发布时间:2016-12-12 18:59:02   点击数:
  

1

linux内核研究-5-tasklet

1》tasklet需要软中断的支持,没有软中断,就没有tasklet。2》tasklet可以认为是软中断的一个子系统。3》个人认为将来tasklet可以完全替代软中断。

tasklet工作原理和过程

1》内核有一个链表,在linux/interrupt.h里面:structtasklet_struct{};里面有tasklet处理函数和函数参数。具体成员我就不说了。2》还记得软中断里面的内核线程ksoftirqd吗?这个线程检查软中断标记(TASKLET_SOFTIRQ),3》如果标记了,则检查tasklet_struct链表的每个节点,如果本节点的成员status为可调度,则执行对应的tasklet处理函数。

如何在你的驱动程序里使用tasklet,比如rill_tasklet。

1》声明tasklet,向链表添加一个节点。静态:DELARE_TASKLET(rill_tasklet,rill_tasklet_func,dev);动态:tasklet_init(rill_tasklet,rill_tasklet_func,dev);

2》实现rill_tasklet_func:voidrill_tasklet_func(unsignedlongdata);

3》使能tasklet:在中断处理程序返回前调用:tasklet_schedule(rill_tasklet);4》禁止和使能tasklet禁止:tasklet_disable(rill_tasklet);使能:tasklet_enable(rill_tasklet);

关于ksoftirqd内核线程的讨论

ksoftirq如何平衡软中断和用户进程的负载分配。现有两种直观方式1》在tasklet处理期间,用户进程等待,这样能尽快处理完tasklet的工作。但是这样在tasklet任务比较中的情况下,用户进程就会饥饿。2》在tasklet处理期间,如果有用户进程,则停止当前处理工作,执行用户进程,这样如果用户进程工作比较多时,tasklet就会饥饿。3》linux采用了折中方案。4》在tasklet处理期间,一旦出现中断产生,则开启一组内核线程,nice为19,来处理剩下工作,及时响应中断,或高优先级的用户进程。

每天学习5分钟,人生进步一大步!







































白癜风能治好吗
北京哪个医院能治疗白癜风

转载请注明:http://www.iwkqm.com/jbrs/4513.html