先列个框架,后续丰富完善。

提这个问题,是因为在Linux内核学习中,遇到过一个让人啼笑皆非的问题。这个问题是啥呢?提个引子,在实际生活中,可能每个人都有过这样的经历,就是总是将某两个明明完全不同的概念搞混。原因有可能是两个概念发音比较接近,或者字形相似,亦或者没有什么相似点,而只是在大脑中奇怪的产生了关联而已,就像量子作用。

回到开头,说说我的这个问题。有一段时间,对于Linux中将wait_queue加入等待队列头,然后再等待被唤醒的逻辑总是想不清楚,直到后来有一天突然搞明白,我是将等待队列和工作队列搞混了。

下面,我们简单总结下Linux中的三个重要队列。

第一个是运行队列。run_queue是内核中极其重要的一个队列。任务调度就是基于这个队列实现的。每当一个进程可以运行的时候(无论是资源满足还是新创建),内核调度器schedule就将其放入运行队列中,当其被选中的时候,通过swich_to调用,完成进程切换,然后执行。

所谓切换,就是将当前进程的上下文保存起来,然后选一个新的进程,加载其上下文。当CPU的PC寄存器切换为被调度进程上次调出时保存的下一条指令后,被调度进程就获得了CPU的使用权,开始执行。

第二个就是等待队列。wait_queue也是内核中非常重要的一个队列。内核的睡眠机制就是基于等待队列实现的。首先需要了解,睡眠只存在于非原子上下文,基本就是内核线程或者进程上下文。一般的工作流程是这样的,进程会将自己加入一个等待队列,然后调用schedule进行调度。调度接口中,会将当前进程从运行队列移除。当进程运行的条件重新满足后,一般是资源满足的地方(还有一种是信号),会唤醒等待队列上的进程。主要的操作就是将进程从等待队列移除,然后重新加入运行队列。这样当调度再次发生后,进程就又有机会重新被调度到并执行了。

第三个是工作队列。work_queue在内核中有多个变种,但基本逻辑都差不多。内核工作线程检查工作队列,执行队列上注册的回调函数。工作队列运行在线程上下文,这在内核的有些地方可能是非常重要和有用的,比如DMA的一些内存释放是需要在线程上下文执行的,这样在中断中释放时,就需要将释放工作添加到工作队列上,让其切入线程上下文执行。

分清概念十分重要之--Linux中的各种队列相关推荐

  1. Linux中的消息队列、共享内存,你确定都掌握了吗?

    消息队列(message queue) 消息队列是消息的链表,存放在内存中,由内核维护 消息队列的特点 1.消息队列中的消息是有类型的. 2.消息队列中的消息是有格式的. 3.消息队列可以实现消息的随 ...

  2. linux查看ibmmq进程,ibm-mq – 如何检查IBM MQ for Linux中是否存在队列名称?

    除了Rob和T.Rob所说的之外,还添加了另一个建议. MQ v7.1及更高版本附带dmpmqcfg命令,您可以使用它来检查特定队列. 以下示例与您的示例一致,该示例检查队列管理器是否正在运行: 要使 ...

  3. Linux进程间通信——使用消息队列

    下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信--使用命名管道 一.什么是消息队列 消息队列提供了 ...

  4. linux和unix文件没有创建时间,Linux中没有文件创建时间的概念

    在Linux中,没有文件创建时间的概念.只有文件的访问时间.修改时间.状态改变时间.也就是说不能知道文件的创建时间.但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过, ...

  5. Linux创建文件自动消失,Linux中没有文件创建时间的概念

    在Linux中,没有文件创建时间的概念.只有文件的访问时间.修改时间.状态改变时间.也就是说不能知道文件的创建时间.但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过, ...

  6. Linux中的tty、pts、pty等概念辨析

    Linux中的tty.pts.pty等概念辨析 基本概念 tty.pty.pts.ptmx tty(终端设备的统称):tty一词源于Teletypes,或teletypewriters,原来指的是电传 ...

  7. linux中文件复的概念,诠释 Linux 中“一切都是文件”概念和相应的文件类型

    原标题:诠释 Linux 中"一切都是文件"概念和相应的文件类型 原文出处: Aaron Kili 译文出处:runningwater 在 Unix 和它衍生的比如 Linux 系 ...

  8. linux中管道的概念,浅谈Linux管道

    管道(pipe)是一个我们在学习Linux命令行的时候就会引入的一个很重要的概念.管道是UNIX环境中历史最悠久的进程间通信方式,从本质上说,管道也是一种文件,也是遵循UNIX的"一切皆文件 ...

  9. 【转】Linux中tty、pty和pts概念及区别

    转自:Linux中tty.pty和pts概念及区别 - 知乎 基本概念 ①tty(终端设备的统称): tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是一种 ...

最新文章

  1. RecyclerView的滚动事件OnScrollListener研究
  2. vue.js项目的mock数据配置
  3. MYSQL的一些常用函数
  4. 好奇!仅 13kB 大小的游戏,源码长啥样?
  5. Qt 有层级关系的qss样式,使用id定位到具体控件
  6. 阿里云CentOS-7.2安装mysql
  7. IIS之错误解决之道
  8. 自动挡跑高速用S挡还是D挡? 回答
  9. 朴素贝叶斯在文本分类中的应用之 伯努利
  10. 两台电脑共享鼠标键盘Synergy
  11. 无线ap ntp服务器,我有一优科 ZoneFlex 7982 的无线AP,怎样可以进AP系统进行设置...
  12. 08-22 CDR数据时钟恢复电路
  13. iPhone4s(iOS 6.1.3 越狱) 登录微信(6.2.0.19)
  14. ubuntu mysql-admin_ubuntu 14.04中安装phpadmin即mysql图形管理界面
  15. BIT-Vehicle Dataset - 车辆车型识别数据集
  16. 双硬盘安装双系统,配置显卡驱动,安装cuda,pycuda
  17. 75佳精美的 CSS 网页设计作品欣赏(系列一)
  18. 耳机重装系统后服务器坏了,Win7重装后耳机没声音|重装系统后耳机没声音怎么办?...
  19. 程序员快速熟悉新项目和业务逻辑的技巧
  20. 第十五章.输入/输出

热门文章

  1. python内置函数用来返回列表、元组、字典_python程序设计第一章基础知识 题库及选解...
  2. 【CAD基础】图层管理
  3. 守望先锋地图工坊分享合集
  4. TCP/IP协议 之IPV4与IPV6的区别
  5. SMTP 协议邮件发送工具封装
  6. 利用matplotlib实现TMDB电影数据可视化
  7. 如何在App Store用流量下载超过150M的软件?
  8. 转载:做正确的事情,等着被开除(Do the right thing, Wait to get fired)
  9. 刚刚装好的ppt插件islide消失了,如何解决呢?
  10. matlab用雅可比(Jacobi)迭代法求解方程组