[2.1.2]进程管理——进程的状态与转换、进程的组织
创始人
2024-05-29 16:41:18
0

文章目录

  • 第二章 进程管理
    • 进程的状态与转换、进程的组织
      • (一)创建态、就绪态
      • (二)运行态
      • (三)阻塞态
      • (四)终止态
      • (五)进程状态的转换
      • (六)进程的状态
      • (七)进程的组织
        • 1)链接方式
        • 2)索引方式
    • 小结

第二章 进程管理

进程的状态与转换、进程的组织

  • 状态

    • 运行状态

    • 就绪状态

    • 阻塞状态

      运行、就绪、阻塞,是三种基本状态

    • 创建状态

    • 终止状态

  • 状态间的转换

    • 就绪态 → 运行态
    • 运行态 → 就绪态
    • 运行态 → 阻塞态
    • 阻塞态 → 就绪态
  • 进程的组织方式(各个进程PCB的组织方式)

(一)创建态、就绪态

  之前我们提到过,我们的程序(即可执行文件*.exe),平时是存放在硬盘里的,而当它想要执行的时候,需要把它调入内存,同时操作系统会为它建立相应的PCB,也就是建立一个相应的进程。那当一个进程正在被创建的期间,这个进程的状态就是处于“创建态”。在这个阶段,操作系统会给这个进程分配相应的系统资源(比如给它分配一些内存空间)、初始化PCB。

  而当一个进程创建完成之后,它就会进入一个新的状态,叫作“就绪态”。处于就绪态的进程,其实是已经具备了运行的条件,只不过此时CPU比较忙、还没有空闲,所以CPU暂时还不能为这个进程服务。

image-20230306170900195

(二)运行态

  一个系统当中可能有很多个处于就绪态的进程。当CPU空闲的时候,操作系统就会从这些处于就绪态的进程当中选择其中的一个,然后让它上CPU运行。而如果一个进程此时正在CPU上运行的话,那么这个进程就处于“运行态”。

image-20230306171338768

(三)阻塞态

  同时,我们知道,一个进程,它正在运行,意味着此时CPU正在处理这个进程背后的那个程序,也就是执行这个进程相应的指令序列。

  比如说,CPU执行了进程2,它的指令序列包含:指令1、指令2、指令3、指令4。我们假设此处的指令3,是发出了一个系统调用,而这个系统调用是请求操作系统给它分配打印机资源。

  而此时,打印机设备很忙,它正在为别的进程服务,所以这个打印机资源暂时不能分配给进程2,所以接下来的指令4,即往打印机输出数据的指令,就没办法得到执行。那既然这个进程接下来的指令,暂时不能往下执行的话,那么显然,我们就不应该让这个进程一直占用着CPU资源。

image-20230306173638187

  所以,类似于上述这种情况:很多时候,进程在运行的过程中,有可能会请求等待某个事件的发生(比如等待系统给它分配某一种资源,或者等待其他进程的响应,等等)。而在这个事件发生之前,这个进程是没有办法继续往下执行的,所以在这个时候,操作系统就会剥夺这个进程对CPU的使用权。让这个进程2下CPU,并使它进入一个新的状态,叫“阻塞态”。

  在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。

  在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入“阻塞态”。

在这里插入图片描述

  进程2由于需要等待打印机设备而暂时无法继续执行,因此下CPU,并变为阻塞态。但不要混淆,此时,是打印机没有空闲,CPU是处于空闲状态的。

  所以,此时CPU是再次处于空闲状态的,操作系统便又会选择一个处于就绪态的进程,让它上CPU运行。

  当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行。

image-20230306173430504

  接下来的故事是这样的:

  这个打印机设备,之前是在为别的进程服务,那如果说这个打印机的服务结束,这个打印机空闲了下来。它空闲下来的时候,它就可以分配给刚才请求打印机的那个进程,也就是进程2。所以,当操作系统把这个打印机资源分配给进程2的时候,这个进程2等待的事件其实就已经发生了。此时,操作系统会让这个进程2从阻塞态,再次回到就绪态。

image-20230306174043813

image-20230306174258416

  也就是,当进程等待的事件发生后,那么这个进程就再次拥有了上处理机运行的条件。

(四)终止态

  接着刚才的例子:

  此时在CPU上运行的进程1,它已经运行结束了。那么,在它运行结束的时候,它会发出一个叫exit的系统调用,这个系统调用就是要请求操作系统终止这个进程,此时这个进程的状态就会变成“终止态”。然后,操作系统会让这个进程下CPU,并且做一系列善后的工作,会回收这个进程所占有的各种资源,包括内存空间、打印机设备等等,总之所有的资源都要回收。并且最后还会回收这个进程的PCB。

image-20230306174639647

  而当终止进程的工作完成后,这个进程就从系统当中彻底消失了。

image-20230306174800327

