从01开始 从01开始
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)

peterjxl

人生如逆旅,我亦是行人
首页
  • 计算机科学导论
  • 数字电路
  • 计算机组成原理

    • 计算机组成原理-北大网课
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • JavaSE
  • Java高级
  • JavaEE

    • Ant
    • Maven
    • Log4j
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • Servlet
  • Spring
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC
  • SpringBoot
  • 学习网课的心得
  • 输入法
  • 节假日TodoList
  • 其他
  • 关于本站
  • 网站日记
  • 友人帐
  • 如何搭建一个博客
GitHub (opens new window)
  • 计算机历史

  • 数字电路

  • 计算机组成原理

  • 汇编语言

  • C语言

  • 数据结构

  • 操作系统

    • 我的操作系统学习笔记

    • 我的操作系统实验笔记

    • 操作系统网课-王道考研

      • 0_课程白嫖指南
      • 1_1_操作系统的概念(定义)、功能和目标
      • 1_2_操作系统的特征
      • 1_3_操作系统的发展与分类
      • 1_4_操作系统的运行机制与体系结构
      • 1_5_中断和异常
      • 2_1_1_进程的定义、组成、组织方式、特征
      • 2_1_6_系统调用
      • 2_1_2_进程的状态与转换
        • 进程的状态-三种基本状态
        • 进程的状态转换
        • 小结
      • 2_1_3_进程控制
      • 2_1_4_进程通信
      • 2_1_5_线程概念和多线程模型
      • 2_2_1_处理机调度的概念、层次
      • 2_2_2_进程调度的时机、切换与过程、方式
      • 2_2_3_调度算法的评价指标
      • 2_2_4_FCFS、SJF、HRRN调度算法
      • 2_2_5_调度算法:时间片轮转、优先级、多级反馈队列
      • 2_3_1_进程同步、进程互斥
      • 2_3_2_进程互斥的软件实现方法
      • 2_3_3_进程互斥的硬件实现方法
      • 2_3_4_信号量机制
      • 2_3_5_用信号量实现进程互斥、同步、前驱关系
      • 2_3_6_生产者-消费者问题
      • 2_3_7_多生产者-多消费者问题
      • 2_3_8_吸烟者问题
      • 2_3_9_读者-写者问题
      • 2_3_10_哲学家进餐问题
      • 2_3_11_管程
      • 2_4_1_死锁的概念(1)
      • 2_4_2_死锁的处理策略—预防死锁
      • 2_4_3_死锁的处理策略—避免死锁
      • 2_4_4_死锁的处理策略—检测和解除
      • 3_1_1_内存的基础知识
      • 3_1_2_内存管理的概念
      • 3_1_3_覆盖与交换
      • 3_1_4_连续分配管理方式
      • 3_1_5_动态分区分配算法
      • 3_1_6_基本分页存储管理的基本概念
      • 3_1_7_基本地址变换机构
      • 3_1_8_具有快表的地址变换机构
      • 3_1_9_两级页表
      • 43_3_1_10_基本分段存储管理方式
      • 3_1_11_段页式管理方式
      • 3_2_1_虚拟内存的基本概念
      • 3_2_2_请求分页管理方式
      • 3_2_3_页面置换算法
      • 3_2_4_页面分配策略
      • 4_1_1_初识文件管理
      • 4_1_2_文件的逻辑结构
      • 4_1_3_文件目录
      • 4_1_4_文件的物理结构(上)
      • 4_1_4_文件的物理结构(下)
      • 54_4_1_5_文件存储空间管理
      • 4_1_6_文件的基本操作
      • 4_1_7_文件共享
      • 4_1_8_文件保护
      • 4_1_9_文件系统的层次结构
      • 4_2_1_磁盘的结构
      • 4_2_2_磁盘调度算法
      • 4_2_3_减少磁盘延迟时间的方法
      • 4_2_4_磁盘的管理
      • 5_1.2_I-O控制器
      • 5_1.3_I-O控制方式
      • 65_5_1_1_I-O设备的概念和分类
      • 5_1_4_I-O软件层次结构
      • 5_1_5_I-O核心子系统
      • 5_1_6_假脱机技术
      • 5_1_7_设备的分配与回收
      • 5_1_8_缓冲区管理
    • 操作系统
  • Linux

  • 计算机网络

  • Git

  • 数据库

  • 计算机小知识

  • 编译原理

  • 名人堂

  • 计算机基础
  • 操作系统
  • 操作系统网课-王道考研
