进程状态
Posted 最美的烟火
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程状态相关的知识,希望对你有一定的参考价值。
进程状态
一个进程的生命周期可以划分为一组状态,这些状态刻画了整个进程。进程状态即体现一个进程的生命状态。
进程状态反映进程执行过程的变化。这些变化随着进程的执行和外界条件的变化而转换。
在三态模型中,进程状态分为三个基本状态,即
运行态
,就绪态
,阻塞态
在五态模型中,进程分为
新建态
、运行态
、就绪态
、阻塞态
、终止态
三态模型
一个进程从创建而产生至撤销而消亡的整个生命期间,有时占有处理器执行,有时虽可运行但分不到处理器、有时虽有空闲处理器但因等待某个事件的发生而无法执行,这一切都说明进程和程序不相同,它是活动的且有状态变化的,这可以用一组状态加以刻画。为了便于管理进程,一般来说,按进程在执行过程中的不同情况至少要定义三种不同的进程状态:
(1)运行(running)态:进程占有处理器正在运行。
(2)就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行。
(3)等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成。
通常,一个进程在创建后将处于就绪状态。每个进程在执行过程中,任意时刻当且仅当处于上述三种状态之一。同时,在一个进程执行过程中,它的状态将会发生改变。引起进程状态转换的具体原因如下:
(1)运行态一一等待态:等待使用资源或某事件发生,如等待外设传输;等待人工干预。
(2)等待态一一就绪态:资源得到满足或某事件己经发生,如外设传输结束;人工干预完成。
(3)运行态一一就绪态:运行时间片到,或出现有更高优先权进程。
(4)就绪态一一运行态:CPU空闲时被调度选中一个就绪进程执行。
五态模型
在一个实际的系统里进程的状态及其转换比上节叙述的复杂一些,例如,引入专门的新建态(new)
和终止态(exit )
。
引入新建态和终止态对于进程管理来说是非常有用的。新建态对应于进程刚刚被创建的状态,创建一个进程要通过两个步骤
- 首先,是为一个新进程创建必要的管理信息;
- 然后,让该进程进入就绪态。此时进程将处于新建态,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。
必须指出的是,操作系统有时将根据系统性能或主存容量的限制推迟新建态进程的提交
类似地,进程的终止也要通过两个步骤
- 首先,是等待操作系统进行善后;
- 然后,退出主存。
当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止态。进入终止态的进程以后不再执行,但依然保留在操作系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,操作系统将删除该进程。引起进程状态转换的具体原因如下:
(1)NULL一一新建态:执行一个程序,创建一个子进程。
(2)新建态一一就绪态:当操作系统完成了进程创建的必要操作,并且当前系统的性能和内存的容量均允许。
(3)运行态一一终止态:当‘个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结。
(4)终止态一一NULL:完成善后操作。
(5)就绪态一一终止态:未在状态转换图中显示,但某些操作系统允许父进程终结子进程。
(6)等待态一一终止态:未在状态转换图中显示,但某些操作系统允许父进程终结子进程。
进程的阻塞和唤醒
进程的阻塞是指使一个进程让出处理器,去等待一个事件,如等待资源、等待I/O完成、等待一个事件发
等,通常进程自己调用阻塞原语阻塞自己,所以,是进程自主行为
,是一个同步事件`。当一个等待事件结束会产生一个中断,从而,激活操作系统,在系统的控制之下将被阻塞的进程唤醒,如I/O操作结束、某个资源可用或期待事件出现。进程的阻塞和唤醒显然是由进程切换来完成。
进程的撤销
一个进程完成了特定的土作或出现了严重的异常后,操作系统则收回它占有的地址空间
和进程控制块
,此时就说撤销了一个进程。进程撤销可以分正常和非正常撤销
前者如分时系统中的注消和批处理系统中的撤离作业步,后者如进程运行过程中出现错误与异常。
进程的挂起和激活
当出现了引起挂起的事件时系统或进程利用挂起原语把指定进程或处于阻塞状态的进程挂起。其执行过程大致如下:检查要被挂起进程的状态
- 若处于活动就绪态就修改为挂起就绪
- 若处于阻塞态,则修改为挂起阻塞。
被挂起进程PCB的非常驻部分要交换到磁盘对换区
当系统资源尤其是内存资源充裕或进程请求激活指定进程时,系统或有关进程会调用激活原语把指定进程激活,该原语所做的主要土作是:把进程PCB非常驻部分调进内存,然后修改它的状态
- 挂起等待态改为等待态
- 挂起就绪态改为就绪态
并分别排入相应队列中
以上是关于进程状态的主要内容,如果未能解决你的问题,请参考以下文章
java 简单的代码片段,展示如何将javaagent附加到运行JVM进程