操作系统进程/线程的状态与转换
进程/线程的状态与转换
进程(或线程)在生命期内,会随着系统资源的竞争、外部事件的到达以及调度策略的作用而不断改变所处状态。直观地说,有时只是差一个“获得 CPU 的机会”,有时则是“必须离开 CPU 去等一个事件”,还有时候已经“占着 CPU 在执行”或“运行结束”。把这些状态的边界与相互转换理顺,判断题目给出的场景就不再费力。
五状态与基本含义
(1)新建:正在创建运行环境与控制信息,操作系统尚未把它纳入可调度的队列。常见动作包括分配并初始化控制块、设置初始寄存器与栈等。
(2)就绪:除了 CPU 以外的一切执行条件都已满足,正在就绪队列中等待“被分配 CPU”。“就绪”与“运行”的分界点仅在于是否拿到 CPU。
(3)运行:已经获得 CPU,指令流处于实际执行中,寄存器现场不断更新。
(4)阻塞:因等待事件而无法继续执行,必须离开 CPU,进入相应的阻塞队列;典型事件如等待 I/O 完成、等待某个同步条件成立等。“阻塞”与“就绪”的差别在于是否仍缺少一个外部事件。
(5)结束:正常结束/异常终止后退出系统,操作系统回收其占用的内存与打开的文件并撤销控制块。
把握要点:就绪只差 CPU;阻塞还差事件。
状态转换:流程图与逐点解析
(1)创建完成:新建阶段的初始化工作结束,具备被调度资格,于是从“新建”进入“就绪”。此时仍未占用 CPU。
(2)调度分派:调度器从就绪队列挑选目标,把 CPU 分给它,并装入其寄存器现场,状态由“就绪”转为“运行”。该动作改变的是使用权,不是资源归属。
(3)时间片用尽/被抢占:分时系统时间片耗尽时,当前“运行”实体必须让出 CPU;若更高优先级实体到达,也会触发抢占。两种情形的落点相同——回到“就绪”等待下一次分派。
(4)等待事件:运行过程中遇到必须依赖外部条件的位置(如访问磁盘、等待锁),继续占着 CPU 只会空转,因而主动离开 CPU 转入“阻塞”。
(5)事件完成:阻塞原因消除(I/O 完成、条件满足),实体再次具备执行条件,从“阻塞”返回“就绪”,等待调度分派。
(6)正常结束/异常终止:程序自然收尾或出现不可恢复错误,直接进入“结束”,随后由系统回收相关资源并撤销控制信息。
补充说明:线程沿用同一组状态名称与转换关键词——“创建完成、调度分派、时间片用尽/被抢占、等待事件、事件完成、正常结束/异常终止”。差异主要体现在影响范围上:线程共享所属进程的地址空间与大多数资源,因而“异常终止”往往会牵连整个进程;不同进程之间则具有更强的隔离性。