【Linux操作系统】关于深度睡眠与浅度睡眠进程的理解

一、可中断的睡眠状态(S浅度睡眠状态)

S(sleeping)在本质上也是阻塞状态的一种,可以说是阻塞的一种分支

S状态是Linux中可中断的睡眠状态,表示进程正在等待某个事件或资源

S状态下的进程可以被信号或中断唤醒并继续执行。

在这种状态下,进程无法继续执行,因为它需要等待的资源或事件尚未发生。

此时进程不会占用CPU资源,操作系统会调度其他可执行的进程

等待某个事件或资源的完成后或者接收到信号,又会自动回到运行状态

例如我们平时的命令行等待我们输入命令时就是一个浅度睡眠状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将进程运行起来我们可以看到其是S+的状态,因为命令行此时正在等待用户的输入,遇到I/O操作。

二、不可中断的睡眠状态(D深度睡眠状态)

D状态是Linux中不可中断的睡眠状态,也称为磁盘睡眠状态。在这种状态下,进程正在等待磁盘I/O操作或其他无法被中断的硬件操作完成。

进程无法响应任何信号或中断,除非是设备断电了等物理因素。

进程只能等待操作完成后才能继续执行。

三、关于S浅度睡眠状态与D深度睡眠状态的理解

学了挂起状态,我们可以知道,在内存不足时,会通过挂起状态来释放我们的内存

但是如果在极端情况下,即使挂起状态释放内存也不够呢?这时操作系统就没办法了,只能亲自动手开始杀进程了

但是这时用户有一个特别重要的信息要通过进程写入磁盘,但这个进程又刚好被操作系统杀了呢?这可就麻烦了,信息丢失可是个大问题
在这里插入图片描述

于是为了保证某些正在干重要事情的进程不被杀掉,给这些进程加了一块“免死金牌” D状态,操作系统在杀进程时,如果进程只是一个普通的‘S’,操作系统可以杀,但如果是‘D’,那么因为有免死金牌,操作系统不能杀

这个免死金牌具体来说就是给该进程的状态设置为深度睡眠状态。那么这个进程就不会被杀死了,当磁盘写完数据后告知进程,那么它就可以将自己放入【运行队列】里去运行,此时它的状态就变成R了

D状态的话操作系统是没有办法将其杀掉的,而是要等到磁盘写入完毕或者什么事情执行完毕后其才会去自动结束这个进程,或者是在外部断电、直接拔掉电源即可

那如果D状态的进程特别多呢?

一般系统中D状态的进程是很少见的,如果你看到了D状态的进程,那就说明你的系统里挂不远了,洗洗睡吧

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饿了我会自己捡代码吃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值