1. 应用阻塞

应用程序使用 select() 或 poll() 调用设备驱动程序的 poll() 函数,该函数把输入输出复用处理的等待队列追加到由内核管理的进程的 poll_table()上

#include <linux/poll.h>
static inline void poll_wait (struct file *filp, wait_queue_head_t *wait_address, poll_table *P);

filp:设备文件信息的 struct file 结构体的指针参数 struct file *filp

P:追加到设备驱动上的 poll_table结构体指针参数

2. 内核等待事件

/*
* conditon:必须满足,否则阻塞
* timeout和conditon相比,有更高优先级
*/
wait_event(wq, condition);
wait_event_timeout(wq, condition, timeout);
wait_event_interruptible(wq, condition) ;
wait_event_interruptible_timeout(wq, condition, timeout) ;

3. 唤醒等待队列

//可唤醒处于TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE状态的进程
#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL) //只能唤醒处于TASK_INTERRUPTIBLE状态的进程
#define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)

4. schedule_timeout

表示的进程睡眠直到时间超时,函数就会立即返回

5. 信号

TASK_INTERRUPTIBLE是可以被信号和wake_up()唤醒的,当信号到来时,进程会被设置为可运行

TASK_UNINTERRUPTIBLE只能被wake_up()唤醒

信号来源:

硬件来源:(比如我们按下了键盘或者其它硬件故障)

软件来源:最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作

最新文章

  1. SQL Server 索引和表体系结构(非聚集索引)
  2. HDU 2586 (LCA模板题)
  3. SSAS处理时“找不到属性键”的解决办法 (转载)
  4. HDU 5902 GCD is Funny 数学
  5. Django提供后台接口的跨域问题
  6. Java标准输入输出流的重定向及恢复
  7. php parse_url 函数使用方法解析
  8. 十分钟让你的ASP.NET MVC网站变成PHP
  9. Slf4j的包冲突
  10. Linux学习之find命令
  11. Foundation NSMutableArray遍历,选取出符合条件的所有对象
  12. jQuery中的index方法介绍
  13. spring整合flex
  14. 如果在VMware上免费下载驱动
  15. JS嵌套循环的典型练习题
  16. java设计模式---职责链模式
  17. 一种动态写入apk数据的方法(用于用户关系绑定、添加渠道号等)
  18. HDU 1301-Jungle Roads【Kruscal】模板题
  19. 一些js的小技巧
  20. 基于Cython和内置distutils库,实现python源码加密(非混淆模式)

热门文章

  1. 自动化办公:python操作Excel
  2. layui 复选框checkbox 实现全选全选
  3. osg geometry清空vertex
  4. cisco路由器telnet及设置用户名和密码的几种方式
  5. WordtoPdfUtil word转pdf
  6. ElasticSearch集群状态查看命令大全(转)
  7. Cassandra开发入门文档第四部分(集合类型、元组类型、时间序列、计数列)
  8. [LeetCode] 641.Design Circular Deque 设计环形双向队列
  9. Java之字符和字符串
  10. scala 样例类