2013年8月28日

(转载)关于schedule_timeout

摘要: schedule_timeout这个函数除了对当前进程调用schedule之外,还有一个功能,如同其名字中暗示的,在指定的时间到期后(timeout了)将进程唤醒。我们知道,进程一旦进入睡眠状态,就会从cpu的run queue中移走,直觉是系统将不会维护散落到系统各处(等待队列等)的这些睡眠进程的时间信息,那么如何在指定的时间到期时唤醒这些进程呢?Linux内核使用了timer机制来完成,timer不依赖于进程,依赖于处理器的中断,当然关于timer的内部实现的机制可以成为另一个帖子了,这里就不多说。看看schedule_timeout的源码:signed long __sched sche 阅读全文

posted @ 2013-08-28 23:25 熊猫酒仙是也 阅读(1263) 评论(0) 推荐(0) 编辑

(转载)signal_pending与返回-ERESTARTSYS

摘要: 经常我们在睡眠的代码中 会看到这样的例子:if (signal_pending(current)) { ret = -ERESTARTSYS;return ret;} 关于 -ERESTARTSYS 到底是什么意思? -ERESTARTSYS表示信号函数处理完毕后重新执行信号函数前的某个系统调用.也就是说,如果信号函数前有发生系统调用,在调度用户信号函数之前,内核会检查系统调用的返回值,看看是不是因为这个信号而中断了系统调用.如果返回值 -ERESTARTSYS,并且当前调度的信号具备-ERESTARTSYS属性,系统就会在用户信号函数返回之后再执行该系统调用 这个过程,不必深究,你就知道.. 阅读全文

posted @ 2013-08-28 23:03 熊猫酒仙是也 阅读(1329) 评论(0) 推荐(0) 编辑

导航