kernel的版本是 3.19.2
今天有空了解了下调度算法,cfs, rt等。由调度算法想到driver中经常会有些延迟的操作,比如想给设备一些准备的时间,或是等待信号状态稳定等。
这个延迟的函数可以用msleep(timeout),当然可以看出它是放弃了cpu,等到一定时间后再由系统重新调度来运行它。
所以来看下msleep()的具体实现. 它是用了个timer来处理当时间到了就wake up该进程。
1.原型在 kernel/time/timer.c
void msleep(unsigned int msecs)
void msleep(unsigned int msecs)
1691 {
1692 unsigned long timeout = msecs_to_jiffies(msecs) + 1; // in jiffies, when timer irq happens, jiffies will increase by 1
1693
1694 while (timeout) //if it is waken up by signal before timeout, it still will sleep ,until timeout equals 0
1695 timeout = schedule_timeout_uninterruptible(timeout); //
1696 }
----->
1528 signed long __sched schedule_timeout_uninterruptible(signed long timeout)
1529 {
1530