linux interrupt & process context

linux interrupt & process context


内核代码有时在常规上下文(process context)运行, 有时在中断上下文运行(interrupt context)运行。 为区分这两种不同情况并据此设计代码,内核提供了in_interrupt() 函数, 用于指明当前是否在处理中断。

interrupt context & process context 的主要差别有下面三点:
(1), 中断是异步执行的。即他们可以在任何时候发生。因而从用户空间来看,ISR 并不是在一个明确定义的环境中执行,这种环境下,严禁访问用户空间,特别是和用户空间交互数据,或者指针访问。
(2), 中断上下文中不能调用scheduler, 因而不能自愿地放弃CPU
(3), ISR 不能进入睡眠状态。因为只有在外部事件导致状态改变并唤醒进程时,才能解除睡觉状态。如果ISR 中进入睡眠状态,那可能永远的sleep 了。

猜你喜欢

转载自lyxh-2003.iteye.com/blog/1687971
今日推荐