ISR是直接与硬件交互的非常重要的代码片段。他们拥有立即执行的特权,以提高系统性能。为了对粗暴打断当前执行线程的行为进行补偿,ISRT不得不礼貌执行于受限制的环境下,即中断上下文(原子上下文).中断上下文的注意事项
1.中断上下文代码可以停在运行。中断处理函数不能通过调用schemdule_timeout()等睡眠函数放弃处理器,在从中断处理函数中调用一个内核API之前,确保内部不会发会触发阻塞等待。 kmalloc()将睡眠,等待程序释放内存。
2.为了在中断处理函数中保护临界区,不能使用互斥体,使用自选旋体
3.中断处理函数不能与用户空间直接交互数据,因为他们经由进程上下文与用户空间建立连接。
4.中断处理函数不必是可用的
5.中断处理函数可以被更高级IRQ打断。
6.中断处理函数一方面需要快速的为其他进程让位,另一方面有需要完成它的工作。中断处理函数分为两部分顶部分服务中断,而重大的工作负载都被丢给底半部。