简单来说,在内核中使用delay函数,如果调用schedule_timeout有可能被signal打断,导致delay的时间小于预期,而mdelay可以确保等待的时间大于等于参数设置的时间,在一些hardware驱动当中使用的delay,安全起见,一般推荐使用mdelay或者usleep_range函数。

至于里面的原理,引用公司某大牛的解释:

schedule_timeout会做两件事
1. 设置timer
2. Schedule

他不会把当前的进程的状态由TASK_RUNNING变为TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE或者TASK_KILLABLE
所以在__schedule()中,不会把这个task从runqueue中移出去。那么当系统进行调度的时候这个进程仍然会被调度进来。
所以推荐调用
Schedule_timeout_interruptible
Schedule_timeout_uninterruptible
Schedule_timeout_killable
这几个函数都会在调用schedule_timeout之前调用set_current_state,来把进程的状态设置为非TASK_RUNNING得状态。
其中msleep就是调用schedule_timeout_uninterruptible。
Unterruptible就是不能被signal打断,任何signal都不行,包括优先级最高的不可忽略的SIG_KILL。
这也就是为什么我们会ps的时候看见进程状态是”D”。之所以这么做是由于一些系统的io不能接受打扰。唯一能唤醒io等待进程的就是别人wakeup他。

VPU的驱动就是这种情况,会在release的时候等待硬件不再busy,然后关clock。如果不用uninterruptible,而用interruptible,
那么用户kill VPU的进程,尽管我们在release的时候用了schedule(schedule_timeout会调用schedule),但是schedule会立刻返回,因为其中有判断:如果是非uninterruptible并且有signal pending,那么task的状态会被设置为TASK_RUNNING,并且立刻返回,不会做context switch. 所以这儿必须要schedule_timeout_uninterruptible。

系统也提供了新的状态TASK_KILLABLE。这个和TASK_UNINTERRUPTIBLE的区别就是这个进程能被SIG_KILL的signale唤醒。在文件系统中用的可能比较多。大家可能会碰到使用这种TASK_KILLABLE的情况。

转载于:https://www.cnblogs.com/muryo/p/4106208.html

schedule_timeout与mdelay的区别相关推荐

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

    在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay. 虽然msleep和mdelay都有延迟的作用,但他们是有区别的. 1.)对于模块本身 mdelay是忙 ...

  2. MTK 驱动(4)---MTK Android Driver知识大全

    MTK Android Driver知识大全 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在 ...

  3. MTK Android Driver知识大全

    一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在使用DSI接口时,目前75/77都只支持到2条 ...

  4. linux内核的延时函数,linux中内核延时函数 (转)

    第一类延时函数原型是:(忙等) void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsi ...

  5. Android Driver知识大全

    ============== 微博搜索  bindingfly 欢迎关注 ============== 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做C ...

  6. MTK driver知识

    一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在使用DSI接口时,目前75/77都只支持到2条 ...

  7. MTK Android

    转载请注明出处:http://blog.csdn.net/cbk861110/article/details/40931835 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有 ...

  8. 【转】MTK Android Driver知识大全

    原文网址:http://www.cnblogs.com/biglucky/p/4413797.html 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做C ...

  9. (转)select、poll、epoll之间的区别

    本文来自:https://www.cnblogs.com/aspirant/p/9166944.html (1)select==>时间复杂度O(n) 它仅仅知道了,有I/O事件发生了,却并不知道 ...

  10. select、poll、epoll之间的区别(搜狗面试)

    (1)select==>时间复杂度O(n) 它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对 ...

最新文章

  1. 前后端token机制 识别用户登录信息
  2. PHP操作redis
  3. Silverlight在IIS中的配置
  4. SAP技术专家Jerry的技术分享微信群 - 2021年1月14日更新 - 还剩27个名额
  5. 零c语言txt下载,C语言问题c-0是什么意思
  6. 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文
  7. JSON.toJSONString
  8. Sublime Text提示Unable to download XXX. Please view the console for more details安装插件失败解决
  9. 【转载保存】获取页面编码
  10. html百分比单位,视窗单位 vs 百分比单位
  11. 开发者究竟想从云中得到什么?
  12. (转)知识图谱如何让智能金融“变魔术”
  13. Linux基础学习笔记整理——第二章 管理文件和目录
  14. Qt 基于Google引擎的拼音输入法
  15. IDEA - 返回上一步,回到下一步 代码 快捷键
  16. android 模拟器 评测,安卓模拟器哪个更好?四款主流安卓模拟器测评
  17. KUKA机器人资料下载
  18. 【YOLOV5-5.x 源码解读】google_utils.py
  19. python tensorflow 文本提取_用RNN构建文本生成器(TensorFlow Eager+ tf.keras)
  20. 噩梦射手 安装包资源包提供下载 Unity官方教程 Survival Shooter 资源已经失效了!? Unity3D休闲射击类游戏《Survival Shooter》完整源码

热门文章

  1. Deadline提前,引入滚动审稿,想投ACL 2022的同学要抓紧了
  2. 干货 | Github标星近3w,热榜第一,如何用Python实现所有算法和一些神经网络模型...
  3. 资源 | 有没有必要把机器学习算法自己实现一遍?
  4. python的传参是传值还是传址
  5. LeetCode刷题——283. 移动零
  6. 给马云的一幅画——阿里国际站用户体验设计案例精选
  7. 测试先知和启发式方法
  8. 5.8 拉普拉斯算子和拉普拉斯矩阵,图拉普拉斯算子推导 意境级讲解
  9. 海量数据挖掘MMDS week7: 局部敏感哈希LSH(进阶)
  10. win10系统可禁用的服务器,Win10系统SysMain服务是什么?Win10系统SysMain能不能禁用?...