Linux中断分层工作队列学习

Linux中断嵌套处理:

概念:当一种类型的中断发生时又产生另外一种中断

    慢速中断:当处理中断函数时,中断总开关是不关闭的,允许别的中断产生。

1.不同中断设备:处理中断开始。。。。。。发生另外中断,执行发生的中断,执行完成,返回之前的中断处理函数继续执行。。。。

2.相同类型设备:处理中断开始。。。。。。发生另外中断,忽略发生的中断,继续执行之前的中断函数,造成中断丢失。。。。

    快速中断:当处理中断函数时,中断总开关(IF关闭),不接受外部中断。

1.不同中断设备:处理中断开始。。。。。。发生另外中断,忽略发生的中断,继续执行之前的中断函数,造成中断丢失。。。。

2.相同类型设备:处理中断开始。。。。。。发生另外中断,忽略发生的中断,继续执行之前的中断函数,造成中断丢失。。。。

 

linux中断分层:

作用:减少中断处理函数执行时间,减少中断丢失的概率

中断处理函数中相关代码:

    1.与硬件相关代码

    2.与硬件不相关代码

使用中断分层技术:中断处理函数中第一部分在中断函数中执行,第二部使用中断分层技术隔离出来。

中断分层方式:软中断、tasklet、工作队列(主流)

工作队列是一种将任务推后执行的形式,他把推后的任务交由一个内核线程去执行。这样如果在中断函数中使用中断分层(工作队列方式),中断函数的第二部分会在进程上下文执行,它允许重新调度甚至睡眠。每个被推后的任务叫做“工作”,由这些工作组成的队列称为工作队列。

Linux中断分层____工作队列学习


当工作队列中的工作被执行后就会把被执行的工作在工作队列链表中删除此工作

内核使用struct workqueue_struct来描述一个工作队列;

内核使用struct work_struct来描述一个工作项;
使用工作队列:

1.创建工作队列:create_workqueue;

2.创建工作:INIT_WORK;

3.提交工作:queue_work,提交工作后并不是马上运行,由内核空闲时内核线程会运行创建的工作队列

创建工作队列首先要遵守“GPL”协议,不然会报错

 

在大多数情况下,驱动并不需要自己创建工作队列,只需要定义工作,然后将工作提交到内核已经定义好的工作队列Keventd_wq中。

提交工作到默认队列:schedule_work

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值