Linux mdelay与msleep的区别以及中断中不能休眠的原因

原创 2013年06月05日 14:11:56

 

在linux driver开发中,经常要用到延迟函数:msleepmdelay

虽然msleepmdelay都有延迟的作用,但他们是有区别的:

mdelay是忙等待函数,在延迟过程中CPU无法运行其他任务。最好用于短时间的延时,否则太浪费CPU资源。

msleep会使当前进程进入休眠状态,CPU可以去执行其他任务。由于msleep涉及到进程调度,延时误差比较大

(进程调度需要耗费时间)。msleep不能用于中断上下文,因为中断函数不能休眠。

至于中断为什么不能进入休眠,今天再网上查阅并总结了一下:

   中断处理的时候,不应该发生进程切换,因为在中断上下文中,唯一能打断当前中断handler的只有更高优先级的中断,

它不会被进程打断(这点对于softirq,tasklet也一样,因此这些bottom half也不能休眠),如果在中断上下文中休眠,

没有办法唤醒它,因为所有的wake_up_xxx都是针对某个进程而言的,而在中断上下文中,没有进程的概念,没有相应的

task_struct(这点对于softirqtasklet一样),因此真的休眠了,比如调用了会导致阻塞的例程,内核几乎肯定会死.

linux 中断中只能用mdelay不能用msleep

在linux driver开发中,经常要用到延迟函数:msleep,mdelay. 虽然msleep和mdelay都有延迟的作用,但他们是有区别的: mdelay是忙等待函数,在延迟过程中CPU无...
  • xingmeng0518
  • xingmeng0518
  • 2014年03月03日 10:54
  • 2592

linux kernel 中mdelay() 与msleep()的区别

linux kernel 中mdelay() 与msleep()的区别
  • ztguang
  • ztguang
  • 2016年09月04日 22:51
  • 1137

linux 中mdelay() 与msleep()的区别

在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay. 虽然msleep和mdelay都有延迟的作用,但他们是有区别的. 1.)对于模块本身 ...
  • cbk861110
  • cbk861110
  • 2014年11月03日 20:41
  • 27476

linux底层的短延迟操作(下) -- ndelay,udelay,mdelay以及msleep,ssleep,msleep_interruptible

android 4.4.2 linux版本:3.0以上
  • u013256018
  • u013256018
  • 2015年08月19日 10:30
  • 2690

msleep() 与mdelay()

在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay. 虽然msleep和mdelay都有延迟的作用,但他们是有区别的. mdelay是忙等待函数,在延迟...
  • mayouyang
  • mayouyang
  • 2009年05月31日 14:43
  • 32062

udelay、mdelay、ndelay、msleep使用比较说明

时间单位:     毫秒(ms)、微秒 (μs)、纳秒(ns)、皮秒(ps)、飞秒(fs)、阿秒、渺秒     1 s = 10^3 ms = 10^6 us = 10^9 ns = 10^12 ...
  • CPJ_phone
  • CPJ_phone
  • 2015年07月29日 16:15
  • 1137

为什么在中断过程中不能进行睡眠

运行在中断中的代码不能进行睡眠,或者阻塞!因为代码是运行在中断上下文中,并非进程上下文中,如果将中断进行睡眠的话,调度器无从得知下一个应该调度的进程,系统无法继续进行!         关于调度器在...
  • LinuxEngineer
  • LinuxEngineer
  • 2013年10月08日 11:02
  • 1167

Linux 中mdelay() 与msleep()的区别

Linux Driver开发中延迟函数:msleep,mdelay,udelay
  • ysgjiangsu
  • ysgjiangsu
  • 2015年11月02日 19:47
  • 263

阻塞IO,异步通知,中断,时间定时器(Linux驱动2)

1 阻塞和非阻塞IO说明: 阻塞IO,当资源不可用时,进程就阻塞住.非阻塞IO,当资源不可用时,进程不被阻塞. 系统通过等待队列实现阻塞IO,等待队列的调度与系统调度有关. 非...
  • mmhhj
  • mmhhj
  • 2017年03月12日 12:02
  • 233

为什么在Linux中断服务程序中不能睡眠

最近本人在实现TILE CPU架构上的中断子系统,抽出一点时间来仔细研究了下Linux上的中断设计。对内核有所了解的人都知道,在Linux中断ISR中不能睡眠,但是为什么不能睡眠呢? 其中一个比较流...
  • Tonyluzhigang
  • Tonyluzhigang
  • 2013年12月02日 11:38
  • 1784
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux mdelay与msleep的区别以及中断中不能休眠的原因
举报原因:
原因补充:

(最多只允许输入30个字)