msleep分析

  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        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值