【进程的三种基本状态】
进程在其生命周期内,由于系统中各进程间的相互制约关系及系统的运行环境的变化,使得进程的状态也不断发生变化
对于任意一个进程来说,其有以下三个进程的基本状态:
- 就绪态(Ready):进程已处于准备好运行的状态,即进程已分配到除 CPU 外的所有必要资源,只要获得 CPU 资源,便可立刻执行
- 运行态(Running):进程已获得 CPU 资源,其程序正在执行,对于单核 CPU 来说,每一时刻最多只有一个进程处于运行状态;对于 $n$ 核 CPU 来说,每一时刻最多有 $n$ 个进程处于运行状态
- 阻塞态(Blocked):正在执行的进程由于发生某事件而暂停运行
对于就绪状态而言,若系统中有多个处于就绪状态的进程,通常会将他们按一定的策略排成一个队列,称为就绪队列;对于阻塞状态而言,发生阻塞时 OS 会把处理机分配给另一个就绪进程,让受阻进程处于暂停状态,通常会将处于阻塞状态的进程也排成一个队列,称为阻塞队列
在就绪队列中位于队首的进程,在调度程序为之分配处理机后即可执行,相应的,就绪态转为执行态,该进程从就绪队列出队;正在执行的进程如果因分配给他的时间片已完,那么会被剥夺处理机,执行态转为就绪态,并加入就绪队列;如果处于执行态的进程因发生某事件,例如进程需要访问某临界资源,而临界资源正被其他进程访问时,那么会导致当前进程无法继续执行,执行态转为阻塞态,并加入阻塞队列;当阻塞队列位于队首的进程的事件完成,那么其不在堵塞,阻塞态转为就绪态,该进程从阻塞队列出队
【创建态与终止态】
进程是由创建而产生,但创建工作尚未完成,进程不能被调度运行,此时的状态称为创建状态,进程的创建过程如下:
- 进程申请一个空白 PCB,并向 PCB 中填写用于控制和管理进程的信息
- 为该进程分配运行时所必须的资源
- 将该进程转入就绪态,并插入就绪队列中
当一个进程达到了自然结束点,或出现了无法克服的错误,或被 OS 所终结,亦或被其他有终止权的进程所终结,其将进入终止状态,进程的终止过程如下:
- 等待 OS 进行善后处理
- 将其 PCB 清零,并将该空白 PCB 返还系统
进入终止状态的进程以后不能再执行,但在操作系统中依然保留一个记录,其中包含状态码与一些计时统计数据,以供其他进程收集,一旦其他进程完成对其信息提取后,OS 将删除该进程,即将其 PCB 清零,并将该空白 PCB 返还系统
【挂起操作】
为系统与用户的需要,引入了一个十分重要的操作——挂起操作,与挂起操作相对应的是激活操作
挂起操作产生的原因大体分为以下四种:
- 终端用户的需要:当终端用户在自己的程序运行期间发现有可疑问题时,会希望暂停程序运行,使其暂停以进行修改
- 父进程请求:当父进程需要考察、修改、协调子进程时,会挂起相应的子进程
- 负荷调节需要:当实时系统中的工作负荷较重时,系统会将一些不重要的进程挂起,以保证系统正常运行
- 操作系统的需要:当 OS 需要检查运行中等等资源使用情况时,会将相应的某些进程挂起
当该挂起操作作用于某个进程时,该进程将被挂起,意味着此时该进程处于静止状态,如果进程正在执行,其将暂停执行,若原本处于就绪态,则该进程此时暂不接受调度
在三种基本状态的转换中,当引入挂起操作与激活操作后,阻塞状态与执行状态的衍生出四种状态:
- 活动就绪态(Readya):进程处于未被挂起的就绪状态
- 静止就绪态(Readys):进程处于已被挂起的就绪状态
- 活动阻塞态(Blockeda):进程处于未被挂起的阻塞状态
- 静止阻塞态(Blockeds),进程处于已被挂起的阻塞状态
那么相应的,就会有以下状态的转换:
再考虑进程的创建与终止状态,对于进程创建来说,若当前系统的性能和内存容量均允许的情况下,完成创建的必要操作后,会将进程的状态转为活动就绪态,否则会转为进制就绪态