1、深度睡眠TASK_UNINTERRUPTIBLE和浅度睡眠TASK_INTERRUPTIBLE

浅度睡眠代码模板

2、为什么需要深度睡眠?

深度睡眠是不可避免的

读磁盘的时候,就是深度睡眠。

程序的执行是 边执行边 load 代码段 。这个过程不能被信号打断,否则实现起来是极其复杂的。

下面演示一下深度睡眠 和 浅度睡眠的例子
globalfifohttps://github.com/merlindu/note/tree/master/contents/linux_device_driver/drivers/globalfifo/ch12https://github.com/merlindu/note/tree/master/contents/linux_device_driver/drivers/globalfifo/ch12

浅度睡眠可以被信号打断:

3、D状态的意思是什么?

深度睡眠不可以被信号打断:D+状态。

kill -2 8279   kill -9 8279 是杀不到 深度睡眠的进程,

深度睡眠会增加 load average , 1 分钟,5分钟,15分钟的负载。但是不影响 CPU的使用率。

1分钟变的最快,15分钟变的最慢,5分钟跟着1分钟的变化,15分钟跟着5分钟的变化,类似于股票的日线,周线,月线。

top 命令 load average 是评估什么的呢?

load 其实是指 CPU的 任务队列里的 具有的负载量。

比如,任务队列里有1个满负载的任务,load=1 , 如果有2个满负载的任务,load=2 (不管几个核都是2)。但是如果就1个核的话,load > 1 就说明 负载有点重了。但是如果 load = 2 , 有 4个核,说明负载还算轻松,因为还有两个空闲的核。如果有两个不是满负载的任务,0.3  0.4 这两个任务的负载加起来0.7的负载 ,1个核 就可以很轻松。

但是 load average 只看CPU的话,有些情况下会不准。比如下面的情况,正常质量高的硬件,计算出来的load average应该低,质量差的硬件计算出来的 load average 应该高。

进程 CPU消耗 + IO消耗,同样都是1Ghz 的CPU ,同样的代码,跑起来的结果可能就是不一样。

高速硬盘 80%的时间花费在了CPU上,低速硬盘,绝大部分时间花在了读磁盘上。这样计算的就不准了。

所以就有了下面的补丁,就把等待磁盘IO的时间计算上了

所以,要是 top 显示 load average 高的话,CPU利用率又很低,要么你用了 task_uninterruptible 要么你的磁盘很慢。因为磁盘的睡眠都是task_uninterruptible的。

4、TASK_KILLABLE

但是使用深度睡眠,如果 硬盘坏了,或者 nfs server 挂掉了,用户层的APP就 kill 不掉了,这多让人头疼。深度睡眠 不响应信号,是怕执行用户层的信号处理函数,引起递归操作,逻辑太复杂。

那有没有一种信号,不响应用户层的信号处理函数,直接杀死进程呢?

在 Linux 发展过程中,出现了一种新的状态 TASK_KILLABLE

#define TASK_KILLABLE            (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)

TASK_KILLABLE  本质上是一种深度睡眠,但是是可以被致命信号唤醒的,唤醒之后就是被kill 掉的。TASK_KILLABLE  体现在 ps 命令 也是 D状态。

什么是 fatal_signal 呢?

fatal_sinal 就是包含 信号 9 的信号。

kill -9 可杀死该进程

ctrl + c  = kill -2  也可以杀死 该进程。信号2可以被用户空间屏蔽掉,但是信号9不可以被屏蔽

所以 kill -2 也能杀死 task_killable 的进程。这里可以参考下内核代码 kernel/signal.c

如果在用户空间,将信号2的 处理函数修改了(本来是杀掉进程) ,sig_fatal() 中 SIG_DEF(default) 就不成立了,这样 kill -2 就无法杀死此进程了。

但是一般来说 SIG_KILLABLE 用在磁盘IO 当中,一般情况下,是使用 TASK_INTERRUPTIBLE

