硬件中断通常都需要在最短的时间内执行完毕,如果将所有硬件中断相关的处理都放在硬件中断处理程序中,那么就达不到这个目的。

通过linux提供的软中断和tasklet,可以将硬件中断处理程序中可以延迟处理的部分放到软中断和tasklet中处理。

1,软中断

linux内核定义了软中断的主要数据结构softirg_vec数组,该数组包含类型为softirg_action的32个元素,即0-31,这也代表软中断的优先级。softirg_action数组包含两个字段:一个函数指针,一个参数指针。通过这两个字段,可以执行任何函数。

在linux2.6中,只有前六个元素被使用。 如下图。在硬件中断中,可以将可延迟的部分以softirg_action的形式插入到软中断的某个优先级中,然后在硬件中断处理完以后,就会触 发软件中断的执行,执行时机在下面会有详细描述。

二,tasklet

tasklet是在软中断之上实现,在实现上做了一些优化,它与软中断的区别:

1,软中断 ,即使是同一类型的软中断,可以并发的运行在多个CPU上,所以内核程序员需要考虑同步问题。

2,类型不同的tasklet可以在多个CPU中并发执行,但相同类型的tasklet就不行,因此用tasklet,不用考虑同步问题,简化了设备驱动程序开发者的工作。

tasklet建立在HI_SOFTIRQ和TASKLET_SOFTIRQ两个软中断之上,分别称为:tasklet和高优先级的tasklet。因为HI_SOFTIRG比TASKLET_SOFTIRQ优先级高,所以后者总比前者先执行,除此之外,没有其它区别。

tasklet和高优先级的tasklet分别存放在tasklet_vec和tasklet_hi_vec数组中。以tasklet_vec为例,假如有8个CPU,那么它包含8个tasklet_head元素,每个元素都指向一个tasklet_struct组成的链表。tasklet_struct包含了一个tasklet所有的信息。

三,软中断和tasklet执行时机

直接贴图,如下。

为了保持软中断的低延迟性,软中断处理程序会一直运行把所有的挂起的软中断处理完。但这样会有一个问题就是它会运行很长时间,因而大大延迟用户态进程的执行。

因此,处理程序只做固定次数的循环,就返回。如果没有处理完,就启用一个内核线程来处理它们。

内核线程为重要而难以平衡的问题提供了解决方案,问题如下:

1,如果软中断过多,如果一直处理软中断,就会造成用户进程的饥渴。

2,如果人为的忽略部分软中断,在下一个执行周期执行它们,在最坏的情况下需要等待一个时钟中断(1/100秒)到来才能执行到,这对于网络开发者来说是不可以接受的。

内核线程优先级较低,因此用户进程就有机会运行,在机器空闲时,挂起的软中断就很快会被被执行。

四,内核线程

不多说,直接上图。下面这段话,说得很明白,感觉就是一个普通的进程,只不过它只运行在内核态罢了。

五,工作队列

在linux2.6中引入了工作队列,一句话,它其实就是用上面的内核线程来实现,只不过上面的内核线程只是在软中断处理不过来时的一种替代方案,而工作队则是完全由内核线程来实现。程序员只需要将执行任务放在工作队列中,然后就会有内核线程来执行它们。

为什么使用工作队列呢?因为有些可阻塞函数,例如访问磁盘,不能在软中断中执行。而工作队列执行在内核线程的上下文中,所以是可以执行这些阻塞函数的。

上面内容可以总结为一句话:内核提供了很多任务执行机制,程序员只需要选择一个合适的机制,将任务通过API放到里面,内核就会达到程序员的目的。

