进程状态及其转换全解析
在操作系统中,进程有着特定的生命周期和多种状态变化。不考虑进程结束时,进程主要有三个基本状态。
- 运行态:即进程正在占用CPU执行任务。总结:运行态表示进程当前正在使用CPU。
- 就绪状态:进程已获取除CPU外的所有所需资源,等待CPU调度即可执行。总结:就绪态意味着进程万事俱备,只等CPU调度。
- 等待状态(阻塞状态):进程因等待某事件或资源而暂停执行。总结:阻塞态是进程因等待条件而暂时停止运行。
这三种状态构成基本模型,它们之间可以相互转换。运行态能变成就绪态或阻塞态;就绪态可转为运行态;阻塞态在条件满足时能变为就绪态。
若考虑进程的创建和结束过程,还会出现两个新状态。
- 创建状态:进程刚创建,还未进入就绪态的阶段。总结:创建态是进程诞生后的初始过渡状态。
- 结束状态:进程完成结束处理流程,但尚未彻底消失,此时PCB仍存在,PCB消失后进程才彻底结束。总结:结束态是进程结束前的最后状态,PCB消失才标志进程彻底终结。
将创建和结束状态纳入后,形成五状态图,能更全面展示进程状态变化关系。包括从创建到就绪、运行,运行中还可能阻塞或回到就绪态。
在进程运行过程中,存在一个疑问:运行中的进程为何会变成就绪态?这是因为内存中就绪进程多,而CPU数量相对少。为保证公平,系统给每个就绪进程分配时间片。当运行进程时间片用完,就会被操作系统切换回就绪态,让其他进程有机会执行。总结:时间片机制是运行态进程转就绪态的主要原因,目的是公平分配CPU资源。
下面详细梳理进程状态变化的全过程:
- 进程最初不存在,操作系统创建PCB并初始化,从空状态变为new状态,此时仅产生了PCB。总结:进程创建起始于PCB的创建和初始化,形成new状态。
- 从new状态变为ready状态,即创建态到就绪态,意味着进程控制块内数据结构初始化完成,进程资源满足,可执行。这个过程很快,因为只是完成PCB初始化。总结:创建态到就绪态是进程准备执行的关键阶段,主要完成PCB初始化。
- 就绪态进程会被操作系统调度器选中,分配到CPU执行,具体选中方式取决于调度算法。进程运行结束或出错会进入退出状态。总结:调度器决定就绪态进程能否进入运行态,运行结果可能导致进程退出。
- 运行态到就绪态的转换,如前文所述,是因为时间片用完,由操作系统根据时钟管理进行切换。总结:时间片用完促使操作系统将运行态进程切换为就绪态。
- 运行中的进程若等待事件或资源,会从运行态变为阻塞状态,例如等待定时器、读写文件等操作时。总结:等待特定事件或资源会使运行态进程进入阻塞态。
- 阻塞态进程在等待的事件发生后,会由操作系统帮助其转变为就绪态。总结:操作系统负责在事件满足时,将阻塞态进程转换为就绪态。