当前位置: 技术问答>linux和unix
kernel 什么时候可以中断 什么时候不可以中断
来源: 互联网 发布时间:2016-08-24
本文导语: 比如 wait_event_interruptible 和wait_for_completion 两者区别是一个可以中断,另一个不可以中断,那什么时候要可以被中断,什么时候要不可以被中断呢? 谢谢大家了。 | 楼主貌似对中断理解错...
比如 wait_event_interruptible 和wait_for_completion 两者区别是一个可以中断,另一个不可以中断,那什么时候要可以被中断,什么时候要不可以被中断呢?
谢谢大家了。
谢谢大家了。
|
楼主貌似对中断理解错了。
中断在本质上说是任何时刻都会发生的。比如按一下键盘,移动一下鼠标。
wait_event_inerruptible本意是说在等事件的时候 ,如果发生中断,那么立即就从这个函数返回,同时返回值是-E_RESTARTSYS.这个时候系统调用收到这个错误消息的时候,一般会重头重新开始调用驱动的服务代码。这样保证了驱动的服务可以被“事务性”的处理。
而后面那个是说一旦在等事件的时候,即使有外设中断了,中断也不会被响应了。
不过这2个函数我没深入理解过。
反正 down_interruptable() 是这样的。
中断在本质上说是任何时刻都会发生的。比如按一下键盘,移动一下鼠标。
wait_event_inerruptible本意是说在等事件的时候 ,如果发生中断,那么立即就从这个函数返回,同时返回值是-E_RESTARTSYS.这个时候系统调用收到这个错误消息的时候,一般会重头重新开始调用驱动的服务代码。这样保证了驱动的服务可以被“事务性”的处理。
而后面那个是说一旦在等事件的时候,即使有外设中断了,中断也不会被响应了。
不过这2个函数我没深入理解过。
反正 down_interruptable() 是这样的。
|
wait_event(queue, condition)/*不可中断休眠,不推荐*/
wait_event_interruptible(queue, condition)/*推荐,返回非零值意味着休眠被中断,且驱动应返回 -ERESTARTSYS*/
wait_event_interruptible_timeout(queue, condition, timeout) /*有限的时间的休眠;若超时,则不管条件为何值返回0,*/
void wait_for_completion(struct completion *c);/* 等待completion */
wait_event_interruptible(queue, condition)/*推荐,返回非零值意味着休眠被中断,且驱动应返回 -ERESTARTSYS*/
wait_event_interruptible_timeout(queue, condition, timeout) /*有限的时间的休眠;若超时,则不管条件为何值返回0,*/
void wait_for_completion(struct completion *c);/* 等待completion */