当前位置: 技术问答>linux和unix
关于休眠的疑惑
来源: 互联网 发布时间:2016-11-07
本文导语: 对休眠来说,我们的驱动程序不能在拥有自旋锁,seqlock或者RCU锁时休眠, 如果我们已经禁止了中断,也不能休眠。 在拥有信号量时休眠是合法的。 这几句话应该怎么理解? | 对休眠来说...
对休眠来说,我们的驱动程序不能在拥有自旋锁,seqlock或者RCU锁时休眠,
如果我们已经禁止了中断,也不能休眠。
在拥有信号量时休眠是合法的。
这几句话应该怎么理解?
如果我们已经禁止了中断,也不能休眠。
在拥有信号量时休眠是合法的。
这几句话应该怎么理解?
|
对休眠来说,我们的驱动程序不能在拥有自旋锁,seqlock或者RCU锁时休眠,
1. 休眠是不知道什么时候能被唤醒,因此“在拥有自旋锁,seqlock或者RCU锁时休眠”,会造成资源的浪费
2. 如果 唤醒它的进程 也需要 休眠进程占用的资源的话,就会造成死锁
3. 自旋锁只是简单地循环等待需要的资源,单处理器时,可想而知
如果我们已经禁止了中断,也不能休眠。
跟上面的解释差不多
在拥有信号量时休眠是合法的
这时候 需要保证 唤醒它的进程 不需要 休眠进程占用的资源
1. 休眠是不知道什么时候能被唤醒,因此“在拥有自旋锁,seqlock或者RCU锁时休眠”,会造成资源的浪费
2. 如果 唤醒它的进程 也需要 休眠进程占用的资源的话,就会造成死锁
3. 自旋锁只是简单地循环等待需要的资源,单处理器时,可想而知
如果我们已经禁止了中断,也不能休眠。
跟上面的解释差不多
在拥有信号量时休眠是合法的
这时候 需要保证 唤醒它的进程 不需要 休眠进程占用的资源
|
中断代码一般是这样的:
cli
....
sti
cli是设置中断屏蔽寄存器,sti是设置中断允许;
进入中断后,退出中断申请是disable的,也就是说不能调用中断了;
而休眠唤醒恰恰需要调用硬中断来实现。
所以说如果你在中断状态下休眠,是没有人有能力唤醒你的!
cli
....
sti
cli是设置中断屏蔽寄存器,sti是设置中断允许;
进入中断后,退出中断申请是disable的,也就是说不能调用中断了;
而休眠唤醒恰恰需要调用硬中断来实现。
所以说如果你在中断状态下休眠,是没有人有能力唤醒你的!
|
给你一篇博文,上面有比较详细的解释。
http://blog.csdn.net/maray/archive/2010/07/28/5770889.aspx
主要是讲解为什么在中断的时候不能休眠。9楼讲的比较模糊,其实有2中情况,都在上面的博文中有提到,LZ可以去看看。
http://blog.csdn.net/maray/archive/2010/07/28/5770889.aspx
主要是讲解为什么在中断的时候不能休眠。9楼讲的比较模糊,其实有2中情况,都在上面的博文中有提到,LZ可以去看看。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。