进程的三种基本状态
进程在生命周期内可能有多种状态,不过一般而言,每一个进程都至少有三种基本状态
就绪(Ready)状态
进程已处于准备运行的状态,获得除CPU以外所有必要的资源。如果获得CPU,则立即执行
执行(Running)状态
进程获得CPU,正在执行的状态
阻塞(Block)状态
正在执行的进程,由于等待某个事件(如I/O申请,申请缓冲区失败,访问临界资源等)的发生而暂时无法继续执行时的状态
三种状态的转换
进程的三种状态及转换
进程在运行期会经常发生这三个状态间转换
就绪→执行
处于就绪状态的进程,在进程调度程序为之分配下获得CPU,进程由就绪状态转变成执行状态。
执行→就绪
处于执行状态的进程在其执行过程中,分配给进程的时间片已用完而让出CPU,进程从执行状态变成就绪状态。
执行→阻塞
处于执行状态的进程因等待某种事件发生而无法继续执行时,便从执行状态变成阻塞状态。阻塞是进程的主动行为
某些事件一般指:
- 向系统请求资源(内存,临界资源等)失败(eg.向系统申请更多的内存时,系统中的内存不能达到进程的需求,进程将会进入阻塞状态)
- 等待某事件的完成(eg.进程申请I/O设备,I/O设备启动后进程便自动进入阻塞状态去等待,等I/O操作完成后,进程将会被唤醒)
- 新数据尚未到达(eg.有俩个进程,进程A用于数据的输入,进程B进行数据的加工,在进程A数据输入完成之前,进程B都是处于阻塞状态)
- 等待新任务的到达(eg.例如网络环境中的发送进程,主要任务是发送数据包。若已有的数据包已发送完毕,则自动进入阻塞状态;仅当有新的数据包到达时,进程才会唤醒)
由此也可见进程阻塞是主动行为
阻塞→就绪
处于阻塞状态的进程,若其等待的事件已经发生,进程由阻塞状态变为就绪状态。