在由内核执行的几个任务之间有些不是紧急的,在必要情况下他们可以延迟一段时间。一个中断处理程序的几个中断服务例程之间是串行执行的,并且通常在一个中断的处理程序结束前,不应该再次出现这个中断。相反,可延迟中断可以在开中断的情况下执行。
linux中所谓的可延迟函数,包括软中断和tasklet以及通过中作队列执行的函数(这个以后说),软中断的分配是静态的(即值编译时定义),而tasklet的分配和初始化可以在运行时进行。
软中断
软中断所使用的数据结构定义为
其中softirq_action类型为一个函数指针,从这里也可以看出,软中断的个数是有限的有NR_SOFTIRQS个,具体的定义如下:
可以看出,一共10个软中断。
软中断的初始化
上面函数中,参数nr为softirq_vec[]数组的下标,初始化就是初始化softirq_vec[]数组内容。
初始化了软中断后,要执行,接下来要做的是激活软中断,运用下面函数
具体的激活工作由raise_softirq_irqoff函数实现
守护线程softirqd就是对软中断的处理
下面是软中断的执行
具体由__do_softirq函数实现
到此,linux内核软中断的大致执行和实现基本上分析完了,中间有很多地方没有注释的,主要是考虑到需要别的实现机制以及有的比较易懂。能够自己看懂。
分享到:
相关推荐
linux软中断,软中断是linux系统原“底半处理”的升级,在原有的基础上发展的新的处理方式,以适应多cpu 、多线程的软中断处理。
①:了解linux软中断(Signal)的工作原理②:在Linux上使用C语言编写一个包含信号处理机制的程序,该程序中可以安装自己的信号处理程序;再此基础上发送一个对应的信号,验证自己安装的信号处理程序
一种基于linux软中断机制的计费网关系统.pdf
这个流程图粗略地描述了softirq, tasklet, bottomhalt, task queue这些对象之间的联系及调用流程。 主要依据:《Linux内核的Softirq机制》和《软中断概况》 图中可能存在错误,希望您的指正!
第二个配送员也到了,也想给你打电话 第一,要注意软中断的类型,也就是这个界面中第一列的内容 第二,要注意同一种软中断在不同 CPU 上的分布情况,也就是同一行的
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上发出的中断信号(即按delete键),当父进程接收到这两个软中断的某一个后,父进程用系统调用kill()向两个子进程分别发出整数值为16和17...
linux软中断,分析内核中中断的流程以及怎样修改这部分内容,经过调试可以使用
LINUX内核经典面试题 ,20) 如何加载、卸载一个模块? 21) 模块和应用程序分别运行在什么空间? 22) Linux中的浮点运算由应用程序实现还是内核实现? 23) 模块程序能否使用可...30) Linux软中断和工作队列的作用是什么?
优化Linux网络处理性能的软中断处理机制.pdf
在Linux系统下实现进程间软中断通信和管道通信,只有在捕捉键盘发出的中断信号后,才能打印相关信息。
Linux多核下绑定硬件中断到不同 CPU
linux内核软中断_linux内核源码详解.docx
本文是关于如何理解 linux 内核的软中断 。
linux内核软中断[借鉴].pdf
软中断信号时一种简单且基本的进程通信机制,它最大的特点是提供了一种简单的处理异步事件的方法。
Linux 2.4.x内核软中断机制
linux内核知识系列:软中断 华嵌智能提供 www.embedded-cn.com http://embedded-cn.taobao.com
内部中断来源于CPU内部(软中断指令、溢出、语法错误等),外部中断来自CPU外部,由设备提出请求。 2)根据是否可被屏蔽分为:可屏蔽中断和不可屏蔽中断(NMI),被屏蔽的中断将不会得到响应。 ........ 异常最终是...
linux内核模块中 软中断的 例子.doc