详细分析什么是进程?如何理解进程状态?

什么是进程?

比较官方一点的回答是:当一个程序加载到内存的时候,就是一个进程。

但是这是不准确的回答,进程是怎么在内存中形成的,以及内存是如何管理进程的,是通过什么描述进程的?下面我们将详细的分析这些问题。

一,内存是如何看待进程的?

我们在windows下双击一个.exe的可执行程序,或者在LINUX下以./运行时,程序就会加载到内存当中去,变成一个进程。

1,进程是什么?

当一个进程在OS中被创建的时候,在内存的内部,也就为这个程序创建了一个PCB。

PCB:

为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构

 可以把PCB理解为进程属性的集合。这个PCB并非是源程序的二进制代码,而是通过指针来指向代码和数据的位置,是通过地址来寻找的。当内存为可执行程序创建一了一个PCB之后,OS会将它插入到一个链表当中去,OS就是以链表来管理所有进程的。

所以我们回答的更仔细一点:进程是:对应PCB+代码和数据。

PCB可以看作是进程的描述。

2,管理进程

所以我们现在大概的能理解当一个进程被创建的时候,就是将其对应的PCB插入到OS所管理的链表当中去,从该链表中删除PCB时,也就对应有一个进程被退出了。

二,进程状态

进程被加载到内存中之后,总要运行呀!但是计算机往往是要处理大量的进程的,但是我们的CPU又往往只有一个,那么计算机是如何来保证每个进程都能运行和处理不需要的进程的呢?

这就要说到进程状态了。

我们OS在处理大量的进程的时候也是会对PCB设置对应的状态的。就像在医院中手术室里的人和手术室外的人一样,手术室外的人在等待,而手术室里的人正在处理伤口,此时医生就像一个CPU一样。

R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列 里。

这里没有显示R状体的原因是CPU的计算速度很快,它并不是运行完一个进程再进行下一个进程,而是将处在运行队列中的每个进程一次运行一点,只不过我们肉眼是观察不到的,也很难捕捉到R状态。

S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠 (interruptible sleep))。

就像我们上面观察到的一样,我们的进程在没有被CPU运行的时候,就是在等待轮到它的时候,这个时候就是S状体。S状态也可以是进程在等待其他资源,比如网络,或者某个函数,当资源就绪的时候,就会进入到R队列中去。

D磁盘休眠状态(Disk sleep)::有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的 进程通常会等待IO的结束。

虽然也是睡眠状态,但是和上面不同的是,D是一种不可被中断的状态,也就是它会一直等待资源到位,比如我们调用scanf()的时候,如果我们不进行输入,程序就会一直等地键盘输入。

T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。

 Pid就是该进程的进程号,要控制进程的状态都是通过进程号来控制的。

X死亡状态(dead):这个状态只是一个比较特殊的状态。

当进程被退出的时候,进程的状态就是X状态,不过在此之前,可能会存在一个僵尸状态

当进程退出并且父进程(使用wait()系统调用,后面讲) 没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。 所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态

 我们使用fork()创建一个子进程,子进程执行3秒后退出,而父进程不对子进程进行回收,那么该子进程的状态就是僵尸状态,当僵尸状态被回收之后,紧接着就是X死亡状态,这个状态我们也很难捕捉到。

 可以看到子进程由一开始的S状态在3秒之后就变成了Z状态,并且一直以Z状态存在着,并没有退出,它们还在占用着内存的空间,但是却什么都没做,只是等待被回收!!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南山忆874

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

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

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

打赏作者

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

抵扣说明:

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

余额充值