admin 管理员组文章数量: 1184232
schedule_timeout 该方法相当于设置一个timer,然后schedule,timer到期后process_timeout会调用wake_up_process唤醒进程。不会修改进程状态,依然为TASK_RUNNING,不会把这个task从runqueue中移出去。那么当系统进行调度的时候这个进程仍然会被调度进来,因此一般调用前要set_current_state(TASK_INTERRUPTIBLE);然后让需要延迟的任务睡眠到指定的延时时间耗尽后在重新运行。
schedule_timeout有可能被signal打断,导致delay的时间小于预期
mdelay可以确保等待的时间大于等于参数设置的时间,在一些hardware驱动当中使用的delay,安全起见,一般推荐使用mdelay或者usleep_range函数。
msleep函数不会导致cpu忙等,时间不如mdelay精确,一般会大于设置的时间。底层实现是调用schedule_timeout
msleep_interruptible有可能会在延迟到一半时被信号打断退出
用户态的msleep底层会调用hrtimer_nanosleep来实现
推荐调用
Schedule_timeout_interruptible
Schedule_timeout_uninterruptible
Schedule_timeout_killable
这几个函数都会在调用schedule_timeout之前调用set_current_state,来把进程的状态设置为非TASK_RUNNING得状态。
其中msleep就是调用schedule_timeout_uninterruptible,ps查看进程为“D”状态
本文标签: scheduletimeout mdelay
版权声明:本文标题:schedule_timeout与mdelay 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1755001346a3059572.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论