(五)进程状态的转换

  再把刚才进程的各个状态,以及之间的转换,再串一下。

  ①一个进程在运行之前,需要被创建。在创建的过程当中,系统需要完成一系列创建相关的工作,包括新建PCB,还有给这个进程分配一系列的资源等等。如果一个进程正在处于被创建的过程中,那么这个进程就是处于“创建态”的。

  当一个进程被创建完毕之后,它就拥有了可以上CPU运行的条件。那么,此时进程就进入了“就绪态”。也就是说,处于就绪态的进程,它其实只差处理机这种资源了,其他所有需要的资源、条件它都已经具备了。

  ②如果处于就绪态的一个进程,被操作系统调度,那这个进程就可以上处理机运行。当它在处理机上运行的时候,它就处于“运行态”。也就是说,正在处理机上运行的进程,其实是既拥有了它所需要的其他所有的那些资源、条件,同时它也拥有了处理机这种资源。

  ③而有的时候,正在运行的进程,可能会请求等待某个事件的发生,在这个事件发生之前,这个进程是没有办法往下继续运行的。所以在这种情况下,进程不应该一直占用处理机资源,所以此时这个进程应该被剥夺处理机资源。同时,除了被剥夺处理机资源之外,它还在等待其他的某种资源,或者说等待某一种事件的发生。此时该进程处于“阻塞态”。

  ④如果说,处于阻塞态的进程等待的事件发生了,或者申请的资源被分配了,这个进程就可以从阻塞态,又回到就绪态。那么,当它处于就绪态,就又说明,这个进程已经拥有了除了处理机以外的所有需要的资源、条件。

  ⑤处于运行态的进程,它可以主动地请求运行结束;或者说它在运行的过程中遇到了一些不可修复的错误(比如除以0),那么这种情况下这个进程也应该被终止。操作系统在对这个进程做相应的终止工作的时候,这个进程就处于“终止态”,此时操作系统会回收这个进程拥有的各种资源,并且最后会撤销该进程PCB。

image-20230306180957175

  从上述过程当中可以知道,运行态到阻塞态的这个转换,其实是进程主动的一种选择,是一种主动行为。一般来说都是进程通过主动发出系统调用的方式来申请某一资源或者请求某个事件的发生。所以这个转换的过程,是进程主动选择的。

  ③ 运行态 → 阻塞态 是一种进程自身做出的主动行为

  而阻塞态到就绪态的转变,它并不是由进程自身控制的。比如说一个进程正在等待打印机资源,那么这个打印机资源什么时候能分配给它,并不是这个进程说了算的。所以,从阻塞态到就绪态的转换,是一种被动的行为,并不是进程自己可以控制的。

  ④ 阻塞态 → 就绪态 不是进程自身能控制的,是一种被动行为

  需要注意的是,一个进程不可能由阻塞态直接转换为运行态,也不可能由就绪态直接转换为阻塞态。

  因为进程要转变为阻塞态,肯定是进程在CPU上运行的过程中发出了主动请求,就必然是处于运行态的。所以,只可能从运行态→阻塞态,而不可能从就绪态→阻塞态。


  再补充一些刚才没有提到的状态转换。

image-20230306181538283

  ⑥进程可以直接从运行态→就绪态。比如说,操作系统给进程分配的时间片用完了的时候(时钟中断),进程就会从运行态转换为就绪态。这种情况下,其实进程并不缺乏任何使得其继续往下运行的条件,它只是被剥夺了处理机而已。它并不需要等待除了处理机之外的其他某个事件的发生。因此,进程是从运行态,回到了就绪态。

  以上就是完整的进程五状态模型,以及之间的相互转化过程。

(六)进程的状态

image-20230306181927683

  在这五种状态当中,运行态、就绪态、阻塞态的基本状态。因为在进程的整个生命周期当中,大部分的时间都是处于这三种状态的,所以它们是基本状态。

  另外,需要强调一点,在单CPU的情况下,处于运行态的进程,同一时刻最多只会有一个;而如果说的是多核CPU的话,就意味着多个进程可以并行的运行,那在这种情况下,就会有多个进程都处于运行态。

  另外需要强调的是,阻塞态又可以称为等待态;创建态又可以称为新建态;终止态又可以称为结束态。这些别名也稍微注意一下。


  操作系统是怎么记录这些进程的状态的呢?

  在之前我们提到过的进程PCB当中,会有一个成员变量state来表示进程的当前状态。比如1表示创建态、2表示就绪态、3表示……。

  另外,操作系统会把处于同一个状态的进程,把它们的PCB组织起来,这样可以方便统一的管理。

  所以,怎么把这些进程PCB组织起来,这个就是进程的组织要探讨的问题。

(七)进程的组织

  进程的组织有两种方式:链接方式、索引方式。

1)链接方式

image-20230306182647497

  链接方式,就是操作系统会管理一系列的队列,每个队列都会指向相应状态的PCB。

  比如“执行指针”,它会指向正处于“运行态”的PCB。而“就绪队列指针”它所指向的这个队列,就是此时系统中正处于就绪态的这些进程PCB。

  那么,为了方便对这些进程的调度,操作系统经常会把优先级更高的那些进程PCB放在这个队列的队头。

  “阻塞队列指针”也一样,它会指向当前处于阻塞态的进程PCB。


  而在很多操作系统中,还会根据阻塞原因的不同,再把阻塞队列分成多个,如下图。

image-20230306183000638

2)索引方式

  操作系统会给各个状态的进程,建立索引表,每个索引表中的每个表项,又会相应的指向PCB,如图所示。

image-20230306183216665

(大多数的操作系统使用的都是链式方式)

进程的组织方式

  • 链接方式
    • 按照进程状态将PCB分为多个队列
    • 操作系统持有指向各个队列的指针
  • 索引方式
    • 根据进程状态的不同,建立几张索引表
    • 操作系统持有指向各个索引表的指针

  总之,它回答的就是,操作系统该怎么把各个进程的PCB给组织起来,这样的一个问题。总之了解即可。

小结

image-20230306183428267

  这个小节中,更值得注意的还是进程的状态、进程状态之间的转换问题。上图被框起来的部分,是考研当中最高频考察的部分。

相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...