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处理函数中不能睡眠

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

时间: 2024-12-11 10:33:32

linux中断底半部机制的相关文章

linux 中断底半部机制对比(任务队列,工作队列,软中断)--由linux RS485引出的血案【转】

转自:http://blog.chinaunix.net/uid-20768928-id-5077401.html 在LINUX RS485的使用过程中,由于各种原因,最后不得不使用中断底半部机制的方法来进行实现此功能.先讲两个小故事来描述一下,遇到的问题.也是因为自己对底半部机制理解得不透彻.这些故事的前提都是在串口中断中,一定条件后去完成某件事情,但时间上不能超过5ms. 故事一,最开始想到的是用workqueue.印象中workqueue 就是用来做这种事的,并且还记得可以延时一段时间再来

Linux中断下半部tasklet机制

平台:Linux2.6.18 一,      软中断 1.1         在文件<linux/interrupt.h>中 1.1.1     当前内核用到的软中断类型 1 enum 2 { // HI_SOFTIRQ,TASKLET_SOFTIRQ为tasklet用软中断实现时用到的两个软中断 3 HI_SOFTIRQ=0, 4 TIMER_SOFTIRQ, 5 NET_TX_SOFTIRQ, 6 NET_RX_SOFTIRQ, 7 BLOCK_SOFTIRQ, 8 TASKLET_SOF

Linux设备驱动程序:中断处理之顶半部和底半部

http://blog.csdn.net/yuesichiu/article/details/8286469 设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽可能地短小精悍.但是,这个良好的愿望往往与现实并不吻合.在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理. 为了在中断执行时间尽可能短和中断处理需完成大量工作之间找到一个平衡点,Linux 将中断处理程序分解为两个半部:顶半部(top  half)和底半

Linux中断完全分析

学习本文可以对linux中断有全面而深刻的认识.本文对Linux中断所涉及的需求.管理机制.中断实现.中断接口(上半部和下半部).驱动使用进行完全分析. 一.中断需求 软件是需求驱动的,软件的出现是为了解决需求和问题的.先知道需求,那理解代码就是为了验证已知的问题:不知道需求,那理解代码就是揣摩设计者的目的.两者相比,前者自然效率跟高. 中断是为了解决异步的需求.紧急的事情或者更高优先级的事情需要先做,就代表异步.例如,手机需要时刻优先响应用户按键或者触摸这个事件,否则用户体验就变差.信号是软件

关于中断的顶半部和底半部

我们要把中断处理中需要做的工作区分开来:中断处理程序中,只处理那些有严格时间限制的工作,比如复位硬件,对中断进行应答等.而那些可以拖到后面做的,或者说有可能睡眠的处理,都应当放到下半部去处理这样做的目的很显然,就是让中断处理程序尽可能的简洁明快在适当的时机,下半部会开中断执行 “顶半部”:是实际响应中断的例程(request_irq 注册的那个例程).“底半部”:是被顶半部调度,并在稍后更安全的时间内执行的函数 为什么要划分呢?因为中断存在一个悖论: Linux 大部分动作都是有中断来做,一个中

Linux 内核的同步机制,第 1 部分 + 第二部分(转)

http://blog.csdn.net/jk198310/article/details/9264721  原文地址: Linux 内核的同步机制,第 1 部分 一. 引言 在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程一样也需要一些同步机制来同步各执行单元对共享数据的访问.尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问.在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作

Linux内核抢占实现机制分析【转】

Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性.然后分析了禁止内核抢占的情况和内核抢占的时机,最后介绍了实现抢占内核所做的改动以及何时需要重新调度. [关键字]内核抢占,用户抢占,中断, 实时性,自旋锁,抢占时机,调度时机,schedule,pree

Linux内核的同步机制---自旋锁

自旋锁的思考:http://bbs.chinaunix.net/thread-2333160-1-1.html 近期在看宋宝华的<设备驱动开发具体解释>第二版.看到自旋锁的部分,有些疑惑.所以来请教下大家. 以下是我參考一些网络上的资料得出的一些想法,不知正确与否.记录下来大家讨论下: (1) linux上的自旋锁有三种实现: 1. 在单cpu.不可抢占内核中,自旋锁为空操作. 2. 在单cpu,可抢占内核中,自旋锁实现为"禁止内核抢占".并不实现"自旋"

Linux内核抢占实现机制分析

Sailor_forever  [email protected] 转载请注明 http://blog.csdn.net/sailor_8318/archive/2008/09/03/2870184.aspx [摘要]本文详解了Linux内核抢占实现机制.首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可抢占内核的特点及实时系统中实现内核抢占的必要性.然后分析了禁止内核抢占的情况和内核抢占的时机,最后介绍了实现抢占内核所做的改动以及何时需要重新调度. [关键字]内核抢占,用户抢占,中断,