linux内核--软中断与tasklet的更多相关文章

  1. [Linux内核]软中断、tasklet、工作队列

    转自:http://www.cnblogs.com/li-hao/archive/2012/01/12/2321084.html 软中断.tasklet和工作队列并不是Linux内核中一直存在的机制, ...

  2. Linux内核实践之tasklet机制【转】

    转自:http://blog.csdn.net/bullbat/article/details/7423321 版权声明:本文为博主原创文章,未经博主允许不得转载. 作者:bullbat 源代码分析与 ...

  3. 内核软中断之tasklet机制

    1. 软中断IRQ简介 软中断(SoftIRQ)是内核提供的一种基于中断的延时机制, Linux内核定义的软中断有以下几种: enum { HI_SOFTIRQ=0, /*高优先级的tasklet*/ ...

  4. [Linux内核]软中断与硬中断

    转自:http://blog.csdn.net/zhangskd/article/details/21992933 本文主要内容:硬中断 / 软中断的原理和实现 内核版本:2.6.37 Author: ...

  5. Linux内核软中断

    1 软中断概述 软中断是实现中断下半部的一种手段,与2.5以前版本的下半段机制不同.软中断可以同时运行在不同的CPU上. 1.1 软中断的表示 内核中用结构体softirq_action表示一个软中断 ...

  6. Linux中断分层--软中断和tasklet

    1. Linux中断分层 (1)上半部:当中断发生时,它进行相应的硬件读写,并“登记”该中断.通常由中断处理程序充当上半部.(一般情况下,上半部不可被打断) (2)下半部:在系统空闲的时候,对上半部“ ...

  7. Linux内核中的软中断、tasklet和工作队列具体解释

    [TOC] 本文基于Linux2.6.32内核版本号. 引言 软中断.tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的"下半部"(bottom ...

  8. 《深入理解Linux内核》软中断/tasklet/工作队列

    软中断.tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来.下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任 ...

  9. Linux内核实现透视---软中断&Tasklet

    软中断 首先明确一个概念软中断(不是软件中断int n).总来来说软中断就是内核在启动时为每一个内核创建了一个特殊的进程,这个进程会不停的poll检查是否有软中断需要执行,如果需要执行则调用注册的接口 ...

随机推荐

  1. VHDL程序的库

    VHDL库存储和放置了可被其他VHDL程序调用的数据定义.器件说明.程序包等资源.VHDL库的种类有很多,但最常见的库有IEEE标准库.WORK库.IEEE标准库主要包括STD_LOGIC_1164. ...

  2. Socket实现简单的聊天通信

    最近学习了Socket后,感觉Socket挺好玩的,在博客中看到socket在实时聊天功能的很强大,于是乎就做了一个简单的聊天功能,今天贴出来,能够与大家一起共享,有不对之处,能够给予指出,谢谢! 服 ...

  3. avalon 中require.config源码分析

    /********************************************************************* * 配置系统 在系统运行的开始就需要读取系统中requir ...

  4. SQL 各种连接:内连接,外连接(左外,右外,完全外)

    在讲述之前,假设有如下两个表EMP, DEPT, 并且他们数据如下:

  5. Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER

    Li Fei-fei写给她学生的一封信,如何做好研究以及写好PAPER 在微博上看到的,读完还是有些收获的,首先是端正做research的态度. 我是从这里看到的:http://www.vjianke ...

  6. android中viewPager+fragment实现的屏幕左右切换(进阶篇)

    Fragment支持在不同的Activity中使用并且可以处理自己的输入事件以及生命周期方法等.可以看做是一个子Activity. 先看一下布局: 1 <LinearLayout xmlns:a ...

  7. 移除Ubuntu“下载额外数据不成功”的提示通知

    参考自经过几天的摸索,终于得出安装flashplugin-installer的方法 移除"下载额外数据不成功"的恼人提示通知,方法: $cd /usr/share/package- ...

  8. 移动应用产品开发-android开发(三)

    历时一个多月的时间,这款APP算是开发完成了,最近在测试完善中,比较空闲好好总结下. 之前两次已经提到开发过程中的主要的知识点,这次主要总结下解决问题方法,http请求和安全. 首先讲下解决问题的方法 ...

  9. 【LA3523】 Knights of the Round Table (点双连通分量+染色问题?)

    Being a knight is a very attractive career: searching for the Holy Grail, saving damsels in distress ...

  10. 【BZOJ 1010】 [HNOI2008]玩具装箱toy (斜率优化)

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 9330  Solved: 3739 Descriptio ...