“休眠”对进程意味着什么?当一个进程被置入休眠,它会被标记为一种特殊状态并从调度器的运行队列中移走,直到某些情况下修改了这个状态,进程才会在任意CPU上调度,也即运行该进程。对Linux设备驱动程序来讲,如何将一个进程以一种安全的方式进入休眠是很重要的。LDD3上介绍了两个原则:
一、不要在原子上下文中进入休眠。对休眠来说,驱动程序不能在拥有自旋锁、seqlock或者RCU锁时休眠。我是这样理解的:如果进程A拥有自旋锁,但此时休眠,就会让出CPU,调度器让进程B执行,如果此时B也需获取锁,但A拥有了自旋锁没有释放,B就会在那里A自旋,造成死锁。
二、我们通常无法知道是否还有其它进程在同一事件上休眠,这个进程可能会在我们之前被唤醒并将我们等待的资源拿走,所以要检查等待条件是否真正为真。
阅读(1143) | 评论(0) | 转发(0) |