进程状态
-
进程的五种(三种)状态:
- 新建(New):进程刚被创建,尚未加入到就绪队列;
- 就绪(Ready):进程已获得除CPU外的所有资源,等待被调度执行。多个就绪进程存放在就绪队列中
- 运行(Running):进程正在CPU上执行命令(单核CPU同一时刻仅有一个进程处于运行状态)
- 阻塞(Blocked/Wait):进程因等待外部事件(如I/O完成、信号量释放等)暂停执行,即使分配CPU也无法运行。处于阻塞队列中
- 终止(Terminated):进程执行完毕或被强制终止,操作系统回收其资源(内存、文件句柄等)
-
进程间状态的切换:
- 新建 → 就绪
- 触发条件:操作系统完成进程创建(分配内存、初始化PCB等)。
- 就绪 → 运行
- 触发条件:调度程序选中该进程(如时间片轮转、优先级调度)。
- 运行 → 就绪
- 触发条件:
- 时间片用完(分时系统)。
- 更高优先级进程抢占CPU(抢占式调度)。
- 触发条件:
- 运行 → 阻塞
- 触发条件:进程主动等待资源或事件,如:
- 发起I/O请求(读文件、网络通信)。
- 申请互斥锁失败。
- 调用
sleep()
等阻塞式系统调用。
- 触发条件:进程主动等待资源或事件,如:
- 阻塞 → 就绪
- 触发条件:等待的事件完成(如I/O结束、锁释放),由中断或信号通知操作系统。
- 运行 → 终止
- 触发条件:
- 进程正常结束(执行
exit()
)。 - 发生致命错误(如段错误)。
- 被其他进程强制终止(如
kill
命令)。
- 进程正常结束(执行
- 触发条件:
- 其他状态 → 终止
- 触发条件:
- 父进程终止子进程(如从就绪或阻塞状态直接终止)
- 触发条件:
- 新建 → 就绪
-
进程状态模型扩展:挂起态:
- 引入原因:缓解内存空间不足,将进程暂时换到外存
- 新增状态:
- 就绪挂起态:进程在外存,可被激活到就绪态
- 阻塞挂起态:进程在外存,等待事件(事件完成后激活到就绪态)
- 情况示例:
- 运行 → 就绪挂起:内存不足时,操作系统挂起低优先级进程。
- 阻塞挂起 → 就绪:事件完成且内存可用时,进程被激活回内存。