文章目录
中断上半部分
中断
1.计算机处理器的速度和外围硬件设备(例如键盘)的速度往往不在一个数量级上
2.我们可以让硬件完成任务时向内核发出一个信号,这就是中断机制,中断使得硬件得以发出通知给处理器
3.不同设备的中断都有一个唯一的数字标志,比如IRQ 1是键盘中断
4.中断的数字值有的是固定的,有的是可变的,PCI上面的中断就是动态分配的
5.中断不需要考虑也处理器时钟同步,相比之下,异常需要考虑与处理器时钟同步
6.响应中断时,内核会执行不同的中断处理程序,中断处理程序是驱动的一部分,驱动也是内核的一部分
7.中断处理程序运行在中断上下文中,该上下文中的执行代码不可阻塞,所以中断处理程序应该尽可能短的时间内完成运行,为了让中断能又好又快的运行,我们把中断切分为两部分:
- 中断处理程序是上半部分★,处理能快速完成又不能拖延的工作
- 然后下半部分开始执行允许延迟的工作
8.硬件对应的驱动程序需要通过request_irq注册一个中断处理程序
- 可以设置是否在执行中断处理程序时禁用其他中断,但是一般不设置
- 是否可以共享中断线等等
- 在卸载驱动程序时,要调用free_irq来注销中断处理程序
9.编写中断处理程序
- 中断处理程序要和request_irq里面handler要求的一致
- 中断处理程序返回的值可能有两种情况
- IRQ_NONE 检测到中断,但是中断对应的不是这个程序
- IRQ_HANDLED 中断处理程序被正确调用
- 处理中断时,同一中断线不能再处理其他中断
- 共享中断线的中断处理程序有些特殊要求,否则不能共享了
10.当执行一个中断处理程序时,内核处于中断上下文,在中断上下文中,不能调用一些会睡眠的函数,中断上下文中的代码应该迅速,间接,因为它可能打断了其他代码甚至另一中断处理程序,我们应该把缓慢的工作放在下半部分执行
11.系统中与中断相关的统计信息位于/proc/interrupts文件中