挑战408——操作系统(4)——进程状态转换

2019-07-14 12:59发布

前面我们提到了进程的引入背景,现在就深入了解一下。

进程与程序

为了从变化的角度,动态地研究可以并发执行的程序,真实反映系统的独立性并发性和动态性,操作系统中不得不引入“进程”这一概念。


进程(process),即运行着的程序。直观翻译其英文,就是过程的意思。它表示程序的运行过程

它是分配资源的基本单位,也是并发活动的基本单位

。进程是程序的执行过程,但是又与程序不同,我们看看他们之间的区别:

  1. 进程的动态性与程序的静态性。我们刚刚才说道引入进程,就是为了动态地研究程序,因此动态性是进程最基本或者说是最根本的特征。进程是有一定的生命周期的,进程结束之后就不复存在。但是程序不一样,程序结束后,它仍以数据实体的方式存在于内存当中。
  2. 进程的并发性与程序的顺序性。进程是一个可以独立调度并能和其他进程并发执行的单位,并且能确切地描述并发活动。但是程序却不能独立调度,并且其中的语句都是顺序执行的、
  3. 进程具有结构性,进程是由程序,数据,PCB(进程控制块)构成。但是程序不是

进程的状态及其转换(必考)

进程的动态性是由它的状态和状态转换来体现的,为了更好的描述进程之间的动态变化,于是给进程定义了三种基本状态。

  1. 运行状态。即进程正在处理机上运行的状态。在单处理机上,如果有进程处于运行状态(注意,这里说的是有,那么可不可能全部都不处于运行状态呢?当然可能),那么有且只有一个进程处于运行状态。但是多处理机则可以多个。
  2. 就绪状态。此时进程已经获得了除了处理机以外的所需要的其他资源,只要获得处理机就可以运行的转态。系统中当这样的状态的进程不止一个的时候,就把它们放入一个队列,称为就绪队列中,排队获得处理机。
  3. 阻塞状态。当进程由于等待I/O操作或者其他某个资源的时候暂停运行时,此时进程就出去阻塞状态。

在实际的操作系统中,存在着大量并发的进程,所以要同时满足所有进程的资源是不可能的,因此进程在运行过程中不仅随着自身推进,还随外界环境变化而变化,即状态之间存在某种转换。


在这里插入图片描述

  • 就绪状态 ->运行状态:处于就绪状态的进程,具备了运行的条件,但由于没有获得处理机,那么它就没能运行,只能在就绪队列中等待。处于就绪队列的进程很多而具体调度哪些程序可以运行则是由调度程序来决定的。
  • 运行状态 - >就绪状态:正在运行的程序,由于时间片用完,或者有比它优先级更高的进程强占了处理机,而被暂停执行,那么该进程就会从运行状态变为就绪状态。
  • 运行状态->阻塞状态:由于系统的某些原因(比如请求I/O,或者请求访问某个临界资源,而该资源又症状被访问),那么该进程由运行状态转变为阻塞状态。这种状态是进程自发进行的
  • 阻塞状态->就绪状态:当阻塞原因解除后,被阻塞进程不是直接投入运行,而是将其投入就绪队列中,直到调度程序再次分配处理机。

从上面我们可以看到,运行和阻塞都可以转向就绪状态,而阻塞状态却不能一步到达运行状态,必须在就绪队列中先排队。


这里,我们看一个例子,

当一个进程请求I/O后,这个时候记住程序是被阻塞起来的,因为它需要等待I/O的结果,此时CPU又不可能空闲,于是CPU调用其他的进程,当I/O结束后,进程是由阻塞状态进入就绪状态的


除此之外,进程还有创建状态和退出状态


因为系统在创建和退出的时候,操作系统还有很多工作要做,因此设立这两种状态便于操作系统对进程进行管理:


在这里插入图片描述

  • 创建状态。进程正在创建还不能运行,这个过程主要给进程分配PCB结构,填写相关的内容,为进程分配地址空间和资源。
  • 退出状态。当进程已经完成预期任务或发生某种异常事件(越界,非法指令等)而被终止时,进程由运行状态转为退出状态,使之成为一个不可再运行的进程,并回收其所有资源,但此时系统并不立即撤销它(退出不等于撤销)。以便其他进程从它的PCB中收取信息