热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

[2.1.2]进程管理——进程的状态与转换、进程的组织

文章目录

文章目录

  • 第二章 进程管理
    • 进程的状态与转换、进程的组织
      • (一)创建态、就绪态
      • (二)运行态
      • (三)阻塞态
      • (四)终止态
      • (五)进程状态的转换
      • (六)进程的状态
      • (七)进程的组织
        • 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

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


推荐阅读
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • vivo发布iQOO 11系列:搭载骁龙8 Gen2与多项创新技术
    vivo正式推出iQOO 11系列智能手机,该系列搭载最新的高通骁龙8 Gen2处理器,并引入多项创新技术,致力于为用户提供卓越的性能和游戏体验。 ... [详细]
  • 电脑蓝屏故障的成因与解决方案(下)
    本文深入探讨了导致电脑蓝屏的具体原因,并提供了相应的解决方法,帮助用户更好地理解和处理这一常见问题。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
author-avatar
坑爹的马_782
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有