内核笔记之“Interrupts and interrupt Handlers”
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-13
1、基础知识. 在linux中,中断处理过程被分为两个子过程,Top half and Bottom half.Top half 接受中断信号并对一些实时要求做出反应.Bootm half处理对时间要求不是很苛刻的部分. 2、中断处理程序. 注册中断处理程序,对于设备来讲,这个过程由相应的驱动来完成,通过函数调用request_irq(int 中断号,中断函数,中断类型,设备名,dev_id)来完成注册,取消注册要调用free_irq(中断号,dev_id). 编写中断处理程序的模板, static irqreturn_t 函数名(中断号,dev_id,struct pt_regs,*regs). 3、中断过程 设备发送信号到它的中断控制器,中断控制器将信号发给处理器,处理器收到信号后,立即停止工作,禁用中断系统(防止其他中断),并跳转到预先定义好的内存位置,该位置是内核预先定义好的中断程序入口. 接下来系统调用do_IRQ(),计算中断线路,确定中断已收到,并调用handle_IRQ_event()执行中断处理函数. do_IRQ()返回后,内核跳到入口处执行ret_from_intr(),ret_from_intr()检查是否需要调用shedule(),然后调用schedule()恢复中断. 4、bottom half. 发展过程:BH->task queue->softirqs & tasklets->work queue->softirqs tasklets work queues,目前2.6的内核主要使用一种形式.tasklets是用的最多的. softirqs的实现:系统中有一个softirq_action的结构体,其成员为要运行的函数及数据,系统定义了一个softirq_action的数组,每个softirq_action在执行前被标记,do_softirq()函数检查是否用被标记的softirq_action,如果有,则依次执行. tasklets是建立在softirq之上的,每个tasklet都有一个相应的结构体tasklet_struct,通过tasklet_schedule()来安排tasklet,修改它的标记并将其放入相应的等待队列中.然后调用do_softirq()来执行tasklet_action.
|
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: linux基础学习下一篇: Linux命令学习手册-uname命令
关于内核笔记之“Interrupts and interrupt Handlers”的所有评论