深入剖析Linux中断机制--中断概述【摘要】本文详解了Linux内核的中断实现机制
首先介绍了中断的一些基本概念,然后分析了面向对象的Linux中断的组织形式、三种主要数据结构及其之间的关系
随后介绍了Linux处理异常和中断的基本流程,在此基础上分析了中断处理的详细流程,包括保存现场、中断处理、中断退出时的软中断执行及中断返回时的进程切换等问题
最后介绍了中断相关的API,包括中断注册和释放、中断关闭和使能、如何编写中断ISR、共享中断、中断上下文中断状态等
【关键字】中断,异常,hw_interrupt_type,irq_desc_t,irqaction,asm_do_IRQ,软中断,进程切换,中断注册释放request_irq,free_irq,共享中断,可重入,中断上下文1中断概述1
1为什么需要中断
处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然差强人意
既然硬件的响应这么慢,那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来对它进行处理
想要实现这种功能,轮询(polling)可能会是一种解决办法
可以让内核定期对设备的状态进行查询,然后做出相应的处理
不过这种方法很可能会让内核做不少无用功,因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性地重复执行
更好的办法是由我们来提供一种机制,让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动)
这就是中断机制
2中断的表示形式硬件设备生成中断的时候并不考虑与处理器的时钟同步—换句话说就是中断随时可以产生因此,内核随时可能因为新到来的中断而被打断
从物理学的角度看,中断是一种电信号,由硬件设备生成,并直接送入中断控制器的输入引脚上
然后再由中断控制器向处理器发送相应的信号