2023-05-15
目录

212_进程的状态与转换

# 2.1_2_进程的状态与转换

各位同学大家好,在这个小节中我们会学习进程的状态和各个状态之间的转换,首先我们会介绍进程的三种基本状态和另外的两种状态,之后我们会介绍进程在什么情况下会发生这些各个状态之间的转换,那么我们会按照从上至下的顺序进行讲解。 ​

‍

‍

# 进程的状态-三种基本状态

首先我们知道进程它其实就是程序的一次执行,那么在执行的过程当中,有的时候进程是正在被CPU处理的,而有的时候进程其实又需要等待CPU的服务,所以可以看到进程的状态其实是会有变化的,它并不是一直在被处理或者一直得不到处理。

那么为了方便管理这些各种各样的进程,操作系统就对这些进程进行了合理的划分,把它们归为几种状态,用来方便操作系统进行管理。

进程的三种基本状态是运行态,就绪态和阻塞态。

其中处于运行态的进程,其实它就是占用了CPU资源,正在被CPU服务,正在处于运行态的进程。不过我们需要注意的一点是,在单核处理器的环境下,每一个时刻最多只能有一个进程处于运行态,这是单核处理器环境下,但是有的题目会告诉我们,是在他给我们的条件是双核处理机的这种环境,那么在双核的环境下,其实就可以同时有两个进程处于运行态,所以同学们在做题的时候需要注意题目中给出的这样的条件

而进程第二种基本状态就是就绪态。如果一个进程处于就绪态,那么就说明它已经具备了运行的条件,只不过当前CPU没有空闲,CPU正在为别的进程服务,所以它暂时不能运行。所以其实处于就绪态下的进程,它是拥有了除了处理机之外的所有进程所需要的资源,比如说进程需要一台打印机资源,那么如果这个打印机资源已经分配给了进程,那么这个进程就可以进入到就绪绪,然后再等待处理机的服务就可以了,所以处于就绪态的进程,其实可以说它就是万事俱备,只欠CPU。

进程的第三种状态是阻塞态或者叫等待态。进程进入阻塞态是因为它在等待某一个事件的发生,所以它暂时不能运行,比如说进程在运行的过程中,会请求操作系统为它分配打印机资源,或者请求操作系统进行这种读磁盘操作,那么这些IO操作由于速度是比较慢的,所以进程会暂时从运行态变为阻塞态,然后来等待这些事件的完成。只有这些事件完成之后,进程才可以再次回到就绪台,然后来等待CPU的服务。

这就是进程的三种基本状态。

​

‍

那么除了这三种基本状态之外,其实进程还有另外的两种状态。首先我们来看一下,如果一个程序想要在计算机当中正常的运行的话,那么在他开正式开始运行之前,其实操作系统需要做一些新建进程的初始化的工作,需要为新的进程分配它所需要的内存空间。比如说存放程序段数据段的空间,还需要为进程新建进程的PCB,也就是进程控制快,那么所有的这些初始化的工作做完之后,进程才可以正式的投入运行,所以其实在进程开始正式运行之前,是需要做一系列的相应的处理的。那么在处理的过程当中,进程其实就属处于所谓的创建态。

而如果进程它运行结束,它需要或者说由于一些bug导致了进程无法继续执行下去,比如说像数组越界的错误,或者说整数除以0,那么这种情况下进程就应该被撤销。而撤销进程的过程其实也不是一瞬间完成的,操作系统需要回收分配给进程的资源,比如说进程被分配了一台打印机,那么需要把打印机设备给回收,另外还需要把分配给进程的相关的这些内存区域回收,然后最后删除进程相关的PCB,也就是程序控制快,这样的话才完成了进程撤销的工作。所以可以看到在一个进程停止运行之后,其实还需要有一些后续的工作。在进行这些后续工作的情况下,进程其实就是处于所谓的终止态。那么这就是刚才咱们提到的两种状态。

​

创建态是在新建一个进程的时候需要做为进程做一些事情,包括分配资源或者初始化PCB,而如果一个进程要被撤销的时候,它需要操作系统还会做一些像什么回收系统资源,撤销PCB之类的一些工作,在过程当中进程就是处于终止态的。

那么结合之前咱们聊到的3种基本状态,进程就拥有5种状态,运行态,就绪态,阻塞态,创建态,终止态

‍

‍

‍

# 进程的状态转换

