进程状态的理解

news2024/11/27 9:42:29

我们知道进程会有属于自己的PCB,便于操作系统的管理,而PCB结构体里面还有进程状态参数,类似于用一个变量标识对应的进程状态,就相当于将每个进程状态编号,而PCB中有一个变量存储当前进程状态所对应的编号,也就表明当前进程对应的具体状态,好让操作系统看到具体的状态,并对其更好地进行操作。所以总而言之进程状态的本质其实就是PCB内部的一个整形变量,不同的整型值对应着不同的进程状态

而对于普适的操作系统而言进程状态图是这样的:

 操作系统层面的进程状态

运行状态

我们知道每个进程都有自己所对应的PCB,当进程运行的时候,为了更好地进行进程管理调度,会为每一个CPU创建一个运行队列,也就是一个结构体类型,内部会将每一个需要运行的进程所对应的PCB列入到运行队列当中去,此时该进程PCB中标志进程变量的值就可以设为运行状态对应的数值。所以运行状态就是处于CPU运行队列当中的进程。但是也要注意,处于运行状态的进程并不是证明该进程就一定在被CPU运行。

阻塞状态

当一个进程被运行时,该进程可能会访问对应的外设,例如硬盘、键盘...例如我们的C++代码当中调用cin函数时,肯定需要访问键盘,进程想要运行需要从键盘中拿数据,但是如果此时不在键盘上输入任何数据的话,此时就可以说该程序状态是阻塞状态。

同样像管理进程一样,操作系统为了管理好硬件资源,也会为硬件设备创建对应的结构体,而每个结构体都标识着对应的硬件,而每一个硬件数据信息都会存在该结构体当中,便于像操作系统管理进程一样管理硬件设备。而每一个硬件设备对应的结构体当中还有一个PCB*的类型wait_queue的变量,是一个等待队列。会将所有访问硬件不成功的进程链入到对应的等待队列当中。所以上面的例子当中,该进程需要的访问键盘硬件不成功,会将该进程的PCB链入到键盘的等待队列当中,并将该进程PCB中标志进程变量的值改成阻塞状态对应的数值。直到硬件被成功访问之后再将进程pcb列回到运行队列中。

阻塞状态不仅仅只有等待硬件资源这一种,实际上一个进程执行时需要访问另一个进程时,而另一个进程未响应的话,这一个进程也会处于阻塞状态。或者一个进程访问软件资源,等待软件资源就绪时也会处于阻塞状态。

挂起状态

当我们的一个进程发生阻塞时,进程就会等待某种资源,而此时进程的代码和数据依旧是存在内存当中的,占据着内存空间。但是如果此时恰巧内存空间不足的话,为了避免操作系统崩溃的可能,操作系统就会将所有阻塞状态的进程所对应的代码和数据从内存中拿出来交换到磁盘当中,此时就释放了一部分资源供给操作系统使用。此时该进程就属于挂起状态。

其实我们的磁盘当中有一个swap分区,大小一般等于内存大小。而这部分空间就是专门给操作系统进行内存与外存数据交换的。也就是将上面提到的阻塞状态进程的代码和数据进行交换到这磁盘的swap分区的,当该进程再次能被操作系统调度的时候,那么被置换出去的代码和数据又将会置入到操作系统的内存当中。


Linux下的进程状态

其实Linux操作系统下面的状态本质上是和上面差不多的,只不过会换种说法:

static const char* const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

R状态 

R状态其实就是操作系统上的运行状态,但是在一般查看进程状态时是很难看到R状态的。

此时进程的代码仅仅是执行死循环,啥也没干,也就是说该进程始终在CPU的运行队列中。

S状态

S全称sleep,也就是休眠状态,相当于操作系统上的阻塞状态。

此时该进程执行时处在S状态,其实就是表明该进程此时在等待队列中,因为该进程需要执行printf函数,需要访问显示器这个硬件设备,但是显示器并不一定资源就绪,所以查看该进程时就处于休眠状态。其实本质上是因为硬件的执行效率远远低于CPU的执行效率,而访问硬件速度相较而言是十分缓慢的,CPU的运行是十分快的。所以查看进程状态时,几乎绝大部分时间都是在等待硬件资源就绪,只有极少的时间是在运行代码。

注:查看进程状态时,后面几乎都有个+:其实这种进程叫做前台进程也就是进程运行时命令行是无法执行其他命令,也就是不能运行其他进程

没有+:该进程称为后台进程,也就是说是在后台运行的,所以说命令行当中还可以执行其他命令,运行其他的进程(执行后台进程需要在命令行中输入该进程运行指令时,后面加上&符)后台进程无法通过Ctrl c终止进程,想要终止只能强行杀掉该进程:kill -9 +进程pid

