linux进程唤醒的细节
我们已展现的唤醒进程的样子比内核中真正发生的要简单. 当进程被唤醒时产生的真正动 作是被位于等待队列入口项的一个函数控制的. 缺省的唤醒函数[22]22设置进程为可运行的 状态, 并且可能地进行一个上下文切换到有更高优先级进程. 设备驱动应当从不需要提供 一个不同的唤醒函数; 如果你例外, 关于如何做的信息见 <linux/wait.h>
我们尚未看到所有的 wake_up 变体. 大部分驱动编写者从不需要其他的, 但是, 为完整 起见, 这里是整个集合:
wake_up(wait_queue_head_t *queue); wake_up_interruptible(wait_queue_head_t *queue);
wake_up 唤醒队列中的每个不是在互斥等待中的进程, 并且就只一个互斥等待者, 如果它存在. wake_up_interruptible 同样, 除了它跳过处于不可中断睡眠的进程. 这些函数, 在返回之前, 使一个或多个进程被唤醒来被调度(尽管如果它们被从一 个原子上下文调用, 这就不会发生).
wake_up_nr(wait_queue_head_t *queue, int nr); wake_up_interruptible_nr(wait_queue_head_t *queue, int nr);
这些函数类似 wake_up, 除了它们能够唤醒多达 nr 个互斥等待者, 而不只是一个. 注意传递 0 被解释为请求所有的互斥等待者都被唤醒, 而不是一个没有.
wake_up_all(wait_queue_head_t *queue); wake_up_interruptible_all(wait_queue_head_t *queue);
这种 wake_up 唤醒所有的进程, 不管它们是否进行互斥等待(尽管可中断的类型仍 然跳过在做不可中断等待的进程)
wake_up_interruptible_sync(wait_queue_head_t *queue);
正常地, 一个被唤醒的进程可能抢占当前进程, 并且在 wake_up 返回之前被调度 到处理器. 换句话说, 调用 wake_up 可能不是原子的. 如果调用 wake_up 的进程 运行在原子上下文(它可能持有一个自旋锁, 例如, 或者是一个中断处理), 这个重 调度不会发生. 正常地, 那个保护是足够的. 但是, 如果你需要明确要求不要被调 度出处理器在那时, 你可以使用 wake_up_interruptible 的"同步"变体. 这个函 数最常用在当调用者要无论如何重新调度, 并且它会更有效的来首先简单地完成剩 下的任何小的工作.
如果上面的全部内容在第一次阅读时没有完全清楚, 不必担心. 很少请求会需要调用 wake_up_interruptible 之外的.
最新文章
- 分享一个php的启动关闭脚本(原)
- http://my.oschina.net/u/2007041/blog/508520
- 转:一些MongoDB限制
- Oracle的汉字转拼音首字母的函数
- Java多线程之进程和线程
- jsp Ajax请求(返回json数据类型)
- Stem Cell 华人科学家
- python正则表达式--flag修饰符、match对象属性
- [HackerRank]New Year Chaos[UNDONE]
- Java程序设计(第二版)复习 第三章
- 分布式事务之深入理解什么是2PC、3PC及TCC协议?
- mysql查询同一个字段下,不同内容的语句
- redis踩坑记录
- 题解-PKUWC2018 随机游走
- Codeforces Round #412 B. T-Shirt Hunt
- 在springboot中 使用jsp
- eclipse + maven + org.glassfish.jersey 创建 webapi
- 配置SpringMvc + maven 数据源!(四)
- Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
- Hive编程指南
热门文章
- centos6.5后台进程的切换
- 【JZOJ4861】【NOIP2016提高A组集训第7场11.4】推冰块
- 源码篇:MBProgressHUD
- C++返回值优化
- Libevent:6辅助函数以及类型
- 从零学React Native之11 TextInput
- Launch configuration JUnitCore references non-existing project XXX.
- 2019-10-22-win7-无法启动-WPF-程序-D3Dcompiler_47.dll-丢失
- 重磅开源|AOP for Flutter开发利器——AspectD
- @codeforces - 1153F@ Serval and Bonus Problem