快速业务通道

内核笔记之“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.
Empire CMS,phome.net

Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号