Linux-进程概念

目录

进程状态:

操作系统简图

调用进程bin.exe的详细过程 

cpu运行队列的结构

R进程和阻塞进程

进程状态:挂起:

Linux操作:

 ​编辑

 R运行状态

S休眠状态

 T暂停状态:

kill

 kill -18 表示继续

kill -9 杀死进程

 D状态:深度睡眠状态:


进程状态:

 在我们的理解中,进程状态就是进程运行的状态,是这样吗?

操作系统简图

 假如我们有一个可执行程序bin.exe,假如我们想要把该程序加载到内存中,应该怎么操作呢?

调用进程bin.exe的详细过程 

1: 我们的可执行程序文件bin.exe是放在内存中的,假如我们想要把程序加载到内存中,我们首先会把bin.exe加载到内存中,然后生成pcb进程控制块,进程控制块的形式是一个结构体,结构体内部包括进程的所有属性,然后我们的cpu通过进程控制块来控制调用进程,但是注意cpu的数量远远小于进程,所以这些进程要以队列的形式进行排列,由cpu进行依此调用。 如图所示:

注释:cpu以队列的形式对进程进行调用

2:我们知道,程序还可以调用硬件,例如程序A中有printf函数,可以打印信息到显示器上,我们可以发现:进程的数量也是远大于硬件的,所以一个硬件也是对应多个进程的,所以进程不仅需要等待cpu的处理,也需要等待硬件的处理,如图所示:

 由上面的铺垫,我们可以知道:进程状态的定义。

进程状态:在运行队列中的进程的状态叫做进程状态。

进程状态的总结:

1:一个cpu对应一个运行队列

2:让进程进入队列,本质是让该进程的pcb进入队列

3:当进程pcb在运行队列中,进程状态就是R。

4:进程状态不是进程运行时的状态,还是进程在运行队列时的状态。

5:进程不仅要占用cpu的资源,还有可能调用外设(硬件)的资源。

cpu运行队列的结构

 进程队列分为两部分,第一部分是进程控制块指针,指向下一个进程的pcb

第二部分是其他属性,这个属性通常只是一个常数,例如1表示运行,0表示死亡,2表示睡眠等等。

R进程和阻塞进程

例如:cpu调用一个进程,该进程有一个fwrite函数,fwrite需要调用硬盘,但是硬盘被其他的进程占用了,那么cpu怎么操作呢?难道让cpu干等着吗?

答:cpu的速度非常快,效率很高,所以cpu一定不能干等着,cpu把该含有fwrite的进程从进程队列中拿出,把它放在硬盘的等待队列中,然后cpu开始处理下一个进程。

这个fwrite对应的进程就叫做阻塞进程

R进程:进程在cpu的运行队列。

阻塞进程:进程在硬件的等候队列。

 处于阻塞状态的Z进程,当硬件处理到这个进程时,这个进程从阻塞状态变成R状态,并且从硬件的等候队列拿到cpu的运行队列,由cpu处理过之后就可以访问外设了。

拿来拿去处理的都不是进程,而是进程的pcb。

进程状态:挂起:

 如图所示,我们的程序bin.exe被加载到内存中,pcb就是其对应的进程控制块,该进程需要调用硬件,所以该进程是阻塞进程,阻塞进程不会被立即调用,所以阻塞进程短期内并不能够被调用

当我们的进程数量很多时,内存已经快要装不下了,我们怎么处理呢?

答:因为阻塞进程并不会马上就运行,为了节省空间,我们可以把阻塞进程对应的代码和数据存放到磁盘中,阻塞进程所对应的内存就可以供其他进程来使用,进而节省了空间。

1:内存的呼入换出:将进程的相关数据加载或保存到硬盘上。

2:挂起进程一定是阻塞进程,阻塞进程不一定是挂起进程。

Linux操作:

 

 我们重点介绍这些进程状态

 R运行状态

我们首先创建两个文件

 myprocess.c对应的是我们进程的代码,Makefile对应的是我们的进程的依赖方法和依赖对象。

 

 我们对该进程进行调用。

 

 这个指令表示筛选出名字中由myprocess的进程,第一个就是我们需要的进程。

我们可以加上进程的标题,这样更方便查看。

 这里的R是run的缩写,表示运行状态。

S休眠状态

我们对进程的代码进行修改:

 然后我们对该进程进行调用

 

 在进程进行运行的时候,我们创建一个ssh渠道来查看进程的状态。

 我们的进程在运行途中,对应的状态却是S,表示的是休眠状态。

原因如下:我们的cpu是很快的,我们的printf进行调用时需要访问显示器,显示器是外设,比较慢,所以等显示器需要话比较长的时间。

这些时间如果按照百分比来划分的话:大约99%是在等外设就绪,1%的时间在打印数据。

所以,我们大概有99%可能都在等外设就绪,这时候进程处于阻塞状态,我们查看进程状态时,进程显示的是休眠状态。

休眠状态是阻塞状态的一种。

 T暂停状态:

我们对进程的代码进行修改

 我们运行进程:

 我们查看kill指令:

kill

 19号对应的就是暂停指令。

我们查看运行的进程:

 我们的进程的pid是5632,假如我们想要暂停进程时,我们可以输入指令:

当我们输入指令之后:

进程暂停。

 这时候,进程的状态变成T,表示暂停。

暂停也算是阻塞的一种

 kill -18 表示继续

 把暂停的进程恢复运行:

 接下来,查看进程的属性:

 进程属性变成了R,但是少了一个+号,这个是怎么回事呢?

我们先杀死该进程:

kill -9 杀死进程

 接下来,我们对进程代码进行编辑:

 我们对进程进行调用:

 我们查看进程的状态:

 进程中带有+号,进程在运行时,我们在shell输入指令不会生效,并且我们按ctrl+c可以结束掉该进程

 我们先暂停该进程,然后再继续运行该进程:

 这个时候,进程的状态是S

我们可以在进程运行状态下输入指令

 并且按CTRL+c不会终止指令。

 +状态表示的是前台进程,前台进程可以通过CTRL+C直接终止,并且一旦进程运行了,shell命令就无法解析了

-状态表示的是后台进程,后台进程不能通过CTRL+C直接终止,但是可以解析shell命令。

我们可以使用kill -9 来结束后台进程。

 D状态:深度睡眠状态:

D状态表示深度睡眠状态,d表示浅度睡眠,深度睡眠不可以被终止,浅度睡眠是可以被终止的

 进程A的作用是往磁盘中输入数据和信息,当进程空间不够时,操作系统会采用kill一些进程的方法来解决问题,假如我们kill了进程A,磁盘输入的信息也就失效了,这个时候,我们可以把进程A的状态修改为深度睡眠状态,在该状态下,进程A不会被操作系统杀死,只有通过断电或者进程自己醒来的方法解决。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值