`
emowuyi
  • 浏览: 1482459 次
文章分类
社区版块
存档分类
最新评论

linux中断延迟之tasklet

 
阅读更多

tasklet是I/O驱动程序中实现可延迟函数的首选方法。从下面的内核代码的分析中我们会看到,tasklet建立在两个叫做HI_SOFTIRQ和TASKLET_SOFTIRQ的软中断之上。几个tasklet可以与同一个软中断相关联,每个tasklet执行自己的函数。tasklet和高优先级的tasklet分别存放在tasklet_vec和tasklet_hi_vec数组中。下面我们结合具体的代码来了解他的实现和运用。

tasklet的内核实现

在start_kernel函数做内核初始化工作的时候会调用函数softirq_init

open_softirq函数在前面我们已经分析过了,在这里可以看出,两类tasklet以一个软中断的方式加入软中断向量中,而这两种tasklet实际上位两个链表,就是上面的tasklet_hi_vec和tasklet_vec,我们看一个就行了,实现大同小异。

可以看到,tasklet其实是软中断中两项,每一项对应的不是一个软中断函数,而是一个链表上的所有函数,在对应的软中断到来时,对应链表中的所有函数都将得到执行。而对于tasklet的唤醒其实就是设置pending位掩码的相应位,使软中断到来时会执行他。

tasklet的内核编程与应用

了解了tasklet的内核实现,对于他的应用就很简单了,首先,你应该分配一个新的tasklet_struct数据结构,并调用tasklet_init函数初始化它。

为了重新激活你的tasklet,调用tasklet_enable函数;

为了激活tasklet,根据自己tasklet需要的优先级,调用tasklet_schedule函数或tasklet_hi_schedule函数。我们也只看一个

实现了上面的几个操作流程,当软中断函数一旦被唤醒就由do_softirq函数来执行。





分享到:
评论

相关推荐

    linux操作系统内核技术-uestc课件

     5熟悉在x86体系结构上Linux中断和异常的处理原理,中断注册、共享、控制,和中断上下文的意义,中断和设备驱动程序的关系,以及设备驱动程序结构和用户接口。(4小时)  6中断处理程序被分解为top half和bottom ...

    Linux2.6内核标准教程(共计8-- 第1个)

    5.5.2 tasklet延迟处理 239 5.5.3 work queue延迟处理 242 第6章 时间度量 249 6.1 硬件支持 250 6.1.1 实时钟RTC 250 6.1.2 系统时钟 250 6.2 软件架构 252 6.2.1 相对时间 252 6.2.2 墙上时间 ...

    Linux2.6内核标准教程(共计8--第6个)

    5.5.2 tasklet延迟处理 239 5.5.3 work queue延迟处理 242 第6章 时间度量 249 6.1 硬件支持 250 6.1.1 实时钟RTC 250 6.1.2 系统时钟 250 6.2 软件架构 252 6.2.1 相对时间 252 6.2.2 墙上时间 ...

    Linux2.6内核标准教程(共计8--第8个)

    5.5.2 tasklet延迟处理 239 5.5.3 work queue延迟处理 242 第6章 时间度量 249 6.1 硬件支持 250 6.1.1 实时钟RTC 250 6.1.2 系统时钟 250 6.2 软件架构 252 6.2.1 相对时间 252 6.2.2 墙上时间 ...

    Linux2.6内核标准教程(共计8--第3个)

    5.5.2 tasklet延迟处理 239 5.5.3 work queue延迟处理 242 第6章 时间度量 249 6.1 硬件支持 250 6.1.1 实时钟RTC 250 6.1.2 系统时钟 250 6.2 软件架构 252 6.2.1 相对时间 252 6.2.2 墙上时间 ...

    Linux2.6内核标准教程(共计8--第7个)

    5.5.2 tasklet延迟处理 239 5.5.3 work queue延迟处理 242 第6章 时间度量 249 6.1 硬件支持 250 6.1.1 实时钟RTC 250 6.1.2 系统时钟 250 6.2 软件架构 252 6.2.1 相对时间 252 6.2.2 墙上时间 ...

    Understanding the Linux Kernel

     软中断及tasklet  工作队列  从中断和异常返回  第五章内核同步  内核如何为不同的请求提供服务  同步原语  对内核数据结构的同步访问  避免竞争条件的实例  第六章定时测量  时钟和定时器电路  Linux...

    Linux2.6内核标准教程(共计8--第4个)

    5.5.2 tasklet延迟处理 239 5.5.3 work queue延迟处理 242 第6章 时间度量 249 6.1 硬件支持 250 6.1.1 实时钟RTC 250 6.1.2 系统时钟 250 6.2 软件架构 252 6.2.1 相对时间 252 6.2.2 墙上时间 ...

    Linux2.6内核标准教程(共计8--第2个)

    5.5.2 tasklet延迟处理 239 5.5.3 work queue延迟处理 242 第6章 时间度量 249 6.1 硬件支持 250 6.1.1 实时钟RTC 250 6.1.2 系统时钟 250 6.2 软件架构 252 6.2.1 相对时间 252 6.2.2 墙上时间 ...

    Linux2.6内核标准教程(共计8--第5个)

    5.5.2 tasklet延迟处理 239 5.5.3 work queue延迟处理 242 第6章 时间度量 249 6.1 硬件支持 250 6.1.1 实时钟RTC 250 6.1.2 系统时钟 250 6.2 软件架构 252 6.2.1 相对时间 252 6.2.2 墙上时间 ...

    LINUX设备驱动第三版_588及代码.rar

    tasklet 工作队列 快速参考 第八章 分配内存 kmalloc函数的内幕 后备高速缓存 get_free_page和相关函数 vmalloc及其辅助函数 per-CPU变量 获取大的缓冲区 快速参考 第九章 与硬件通信 I/O端口和I/O内存 ...

    Linux DeviceDrivers 3rd Edition

    tasklet 202 工作队列 204 快速参考 208 第八章 分配内存 213 kmalloc函数的内幕 213 后备高速缓存 217 get_free_page和相关函数 221 vmalloc及其辅助函数 225 per-CPU变量 228 获取大的缓冲区 230 快速...

    疯狂内核之——进程管理子系统

    1.2 Linux的线程——轻量级进程 15 1.3 进程的创建——do_fork()函数详解 19 1.4 执行进程间切换 33 1.4.1 进程切换之前的工作 33 1.4.2 进程切换实务 —— switch_to宏 37 1.4.3 __switch_to函数 39 1.5 fork与...

Global site tag (gtag.js) - Google Analytics