D状态

D状态其实也是休眠状态,但是属于深度休眠,相较于S状态会对外部信号做出响应而言,而D状态不会对外部信号做出响应。而disk其实就是磁盘的意思,也就是磁盘休眠。

操作系统的挂起状态我们已经了解过,就是当内存空间不足时,操作系统会将阻塞状态进程的代码和数据进行提出交换到磁盘上去。但如果恰巧在此时,操作系统的空间还是不足的话,那么该进程的PCB就极可能会被操作系统给kill掉。

假如说,当一个进程需要向硬盘中写入数据,在磁盘写入数据的过程中该进程始终处于阻塞状态,也就S状态,而此时操作系统中内存爆满的话,该进程就会被删掉,那么此时磁盘读取数据也恰巧失败的话,将信息反馈给进程,可进程也被删除了,无响应,那么磁盘为了不影响其他进程的访问,就也会将进程的数据清除,而此时数据就全部丢失。所以就有了D状态,处于此状态的进程不会被操作系统删掉也不能被用户删掉,只能等待进程自行恢复或者强行关电源。

T状态

T状态就是暂停的意思。可以通过 kill-l 查看进程信息的详细列表

其实编号后面就代表着该编号所执行的操作。 SIG就是signal(信号)的缩写,使用该指令时后面要跟上进程pid,所以可以kill -19 +pid或者kill -SIGSTOP +pid暂停进程,而且暂停以后该进程就自动变成后台进程了。想要恢复该进程的话可以使用18号指令CON(continue)

t状态

tracing stop追踪暂停状态,进程处于此状态表示该进程正在被追踪。

当我们的代码在debug(-g)下时,可以使用gdb+可执行程序调试代码,此时使用b打断点,然后再r(在第一个断点处停止),此时该进程的状态就是t状态

X状态

x状态就是死亡状态,表示该进程运行结束了,所以说该进程的PCB和代码数据都被操作系统回收了。

Z状态

Z状态就是僵尸状态。当一个进程执行完该进程需要执行的操作之后,该进程会返回任务执行的结果,并反馈给操作系统或者其父进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1070361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国庆要闻回顾 | OpenAI 拟研发 AI 手机;9月以太坊上NFT销售量创2021年2月以来最低记录...

国庆期间区块链行业要闻回顾:产业方面,全国区块链行业产教融合共同体在雄安新区成立,巴西推出基于区块链的数字身份证,瑞银集团在以太坊上推出代币化货币市场基金试点,NASA拟在月球设立区块链数据中心以保存国家机密资…

周总结【java项目】

项目进度: 学习了JavaFX,下载了sceneBuilder辅助工具构建窗口(目前建立了登陆,注册,忘记密码的界面),然后是学习了MySQL的连接,现在的项目是刚连上数据库; 下一步&…

【研究的艺术】通读《The Craft of Research》

通读《The Craft of Research》 前言1. 跟读者建立联系2. 明白问题的重要性3. 组织论述4. 论点4.1 Making Claims4.2 Assembling Reasons and Evidence4.3 Acknowledgments and Responses4.4 Warrants 未完待续。。。 前言 本篇博客是《The Craft of Research》的通读笔记&…

Hudi 系列-基础概念-索引机制

目录 前言问题作用减少开销怎么理解数据变更基础 类型全局索引FlinkSpark 总结 前言 Hudi 系列文章在这个这里查看 https://github.com/leosanqing/big-data-study 索引(Index)是 Hudi 最重要的特性之一,也是区别于之前传统数仓 Hive 的重要特点, 是实现 Time Travel, Update…

手机切换ip地址的几种方法详解

在某些情况下,我们可能需要切换手机的IP地址来实现一些特定的需求,如解决某些应用程序的限制、绕过IP封禁等。本文将为大家分享几种切换手机IP地址的方法,让您能够轻松应对各种需求。 一、使用动态服务器 使用动态服务器是一种常见的切换手机…

一道经典的指针笔试题!!!!