接下来思考一下在什么情况下需要对进程的状态进行转换,这就是我们第二个要讨论的问题,进程状态的转换。首先我们从开始说起一个进程被新建的时候,在初始化的过程中,进程肯定是处于创建态的。

如果系统完成了创建进程的这一些相关的工作之后,进程就可以进入到就绪态。一个进程如果处于就绪,它就说明它其实已经拥有了处理除了处理机之外的其他的所有资源,所以一旦进程进入了就绪,就意味着他已经有机会被处理机调度了,被CPU服务。

那么一旦处于就绪,它的进程被调度,那么它就可以进入到运行态,从而被CPU处理。所以一个处于运行态的进程,它其实拥有了处理机资源,也拥有了除了处理机之外的所有的他所需要的资源。

而如果这个处于运行态的进程,它的时间片用完了,或者说以当此时有一个优先级更高的进程把处理机抢占了,那么这个进程就会从运行重新回到就绪队列里。另一个方面,如果一个处于运行态的进程,它通过了像系统调用这样的请求,来申请操作系统的资源,或者说请求等待某一个事件的发生,比如说请求等待另外一个进程的运算结果,那么在这个情况下,进程由于这些事件还暂时没有发生,所以进程会从运行态转向阻塞态。如果一个进程进入阻塞态,那么其实处理机资源是已经被剥夺的,并且他所需要的其他的这些资源还没有就位。只有这些他所需要的资源就位,或者说他等待的事件发生了之后,进程才可以重新从阻塞态转换为就绪态,从而他又有机会被处理机调度了。

‍

‍

那么这个过程大家需要注意到这样两个小细节,首先运行态到阻塞态的转换,其实是进程他主动请求的,主动发出的请求导致的状态的转换。所以运行态到阻塞态其实是一种进程自身做出的主动行为,而阻塞态到就绪态的转换,其实是这些进程等待的资源被分配到位或者他等待的事件发生,这些事情并不是进程本身可以控制的,所以转换过程它是一种被动行为。

另外从这个图中大家可以发现,我们其实并不可以从阻塞态直接转为运行态,处于阻塞态的进程需要先转换为就绪态,它才可以被调度。

另外也不可以从就绪态直接转换为阻塞态。因为刚才我们已经知道这个转化为阻塞态的过程,其实是进程自身做出的一个主动行为,那么既然是一种主动行为,是进程自身主动请求的,那么必然就需要进程在运行的时候才可以发出这种主动的请求。所以处于就绪态的进程,由于他并没有分配到处理及资源,因此他不可能发出一些主动的行为,所以从就绪态是不可能直接转换为为阻塞态的。

那么除了这些状态的转换之外,如果一个正在运行的进程的它运行结束了,或者说在运行的过程中遇到了不可修复的错误,比如说像刚才咱们提到的数组越界或者说整数除以零遇到了这样的错误,那么进程就应该被撤销,从而进入中止态,由操作系统完成后续的一系列工作。

​

‍

# 小结

那么我们再来回顾一下小节的内容,我们介绍了进程的5种状态,其中运行态,就绪态和阻塞态是三进程的三种最基本的状态。那么在这三种状态下,进程对CPU和其他资源的拥有情况,就像这个图所示,

​

‍

‍

我们在很多题目中其实可以根据这个图所示的这些信息,我们就可以来分辨,一个进程它当前到底拥有了哪些资源,从而就可以推断出进程它到底处于哪个状态,所以这个是很重要的。

另外我们还介绍了进程的各种状态之间的转换,其中最常考的也是这三种基本状态之间的转换。其实我们只需要结合进程在这三种状态下,对CPU和其他资源的应用情况就可以分析出在发生了什么事件的时候,会使进程从哪种状态转换到哪种状态。

绿框部分就是咱们考研当中最常考的最高频的考点,当然创建态终止态和还有他们之间的转换其实也很重要。

希望大家在听完课之后,再结合咱们的课后习题,对这部分的知识进行巩固,因为这部分的知识肯定是非常容易考察的一个知识点。好的,那么小节讲解结束。

在GitHub上编辑此页 (opens new window)
上次更新: 2023/5/16 10:03:43
2_1_6_系统调用
2_1_3_进程控制

← 2_1_6_系统调用 2_1_3_进程控制→

Theme by Vdoing | Copyright © 2022-2023 粤ICP备2022067627号-1 粤公网安备 44011302003646号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式