schedule_timeout与mdelay的区别
简单来说,在内核中使用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的区别相关推荐
- linux kernel 中mdelay() 与msleep()的区别
在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay. 虽然msleep和mdelay都有延迟的作用,但他们是有区别的. 1.)对于模块本身 mdelay是忙 ...
- MTK 驱动(4)---MTK Android Driver知识大全
MTK Android Driver知识大全 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在 ...
- MTK Android Driver知识大全
一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在使用DSI接口时,目前75/77都只支持到2条 ...
- linux内核的延时函数,linux中内核延时函数 (转)
第一类延时函数原型是:(忙等) void ndelay(unsigned long nsecs); void udelay(unsigned long usecs); void mdelay(unsi ...
- Android Driver知识大全
============== 微博搜索 bindingfly 欢迎关注 ============== 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做C ...
- MTK driver知识
一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做CPU或MCU接口).DPI(也叫RGB接口).DSI. 在使用DSI接口时,目前75/77都只支持到2条 ...
- MTK Android
转载请注明出处:http://blog.csdn.net/cbk861110/article/details/40931835 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有 ...
- 【转】MTK Android Driver知识大全
原文网址:http://www.cnblogs.com/biglucky/p/4413797.html 一.Display 1.lcm 相关概念 1.1) MIPI接口:一共有三种接口:DBI(也做C ...
- (转)select、poll、epoll之间的区别
本文来自:https://www.cnblogs.com/aspirant/p/9166944.html (1)select==>时间复杂度O(n) 它仅仅知道了,有I/O事件发生了,却并不知道 ...
- select、poll、epoll之间的区别(搜狗面试)
(1)select==>时间复杂度O(n) 它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对 ...
最新文章
- 前后端token机制 识别用户登录信息
- PHP操作redis
- Silverlight在IIS中的配置
- SAP技术专家Jerry的技术分享微信群 - 2021年1月14日更新 - 还剩27个名额
- 零c语言txt下载,C语言问题c-0是什么意思
- 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文
- JSON.toJSONString
- Sublime Text提示Unable to download XXX. Please view the console for more details安装插件失败解决
- 【转载保存】获取页面编码
- html百分比单位,视窗单位 vs 百分比单位
- 开发者究竟想从云中得到什么?
- (转)知识图谱如何让智能金融“变魔术”
- Linux基础学习笔记整理——第二章 管理文件和目录
- Qt 基于Google引擎的拼音输入法
- IDEA - 返回上一步,回到下一步 代码 快捷键
- android 模拟器 评测,安卓模拟器哪个更好?四款主流安卓模拟器测评
- KUKA机器人资料下载
- 【YOLOV5-5.x 源码解读】google_utils.py
- python tensorflow 文本提取_用RNN构建文本生成器(TensorFlow Eager+ tf.keras)
- 噩梦射手 安装包资源包提供下载 Unity官方教程 Survival Shooter 资源已经失效了!? Unity3D休闲射击类游戏《Survival Shooter》完整源码
热门文章
- Deadline提前,引入滚动审稿,想投ACL 2022的同学要抓紧了
- 干货 | Github标星近3w,热榜第一,如何用Python实现所有算法和一些神经网络模型...
- 资源 | 有没有必要把机器学习算法自己实现一遍?
- python的传参是传值还是传址
- LeetCode刷题——283. 移动零
- 给马云的一幅画——阿里国际站用户体验设计案例精选
- 测试先知和启发式方法
- 5.8 拉普拉斯算子和拉普拉斯矩阵,图拉普拉斯算子推导 意境级讲解
- 海量数据挖掘MMDS week7: 局部敏感哈希LSH(进阶)
- win10系统可禁用的服务器,Win10系统SysMain服务是什么?Win10系统SysMain能不能禁用?...