tasklet schedule isr 关系
来源:互联网 发布:中俄原油管道 知乎 编辑:程序博客网 时间:2024/06/09 15:08
前三者的联系在于中断子系统
tasklet
http://www.kuqin.com/shuoit/20140104/337421.html 讲述了什么是tasklet
http://blog.csdn.net/lizuobin2/article/details/51793911 这篇讲的比较好,
把中断对应的机制分的很详细;但是只是做了一个详细的划分,机制原理讲述不清
同一个tasklet不能同时在多个cpu上跑
DECLARE_TASKLET(my_tasklet,my_tasklet_func,data)
schedule
http://blog.csdn.net/songjinshi/article/details/23262923 讲述调用调度程
序的时机
每个时钟中断(timer interrupt)发生时,由三个函数协同工作,共同完成进程的
选择和切换,它们是:schedule()、do_timer()及ret_form_sys_call()。我
们先来解释一下这三个函数:
schedule():进程调度函数,由它来完成进程的选择(调度);
do_timer():暂且称之为时钟函数,该函数在时钟中断服务程序中被调用,是时钟
中断服务程序的主要组成部分,该函数被调用的频率就是时钟中断的频率即每秒钟100
次(简称100赫兹或100Hz);
ret_from_sys_call():系统调用返回函数。当一个系统调用或中断完成时,该函
数被调用,用于处理一些收尾工作,例如信号处理、核心任务等等。
isr:中断服务程序 ISR(Inerrupt Service Routine)
简单来说就是,一条中断线对应一个中断处理程序,而一个中断处理程序再对应若干
个中断服务例程 :http://blog.chinaunix.net/uid-27177626-id-3438994.html
图解加文字叙述,比较容易理解
http://blog.sina.com.cn/s/blog_70a9dd840100uqfh.html 讲述了什么是isr,也
涉及了中断上下文以及中断上半部和下半部
http://blog.sina.com.cn/s/blog_65373f1401018w15.html
http://blog.sina.com.cn/s/blog_510ac74901015fgz.html
http://blog.csdn.net/DroidPhone/article/details/7445825 中断子系统的一系
列文章
http://blog.csdn.net/lickylin/article/details/12657373 总结依托于这篇文
章写
总结:tasklet是一种基于软中断的延时处理机制,是中断底半部的一种处理方式。
基本上要使用就是申请中断,通过宏创建tasklet与处理函数的关联,在顶半部调用
tasklet_schedule使系统在适当的时候进行调
(就是把tasklet_struct结构体挂到tasklet_vec链表或者挂接到tasklet_hi_vec链
表上,并调度软中断TASKLET_SOFTIRQ或者HI_SOFTIRQ;Tasklet_action在软中断
TASKLET_SOFTIRQ被调度到后会被执行,它从tasklet_vec链表中把tasklet_struct
结构体都取下来,然后逐个执行。如果t->count的值等于0,说明这个tasklet在调度
之后,被disable掉了,所以会将tasklet结构体重新放回到tasklet_vec链表,并重
新调度TASKLET_SOFTIRQ软中断,在之后enable这个tasklet之后重新再执行它。);
======================================================================
上半部和下半部的关键区别是,上半部简单快速,执行时禁止一部分或者全部中断;
下半部稍后执行,而且执行期间可以响应所有中断。
======================================================================
上半部和下半部的划分可以参考以下原则:
1) 如果一个任务对时间非常敏感,把它放在上半部(ISR)里;
2) 如果一个任务跟硬件相关,把它放在上半部里;
3) 如果一个任务要保证不被其他中断(特别是相同的中断)打断,把它放在上半部里
;
4) 其他所有的任务,都放在下半部。
======================================================================
下半部负责推后完成的工作,但是并不需要指明一个具体的时间,只是将任务稍微推
迟,待到系统不是那么繁忙并且中断恢复之后执行就可以了(一般情况下,ISR一返回
,下半部就会执行)。不同于ISR的最关键之处是,下半部执行的时候允许响应所有的
中断。
======================================================================
内核的策略是,当中断不是特别多的时候,及时处理中断,所以do_irq会调用
do_softirq。
当系统中断过多时,do_softirq才会被推迟到内核的ksoftirq内核线程中去。如何判
断中断过多呢,linux的认为发生中断嵌套了,就是中断过多。do_irq在调用
do_softirq时会以此为判断条件。
======================================================================
__tasklet_schedule:
作用:
1、 关闭中断
2、 调用__tasklet_common_schedule,实现添加tasklet并开启软中断的功能
3、 开启中断
tasklet_schedule
__tasklet_schedule
__tasklet_common_schedule
3个函数实现了将tasklet添加到tasklet_vec(每个CPU都有一个该变量)中,并开启
软中断。
tasklet_action:
作用:
1) 关闭软中断,获取运行CPU所对应的tasklet链表的表头,然后将表头置为NULL,
再启中断
2) 遍历tasklet链表,每次遍历均执行如下操作:
a) 获取tasklet链表的一个tasklet变量
b) 对该tasklet执行加锁操作,即置位TASKLET_STATE_RUN
c) 判断当前tasklet是否使能,若已使能,则执行以下操作
i. tasklet的当前状态若为TASKLET_STATE_SCHED,则清空该位
ii. 调用该tasklet的回调处理函数
iii. 解锁该tasklet,重新while循环
若未使能,则执行以下操作:
i. 关闭中断
ii. 将该tasklet重新加入到链表tasklet_vec
iii. 开启软中断TASKLET_SOFTIRQ,在 下一次处理该软中断时,再处理该tasklet
iv. 开启中断
底半部机制包括:tasklet,工作队列,软中断,线程中断;
tasklet
http://www.kuqin.com/shuoit/20140104/337421.html 讲述了什么是tasklet
http://blog.csdn.net/lizuobin2/article/details/51793911 这篇讲的比较好,
把中断对应的机制分的很详细;但是只是做了一个详细的划分,机制原理讲述不清
同一个tasklet不能同时在多个cpu上跑
DECLARE_TASKLET(my_tasklet,my_tasklet_func,data)
schedule
http://blog.csdn.net/songjinshi/article/details/23262923 讲述调用调度程
序的时机
每个时钟中断(timer interrupt)发生时,由三个函数协同工作,共同完成进程的
选择和切换,它们是:schedule()、do_timer()及ret_form_sys_call()。我
们先来解释一下这三个函数:
schedule():进程调度函数,由它来完成进程的选择(调度);
do_timer():暂且称之为时钟函数,该函数在时钟中断服务程序中被调用,是时钟
中断服务程序的主要组成部分,该函数被调用的频率就是时钟中断的频率即每秒钟100
次(简称100赫兹或100Hz);
ret_from_sys_call():系统调用返回函数。当一个系统调用或中断完成时,该函
数被调用,用于处理一些收尾工作,例如信号处理、核心任务等等。
isr:中断服务程序 ISR(Inerrupt Service Routine)
简单来说就是,一条中断线对应一个中断处理程序,而一个中断处理程序再对应若干
个中断服务例程 :http://blog.chinaunix.net/uid-27177626-id-3438994.html
图解加文字叙述,比较容易理解
http://blog.sina.com.cn/s/blog_70a9dd840100uqfh.html 讲述了什么是isr,也
涉及了中断上下文以及中断上半部和下半部
http://blog.sina.com.cn/s/blog_65373f1401018w15.html
http://blog.sina.com.cn/s/blog_510ac74901015fgz.html
http://blog.csdn.net/DroidPhone/article/details/7445825 中断子系统的一系
列文章
http://blog.csdn.net/lickylin/article/details/12657373 总结依托于这篇文
章写
总结:tasklet是一种基于软中断的延时处理机制,是中断底半部的一种处理方式。
基本上要使用就是申请中断,通过宏创建tasklet与处理函数的关联,在顶半部调用
tasklet_schedule使系统在适当的时候进行调
(就是把tasklet_struct结构体挂到tasklet_vec链表或者挂接到tasklet_hi_vec链
表上,并调度软中断TASKLET_SOFTIRQ或者HI_SOFTIRQ;Tasklet_action在软中断
TASKLET_SOFTIRQ被调度到后会被执行,它从tasklet_vec链表中把tasklet_struct
结构体都取下来,然后逐个执行。如果t->count的值等于0,说明这个tasklet在调度
之后,被disable掉了,所以会将tasklet结构体重新放回到tasklet_vec链表,并重
新调度TASKLET_SOFTIRQ软中断,在之后enable这个tasklet之后重新再执行它。);
======================================================================
上半部和下半部的关键区别是,上半部简单快速,执行时禁止一部分或者全部中断;
下半部稍后执行,而且执行期间可以响应所有中断。
======================================================================
上半部和下半部的划分可以参考以下原则:
1) 如果一个任务对时间非常敏感,把它放在上半部(ISR)里;
2) 如果一个任务跟硬件相关,把它放在上半部里;
3) 如果一个任务要保证不被其他中断(特别是相同的中断)打断,把它放在上半部里
;
4) 其他所有的任务,都放在下半部。
======================================================================
下半部负责推后完成的工作,但是并不需要指明一个具体的时间,只是将任务稍微推
迟,待到系统不是那么繁忙并且中断恢复之后执行就可以了(一般情况下,ISR一返回
,下半部就会执行)。不同于ISR的最关键之处是,下半部执行的时候允许响应所有的
中断。
======================================================================
内核的策略是,当中断不是特别多的时候,及时处理中断,所以do_irq会调用
do_softirq。
当系统中断过多时,do_softirq才会被推迟到内核的ksoftirq内核线程中去。如何判
断中断过多呢,linux的认为发生中断嵌套了,就是中断过多。do_irq在调用
do_softirq时会以此为判断条件。
======================================================================
__tasklet_schedule:
作用:
1、 关闭中断
2、 调用__tasklet_common_schedule,实现添加tasklet并开启软中断的功能
3、 开启中断
tasklet_schedule
__tasklet_schedule
__tasklet_common_schedule
3个函数实现了将tasklet添加到tasklet_vec(每个CPU都有一个该变量)中,并开启
软中断。
tasklet_action:
作用:
1) 关闭软中断,获取运行CPU所对应的tasklet链表的表头,然后将表头置为NULL,
再启中断
2) 遍历tasklet链表,每次遍历均执行如下操作:
a) 获取tasklet链表的一个tasklet变量
b) 对该tasklet执行加锁操作,即置位TASKLET_STATE_RUN
c) 判断当前tasklet是否使能,若已使能,则执行以下操作
i. tasklet的当前状态若为TASKLET_STATE_SCHED,则清空该位
ii. 调用该tasklet的回调处理函数
iii. 解锁该tasklet,重新while循环
若未使能,则执行以下操作:
i. 关闭中断
ii. 将该tasklet重新加入到链表tasklet_vec
iii. 开启软中断TASKLET_SOFTIRQ,在 下一次处理该软中断时,再处理该tasklet
iv. 开启中断
底半部机制包括:tasklet,工作队列,软中断,线程中断;
0 0
- tasklet schedule isr 关系
- isr
- schedule program job 关系
- linux softirq和tasklet的关系
- AVR GCC中 ISR 与 SIGNAL 的关系
- tasklet
- tasklet
- tasklet
- tasklet
- tasklet
- tasklet
- tasklet
- tasklet
- Tasklet
- tasklet
- job、program和schedule的关系
- Schedule
- schedule
- Android基础知识
- C语言实现一、二维数组动态内存分配与释放以及图像的线性插值放大与优化
- Linux下查看jdk安装路径版本、安装jdk、配置环境变量
- iOS学习项目(20-QQ界面主流框架)
- 基于Hadoop生态圈的数据仓库实践 —— 进阶技术(七)
- tasklet schedule isr 关系
- Domino 发行的基于会话认证及单点登录 (SSO) 的 cookies
- 第37篇 网络(七)TCP(一)
- ASP下GridView中手动增加的按钮获取当前所在行的键值
- github使用
- redis 客户端结合spring配置应用
- 关于线程同步(5种同步方式)
- Android AIDL使用详解
- C++中虚析构函数的作用