进程处于运行态时,它必须已获得所需的资源,在运行结束后就撤销。只有在时间片到或出现了比现在进程优先级更高的进程时才转变成就绪态。
就绪 → 运行
- 触发条件:进程被调度器选中(如时间片轮转或优先级调度)。
- 操作系统的动作:
- 从就绪队列中取出进程。
- 将CPU控制权交给该进程(加载PCB中的寄存器值)。
- 示例:就绪队列中的进程A获得CPU时间片,开始执行代码。
运行 → 就绪
- 触发条件:
- 时间片用完(如时间片轮转算法)。
- 被更高优先级进程抢占(如实时系统)。
- 操作系统的动作:
- 保存当前进程的寄存器值到PCB。
- 将进程重新放回就绪队列末尾。
- 示例:浏览器正在渲染页面,但时间片耗尽,切换回就绪状态。
运行 → 阻塞
- 触发条件:进程需要等待外部事件(如I/O操作、信号量释放)。
- 操作系统的动作:
- 将进程移出运行状态,加入阻塞队列。
- 分配CPU给其他就绪进程。
- 当进程需要等待某些资源或事件(如I/O操作、锁等)时,它会主动放弃CPU,进入阻塞状态。
- 示例:进程尝试读取未准备好的网络数据,进入阻塞状态等待数据到达。
阻塞 → 就绪
- 触发条件:等待的事件完成(如I/O操作完成、锁被释放)。
- 操作系统的动作:
- 将进程从阻塞队列移到就绪队列。
- 示例:磁盘读取完成后,阻塞的进程被唤醒,重新加入就绪队列。
运行 → 终止
- 触发条件:
- 进程主动调用
exit()
结束运行。 - 被其他进程或操作系统强制终止(如
kill -9 PID
)。
- 进程主动调用
- 操作系统的动作:
- 回收进程占用的资源(内存、文件句柄等)。
- 销毁PCB。
- 示例:程序执行完
return 0;
后正常退出。