进程线程(六) 深度睡眠 和 浅度睡眠相关推荐

  1. SYD8801低功耗【深度睡眠模式】【浅度睡眠模式】【进入睡眠模式后要等待硬件进入睡眠】【内部上拉电阻对功耗的影响】【测试低功耗步骤】

    SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机.32位ARM Cortex-M0处理器.128kB Flash存储器.以及丰富的数字接口.SYD8801片上集成了 ...

  2. linux之进程线程信号全解

    一.linux进程全解 1.程序的开始结束及预处理atexit函数 main函数由谁调用:其实在裸机程序中c语言运行前是需要一段引导的汇编代码为c语言运行准备环境的如栈,只是在使用编译器开发过程中我们 ...

  3. linux 编程 调度,Linux的进程线程及调度

    搜索热词 本文为宋宝华<Linux的进程.线程以及调度>学习笔记. 1 进程概念 1.1 进程与线程的定义 操作系统中的经典定义: 进程:资源分配单位. 线程:调度单位. 操作系统中用PC ...

  4. 《趣谈Linux》总结三:进程/线程

    8 进程管理 有了系统调用,就可以开始创建进程了 8.1 通过写代码使用系统调用创建一个进程 在 Linux 上写程序和编译程序,也需要一系列的开发套件,就像 IDEA 一样: 运行下面的命令,就可以 ...

  5. Linux查看进程线程个数

    1.根据进程号进行查询: # pstree -p 进程号 # top -Hp 进程号 2.根据进程名字进行查询: # pstree -p `ps -e | grep server | awk '{pr ...

  6. 进程/线程同步的方式和机制,进程间通信

    一.进程/线程间同步机制. 临界区.互斥区.事件.信号量四种方式 临界区(Critical Section).互斥量(Mutex).信号量(Semaphore).事件(Event)的区别 1.临界区: ...

  7. Linux系列之查看进程线程的方法

    在window系统查看系统进程,我们一般会使用Ctrl+Shift+Esc打开系统进程监控页面,但是在Linux系统查看进程一般使用top命令或者ps命令,但是如果要查看线程怎么查看?其实也可以使用这 ...

  8. XV6源代码阅读-进程线程

    文章目录 Exercise1 源代码阅读 Exercise2 带着问题阅读 参考文献 Exercise1 源代码阅读 基本头文件:types.h param.h memlayout.h defs.h ...

  9. Map集合 File类 递归 序列化 常用类 进程线程 死锁

    一.Map集合 将键映射到值得对象,键得值不能重复,一个键可以对应最少一个值. Map接口下的封装好得实现类 –|HashMap –|TreeMap 1.Map接口下的方法 增://将指定得值与该映射 ...

最新文章

  1. CVPR2021 | PAConv:一种位置自适应卷积,点云分类、分割任务表现SOTA
  2. solr系列之solr-5.5.5 window单机版默认Jetty安装
  3. cf 11A Increasing Sequence(水,)
  4. 《数据科学与大数据分析——数据的发现 分析 可视化与表示》一2.3 第2阶段:数据准备...
  5. 计算机网络 ip协议是,计算机网络知识:TCP/IP协议
  6. python奖励多少钱_关于python的问题,好的高奖励!
  7. python子类继承父类属性实例_python – 从子类内的父类访问属性
  8. 两列数据找出相同项自动对应_关于数据核对的6个超级技巧,用过的人都说好...
  9. DayDayUp:2021年的自我总结
  10. nodejs通过later实现定时执行任务
  11. linux菜鸟要飞-根目录
  12. 通用计算机实习周记,实习周记100篇通用版|绘图员实习周记范文
  13. 计算机二级access难不难,计算机二级access难吗
  14. Kotlin学习:标准函数(Standard.kt),run()、with()...
  15. 通过脚手架安装Ant+react+umi+dva项目(一)
  16. 使用python和tableau对数据进行抓取及可视化
  17. 沧海一声笑(最好版):也论智能的生成
  18. QT 在注释中遇到意外的文件结束
  19. 郑州大学计算机在职博士招生简章,郑州大学医学在职博士招生简章
  20. 密码极客经济学博士揭秘,2020年哪个区块链项目最值期待?

热门文章

  1. 面试官:为何Redis使用跳表而非红黑树实现SortedSet?
  2. 【pandas】--DataFrame数据筛选(二)
  3. python和c++实现 不改变长宽比缩放图片
  4. 2022年财务顾问FA行业研究报告
  5. 邓俊辉 数据结构与算法C++版 第十三章 串 ADT
  6. touch.pageX/touch.screenX/touch.clientX的区别
  7. 前后端分离页面500错误,控制台不打印错误日志的错误定位
  8. bartender打印错误
  9. OSChina 周六乱弹 —— 给你看个小仙女
  10. 记:解决 Weditor 页面元素坐标定位不到、不准确的问题