【Linux】:进程状态

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux进程状态的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!

C 语 言 专 栏:C语言:从入门到精通

数据结构专栏:数据结构

个  人  主  页 :stackY、

C + + 专 栏   :C++

Linux 专 栏  :Linux

目录

前言

1. OS层面的进程状态

1.1 进程状态

1.2 运行状态

1.3 阻塞状态

1.4 挂起状态(阻塞挂起)

2. Linux中的进程状态

2.1 R状态(运行状态) 

2.1.1 前台进程

2.2 S状态(休眠状态--浅度)

2.3 D状态(休眠状态--深度) 

2.4 T状态(停止状态)

2.5 X状态(终止状态)

2.6 Z状态(僵尸状态)


前言

上篇博客了解到了创建进程的两种方式,以及fork的一些简单原理,那么本期来看一下创建的进程PCB中关于描述进程状态的字段。

1. OS层面的进程状态

1.1 进程状态

在我们系统中会存在许多的进程,那么这些进程会存在多种状态,这些状态分别都是什么呢?

根据不同的操作系统,这些进程的对应状态可能有所不同,我们主要来了解常用的状态。

简单来了解一下进程状态:

进程状态就是PCB中的一个字段,简单的说就是PCB中的一个整形变量 ---- int status

所以我们就可以定一些宏来表示一些状态,将status赋值为某一状态值就表示该进程现在处于什么状态,然后就可以通过if语句判断其状态然后执行不同的任务。

所谓的状态变化,本质就是修改整型变量的值。 

1.2 运行状态

我们的CPU在系统层面都会维护一个运行队列,那么什么叫做运行状态呢?

只要在运行队列中的进程。状态都是运行状态。

简单的说,处于运行队列的进程,就表示已经准备好随时被调度运行了!

1.3 阻塞状态

当CPU调度运行我们的PCB时,就会执行我们所写的一行行代码,那么我们写的代码当中肯定或多或少会存在一些访问系统资源的代码,比如一些磁盘、键盘、网卡等硬件外设,例如我们C语言中的scanf函数,和C++中的cin>>,我们是用这些语言的本质就是要从键盘读取数据,但是如果我们不输入任何东西,代码就会一直卡在这条语句这里,就代表了键盘上的数据是没有准备就绪的,表示我们进程所要访问的资源没有就绪,得到的结果就是不具备访问条件,进程代码无法继续向后执行。

上面说到了我们不输入时就表示我们要访问的资源没有就绪,那么操作系统要不要知道各种设备的状态呢?答案是肯定要知道的,所以操作系统也要对硬件设备进行管理,根据管理的本质:先描述,再组织。

所以OS中会有一个结构体对象,用来专门描述硬件设备,结构体中包含硬件设备的类型、状态、指向下一个结构体的指针、等等各种更多的属性,然后通过指针将各种结构体连接在一起形成了一个链表,这样OS对于硬件设备的管理转化成了对链表的增删查改!

上面了解了OS对于硬件外设进行管理,那么接下来OS要知道设备的这些数据有没有就绪,所以再在描述设备的结构体中添加一个字段用来表示设备的数据有没有就绪,如果这个设备的数据状态没有就绪,那么在结构体中还需要维护一个进程PCB的等待队列,数据没有就绪,直接将该进程所对应的PCB从CPU中的运行队列链接到非CPU的外设中的等待队列里面,那么这个过程就叫做该进程阻塞了!!

在操作系统中,会存在非常多的队列,等待CPU的运行队列、等待硬件设备的等待队列等等。 

当OS识别到外设的数据就绪时,然后再将处于外设的等待队列中的PCB重新连接到CPU中的运行队列中!这个过程就叫做将该进程进行唤醒!

前面说到进程状态变化的本质就是①修改PCB中描述PCB状态的整形变量的值,那么现在还要加上一条:②将进程PCB链入到不同的队列中。

在这些状态变化中,OS是最先知道它所管理的设备的状态变化的,当可执行程序运行起来之后就变成了一个进程,那么OS系统在这个过程中会先检查PCB的状态、需要访问外设的数据状态,根据这些状态修改PC

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

stackY、

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

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

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

打赏作者

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

抵扣说明:

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

余额充值