一、进程的三种基本状态:
- 就绪状态——当进程已分配到除CPU以外的所有必要的资源后,只要能再获得处理机便可立即执行,这时的状态称为就绪状态。同时处于就绪状态的多个进程排成就绪队列。
- 执行状态——指进程已获得处理机,其程序正在执行。
- 阻塞状态——进程因发生某种事件(如I/O请求、申请缓冲空间等)而暂停执行时的状态,亦即进程的执行受到阻塞,故称这种状态为阻塞状态,有时也称为“等待”状态或“睡眠”状态。通常将处于阻塞状态的进程排成一个队列,即阻塞队列。
进程状态之间的转换:
- 就绪→执行状态:处于就绪状态的进程,当进程调度为之分配了处理机后。
- 执行→阻塞状态:正在执行的进程因发生某种事件而无法执行,如需要访问的临界资源正在被其它进程独占访问。
- 执行→就绪状态:分时系统中,正在执行的进程如因时间片用完或一个优先权高的进程到来而被暂停执行。
- 阻塞→就绪状态:处于阻塞状态的进程,其等待的事件已经发生,如I/O请求完成。
但是上面的三种状态不一定能满足所有的使用情形,于是乎我们引入了挂起状态!
二、进程的挂起状态:
为什么引入挂起状态?
- 终端用户的需要——当终端用户在自己的程序运行期间发现有可疑问题时,往往希望暂时使自己的进程静止下来,既不执行也不接受调度,以便调整。
- 父进程的需要——父进程常常希望考察和修改子进程,或者想要协调各子进程间的活动。
- 操作系统的需要——操作系统有时需要挂起某些进程,检查运行中资源的使用情况及进行记账,以便改善系统运行的性能。
- 对换的需要——为了缓解内存紧张的情况,即将内存中处于阻塞状态的进程换至辅存上,使进程又处于一种有别于阻塞状态的新状态。
- 负荷调节的需要——实时系统的负荷较重则可能影响到实时任务的控制,此时系统将不重要的进程挂起,以保证系统正常运行。
在引入挂起状态后,状态之间的转换变成了这样!
进程状态的转换:
在引入挂起状态后,又将增加从挂起状态(又称静止状态)到非挂起状态(又称活动状态)的转换。
- 活动就绪→静止就绪 :处于就绪状态的进程被suspend()原语挂起后变为静止就绪状态。
- 活动阻塞→静止阻塞 :阻塞状态的进程被挂起。
- 静止就绪→活动就绪 :处于静止就绪的进程被active()原语激活。
- 静止阻塞→活动阻塞 :静止阻塞的进程被激活。
Ending... ...