Linux中进程的状态与转换

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

通常进程有以下五种状态,前三种是进程的基本状态。

1)运行状态

进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。

2)就绪状态
进程已处于准备运行的状态。即进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。

3)阻塞状态(等待状态)
进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。

4)创建状态

进程正在被创建,尚未转到就绪状态。创建进程通常需要多个步骤:

首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息。

然后由系统为该进程分配运行时所需的资源。

最后把该进程转入到就绪状态。

5)结束状态

进程正从系统中消失,可能是进程正常结束或其他原因中断退出运行。

当进程需要结束运行时,系统首先必须置该进程为结束状态,然后再进一步处理资源释
放和回收等工作。

区别就绪状态和等待状态:

就绪状态是指进程仅仅缺少处理机,只要获得处理机资源就能立即执行。

等待状态是指进程需要其他资源(除了处理机)或等待某一事件。

之所以把处理机和其他资源划分开,是因为在分时系统的时间片轮转机制中,每个进程分到的时间片是若干毫秒。

也就是说,进程得到处理机的时间很短且非常频繁,进程在运行过程中实际上是频繁的转换到就绪状态的。

而其他资源(外设等)的使用和分配或者某一事件的发生(如I/O操作)对应的时间相对来说很长,进程转换到等待状态的次数也相对较少。

所以,就绪状态和等待状态是进程生命周期中两个完全不同的状态,需要加以区分。

五种进程状态的转换如下:

在这里插入图片描述

1)就绪状态->运行状态

处于就绪状态的进程被调度后,获得处理机资源(分派处理机时间片),于是进程由就绪状态转换为运行状态。

2)运行状态->就绪状态

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

3)运行状态->阻塞状态

当进程请求某一资源(如外设)的使用和分配或等待某一事件的发生时,它就从运行状态转换为阻塞状态。

进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。

4)阻塞状态->就绪状态

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

猜你喜欢

转载自blog.csdn.net/wd__900902/article/details/82954553