Linux中断处理底层机制概述如何?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2772个文字,预计阅读时间需要12分钟。
Linux 实现下半部的机制主要包括 tasklet、workqueue、softirq 和线程化 irq。
1. tasklet 的使用相对简单,其执行上下文是软中断,所以不能睡眠。其执行时机通常中断半挂起,返回时一般在中断半挂起顶部。
linux实现底半部的机制主要有tasklet、workqueue、softirq和线程化irq。
1.tasklettasklet的使用较为简单,它的执行上下文是软中断,所以在tasklet中不能睡眠,它的执行时机通常是中断顶半部返回的时候。我们只需要定义tasklet及其处理函数,并将两者关联起来即可,例如:
1 void my_tasklet_func(unsigned long); /* 定义一个处理函数 */ 2 DECLARE_TASKLET(my_tasklet, my_tasklet_func, data); /* 定义一个tasklet结构my_tasklet,与my_tasklet_func(data)函数相关联 */
代码 DECLEARE_TASKLET(my_tasklet, my_tasklet_func, data)实现了定义名称为my_tasklet的tasklet,并将其与my_tasklet_func()这个函数绑定,而传入这个函数的参数为data。
本文共计2772个文字,预计阅读时间需要12分钟。
Linux 实现下半部的机制主要包括 tasklet、workqueue、softirq 和线程化 irq。
1. tasklet 的使用相对简单,其执行上下文是软中断,所以不能睡眠。其执行时机通常中断半挂起,返回时一般在中断半挂起顶部。
linux实现底半部的机制主要有tasklet、workqueue、softirq和线程化irq。
1.tasklettasklet的使用较为简单,它的执行上下文是软中断,所以在tasklet中不能睡眠,它的执行时机通常是中断顶半部返回的时候。我们只需要定义tasklet及其处理函数,并将两者关联起来即可,例如:
1 void my_tasklet_func(unsigned long); /* 定义一个处理函数 */ 2 DECLARE_TASKLET(my_tasklet, my_tasklet_func, data); /* 定义一个tasklet结构my_tasklet,与my_tasklet_func(data)函数相关联 */
代码 DECLEARE_TASKLET(my_tasklet, my_tasklet_func, data)实现了定义名称为my_tasklet的tasklet,并将其与my_tasklet_func()这个函数绑定,而传入这个函数的参数为data。

