2.1_2 进程的状态与转换
(一)进程的状态——创建态、就绪态
进程正在被创建时,它的状态是“创建态”,在这个阶段操作系统会为进程分配资源、初始化PCB。
当进程创建完成后,便进入“就绪态”,处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行。
(二)进程的状态——运行态
系统中会有很多处于就绪态的进程。当CPU空闲下来以后,它会选一个就绪态的进程,使其上CPU运行。
如果一个进程此时在CPU上运行,那么这个进程处于“运行态”。CPU会执行该进程对应的程序(执行指令序列)。
在一个进程执行过程中,可能会发出系统调用,请求使用某种资源(如:打印机资源)。但此时这个资源可能并不处于空闲状态,因此可能得不到请求。而这个进程如果无法获得这一资源,进程就无法继续往下执行。如果这一进程无法继续往下执行的话,那么显然我们就不应该让这个进程继续占用着CPU了。
在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。
在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入“阻塞态”。
当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行。
如果某一时刻,刚刚那个进程没能请求到的系统资源空闲下来了,系统就会把该资源分配给刚刚那个进程,同时,那个进程的状态会从“阻塞态”转为“就绪态”。
(三)进程的状态——终止态
一个进程可以执行exit
系统调用,请求操作系统终止该进程。
此时该进程会进入“终止态”,操作系统会让该进程下CPU,并回收内存空间等资源,最后还要回收该进程的PCB。
当终止进程的工作完成之后,这个进程就彻底消失了。
(四)进程状态的转换
注意:
1.处于就绪态的进程:只差处理机这种资源了,其他所有都已具备。
2.处于运行态的进程:既拥有了其他所有相关资源,也拥有处理机这一资源。
3.处于阻塞态的进程:申请的某种资源未拥有,同时也被剥夺处理机资源。
注意:
1.不能由阻塞态直接转换为运行态。
2.也不能由就绪态直接转换为阻塞态。(因为进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出这种请求。如果连运行态都不是,就根本没有阻塞的机会)
转换过程说明:
1.创建态 —> 就绪态:系统完成创建进程的一系列工作。
2.就绪态 —> 运行态:CPU选一个处于就绪态的进程,使其上CPU运行,则该进程转为运行态。
3.运行态 —> 阻塞态:进程在CPU上执行的过程中,由于请求某种资源而未得,则该进程转为阻塞态。
4.阻塞态 —> 就绪态:处于阻塞态的进程,若它需要的那种资源空闲下来了,则该进程转为就绪态。
5.运行态 —> 就绪态:其他资源都具备,只是处理机资源被剥夺(如:时间片到),则该进程由运行态转为就绪态。
进程PCB中,会有一个变量state来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态……
为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来(进程的组织)。
(五)进程的组织——链接方式
使用队列将各个进程PCB组织起来。
(六)进程的组织——索引方式
用索引表将各个进程PCB组织起来。