
(进程的状态与转换)
大家好,很高兴又和大家见面啦!!!
在上一篇内容中,我们共同探讨了进程的基本概念——进程作为操作系统中资源分配和独立运行的基本单位,是理解系统如何实现多任务并发的关键。
进程并非是静态不变的,它有着自己的“生命周期”,会在不同的状态间动态转换,以响应系统的调度和各类事件的发生。
理解这些状态及其转换规律,就如同掌握了进程活动的脉搏。接下来,就让我们直接进入正文,一起揭开进程状态与转换的奥秘。
进程在其生命周期内,由于系统中各个进程之间的相互制约及系统的运行环境的变化,使得进程的状态也在不断地发生变化。通常有以下5种状态,前3种是进程的基本状态:
在这五种状态中,其中有两种状态是我们容易混淆的——就绪态与阻塞态。
下面存在一个场景:
现在超市的收银台这里排着两列队伍,这两列队伍均在等待着进行货品结算与付款,但是这两列队伍的等待的原因不相同:
在上述的场景中,这两列队伍此时所处的状态是不相同的:
这两列队伍的状态就很好的反映了操作系统中进程的两种状态——就绪态与阻塞态。
场景中的队伍1对应的就是进程的就绪态,此时的进程已经做好了一切准备,只等着 CPU 来运行,因此处于该状态的进程称为就绪态;
场景中的队伍2对应的就是进程的阻塞态,此时的进程还未完全做好准备,只能等到导致其阻塞的原因解决后才算是完全做好了准备,因此处于该状态的进程称为阻塞态;
这里我们需要清楚,当 CPU 空闲时,它会立即执行的是处于就绪态的进程,而不是处于阻塞态的进程。
在分时操作系统中,一切资源的使用都是以时间片的形式进行分配,而 CPU 和其他资源在分配过程中是有一定的区别:
这里我们可以参考打印机的执行,当该进程被运行时,该进程在运行时会请求打印机的运行,这个过程可能就若干毫秒的时间,而整个打印的过程可能会有几十秒、几分钟,甚至是更长的时间。
正是因为这种区别,这使得进程在运行的过程中会频繁的转换到就绪态,而转换到阻塞态的次数相对较少。因此我们需要将 CPU 与其他资源分开进行说明。
在操作系统中,进程所处的不同状态如下所示:
graph LR
A[创建]--->|创建成功|b[就绪态]--->|调度|c[运行态]--->|退出|d[终止态]--->B[终止]
A--->|创建失败|a[创建态]--->|创建成功|b
c--->|运行时间结束|b
c--->|等待某一事件发生<br>打断进程运行|e[阻塞态]
e--->|等待的事件已经发生|b这里我简单的说明一下上图的含义:
这整个过程中,我们需要重点关注的是进程的三种基本状态之间的转换:
在这些状态转换中,运行态转换到阻塞态的行为是主动发生; 阻塞态转换到就绪态的行为是被动发生,需要其他相关进程的协助;
在操作系统中,进程有两种组织方式:链接 与 索引。下面我们简单的了解一下这两种方式;
在操作系统中,会以管理队列的形式进行进程的组织与管理:
在操作系统中,会以管理索引表的形式进行进程的组织与管理:
今天的内容到这里就全部结束了。通过本文的学习,我们系统地掌握了操作系统中进程状态与转换的核心机制。
进程并非静态实体,它在生命周期中会经历创建态、就绪态、运行态、阻塞态和终止态这五种状态,形成一个完整的生命周期循环。
理解就绪态与阻塞态的本质区别是掌握进程调度的关键:
进程状态之间的转换遵循严格的逻辑规律。三种基本状态(就绪态、运行态、阻塞态)之间的转换构成了进程并发执行的基础:
需要特别注意的是,运行态转换到阻塞态是进程的主动行为,而阻塞态转换到就绪态是被动行为,需要其他相关进程的协助。
操作系统通过进程控制块(PCB) 来跟踪和管理每个进程的状态信息,并采用链接方式(如就绪队列、阻塞队列)或索引方式来组织这些PCB,确保系统能够高效地进行进程调度和状态维护。
理解进程的状态与转换机制,是掌握操作系统如何实现多任务并发和资源管理的基石,也为进一步学习进程同步、进程通信等重要概念奠定了坚实基础。
互动与分享
感谢您的耐心阅读! 关注博主,不错过更多技术干货。我们下一篇再见!