文章目录 写在前面1. 笔试题代码2. 代码解释3. 代码执行运行结果总结 写在前面 本篇文章讲解了一道关于指针和数组的经典笔试题。 前两篇关于指针和数组的讲解,链接如下: 详解C语言指针(一) 详解C语言指针(二&#xf…

嵌入式养成计划-33--数据库

七十一、 数据库 71.1 数据库基本概念 数据(Data) 能够输入计算机并能被计算机程序识别和处理的信息集合数据库 (Database)数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合 常用的数据库 大型数…

定制自己的 Excel 界面 + 保存 Excel

文章目录 Excel 的界面自定义快速访问工具栏自定义功能区折叠或显示功能区自定义 Excel 的界面保存 Excel Excel 的界面 快速访问工具栏也可以放在功能区下方: 效果: 自定义快速访问工具栏 方法一: S1: S2: 方法二…

创作2周年?浅记一下~

前言: 最近确实有点缺乏去更新博客的动力,一晃两年过去了,其实也是我新入职公司的两年,两年虽然不长,但是确实发生了太多事情值得去记录下来... 机缘 说是机缘也不是算是,第一次写博客是刚好在CSDN里面查资…

JAVA BIO深入剖析

3.1 Java BIO 基本介绍 Java BIO 就是传统的 java io 编程,其相关的类和接口在 java.io BIO(blocking I/O) : 同步阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需 要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,可以…

单目标应用:猎豹优化算法(The Cheetah Optimizer,CO)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、猎豹优化算法CO 猎豹优化算法(The Cheetah Optimizer,CO)由MohammadAminAkbari等人于2022年提出,该算法性…

微软有关AD域知识,创建AD域,新用户加入域步骤,MDE部署

一、有做过什么ad域的东西 AD是Active Directory的缩写,即Windows服务器的活动目录,在目录中可以收录公司的电脑账号,用户账号,组等等以提供更好的安全性和更便捷的管理能力。 域是组织单元,也是来划分安全界限的。当…

TCP/IP(二)导论

一 知识铺垫 以下内容参照 <<电子科技大学TCPIP协议原理>>全 ① 协议和标准 一组规则&#xff1a; 交通规则、学生上学的学生守则等;数据通信的规则,有一个专门的名称叫作协议 protocol语义&#xff1a;具体描述在通信当中,每一个信息的具体含义. 二进制bit流…

AI伦理:如何确保人工智能的公平与透明

文章目录 什么是AI伦理&#xff1f;AI公平性AI透明性 为什么AI公平性和透明性重要&#xff1f;确保AI公平性的方法1. 数据收集和准备2. 算法和模型3. 解释和可解释性4. 持续监测 确保AI透明性的方法1. 记录决策2. 可解释性工具3. 用户教育 AI伦理的挑战和未来结论 &#x1f389…

sed -i 使用变量进行替换

一、替换文本的命令 1、命令&#xff1a; sed -i s/old/new/g xxx.log 例子&#xff1a;将文件1.txt中的字符串 "cores":"" 替换成字符串 "cores":"1" 命令&#xff1a;sed -i s/"cores":""/"…

积分球可以用于什么光谱光学检测

积分球是光测量的主要工具之一。积分球可以同时捕获一个光源发出的所有辐射。 1.光源测量 积分球可以用于测量光源的光通量、色温、光效等参数。通过将光源放置在积分球的入口处&#xff0c;球内的光线经过多次反射后形成均匀的照度分布&#xff0c;然后使用光度计或光谱仪对光…

接口测试之Mock 测试

一、Mock 测试 1、Mock 测试的场景 前后端数据交互第三方系统数据交互硬件设备解耦 2、Mock 测试的价值与意义 不依赖第三方数据节省工作量节省联调 3、Mock 核心要素 匹配规则&#xff1a;mock的接口&#xff0c;改哪些接口&#xff0c;接口哪里的数据模拟响应 4、mock实…

四位十进制频率计VHDL,DE1开发板验证,仿真和源码

名称&#xff1a;四位十进制频率计VHDL&#xff0c;DE1开发板验证 软件&#xff1a;Quartus 语言&#xff1a;VHDL 要求&#xff1a; 数字频率计设计要求 1、四位十进制数字显示的数学式频率计,其频率测量范围为10~999%khz,测量单位为kHz。 2、要求量程能够转换。即测几十…

课题学习(五)----阅读论文《抗差自适应滤波的导向钻具动态姿态测量方法》

一、简介 抗差自适应滤波&#xff1a;利用等价权函数和自适应因子合理的分配信息&#xff0c;有效地滤除钻具振动对动态姿态测量的影响。、   针对导向钻井工具动态测量受钻具振动的影响而导致测量不准确的问题&#xff0c;提出一种抗差自适应滤波的动态空间姿态测量方法。通…

Kubernetes 加入主节点报错

现象 原因&#xff1a; 之前已经加入过一次 解决方案 [rootk8s-node01 k8s_images]# kubeadm reset [reset] WARNING: Changes made to this host by kubeadm init or kubeadm join will be reverted. [reset] Are you sure you want to proceed? [y/N]: y