linux操作系统——进程状态转移

系统进程管理方法

获取当前系统的进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间、查看 或设置CPU使用率、内存使用率、IO信息、Socket连接、线程数等,这些信息可以呈现出指定进 程是否存活,资源利用情况,为开发人员的代码优化、问题定位提供很好的数据参考。

进程状态转移

进程在其声明周期内,由于系统中各个进程之间的相互制约关系及系统的运行环境的变化,使得进程的状态也在不断发生变化,即一个进程会经历不同的状态

五种状态

1.创建状态

进程由创建而产生。创建进程是一个非常复杂的过程,一般需要通过多个步骤才能完成:如首先由进程申请一个空白的进程控制块(PCB),并向PCB中填写用于控制和管理进程的信息;然后为该进程分配运行时所必须的资源;最后,把该进程转入就绪状态并插入到就绪队列中。

2.就绪状态

这是指进程已经准备好运行的状态,即进程已分配到除CPU以外所有的必要资源后,只要再获得CPU,便可立即执行。如果系统中有许多处于就绪状态的进程,通常将它们按照一定的策略排成一个队列,该队列称为就绪队列。有执行资格,没有执行权的进程。

3.运行状态

这里指进程已经获取CPU,其进程处于正在执行的状态。对任何一个时刻而言,在单处理机的系统中,只有一个进程处于执行状态而在多处理机系统中,有多个进程处于执行状态。既有执行资格,又有执行权的进程。

4.阻塞状态

这里是指正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,即进程执行受到阻塞。此时引起进程调度,操作系统把处理机分配给另外一个就绪的进程,而让受阻的进程处于暂停的状态,一般将这个暂停状态称为阻塞状态

5.终止状态

进程的终止也要通过两个步骤:首先,是等待操作系统进行善后处理,最后将其PCB清零,并将PCB空间返还给系统。当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止状态。进入终止态的进程以后不能在再执行,但是操作系统中任然保留了一个记录,其中保存状态码和一些计时统计数据,供其他进程进行收集。一旦其他进程完成了对其信息的提取之后,操作系统将删除其进程,即将其PCB清零,并将该空白的PCB返回给系统。

为什么要分开就绪和阻塞状态?

答:因为就绪态只需要等待处理机,而阻塞态可能在等待输入输出,即使分配给处理机也是徒劳,所以两状态图不妥。对于调度进程,只需要等待就绪队列里的进程,因为阻塞状态可以转换到就绪队列里去。

转换图

linux操作系统——进程状态转移

  1. 就绪 --> 运行

就绪状态的进程被调度后,获得处理器资源,开始运行

  1. 运行 --> 就绪

运行中的进程时间片用完后让出处理器。在可剥夺操作系统中,当有更高优先级的进程处于就绪状态时,调度程序将正在运行的进程转为就绪状态,让更高优先级的进程执行

  1. 运行 --> 阻塞

当进程请求某一资源或等待某一事件发生,它就从运行状态转为阻塞状态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。

  1. 阻塞 --> 就绪

当进程请求的资源可用(被其他进程释放)或者等待的事件到来时,中断处理程序将相应的进程由阻塞状态转换为就绪状态。