从 01 开始 从 01 开始
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档
  • 计算机历史

  • 数字电路

  • 计算机组成原理

  • 操作系统

    • 我的操作系统学习笔记

    • 我的操作系统实验笔记

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

      • 0_课程白嫖指南
      • 1_1_操作系统的概念(定义)、功能和目标
      • 1_2_操作系统的特征
      • 1_3_操作系统的发展与分类
      • 1_4_操作系统的运行机制与体系结构
      • 1_5_中断和异常
      • 2_1_6_系统调用
      • 2_1_1_进程的定义、组成、组织方式、特征
      • 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_死锁的概念
      • 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
目录

213_进程控制

# 2.1_3_进程控制

各位同学大家好,在这个小节中我们会学习进程控制相关的知识点,首先我们会介绍什么是进程控制,应该怎么实现。进程控制它是由原语来实现的,那么之后我们又会介绍实现进程控制相关的这些原语都有哪些,那么我们按照从上至下的顺序依次讲解。

‍

​

# 进程控制

首先来看一下什么是进程控制,在咱们的王道书上给出了一个定义,进程控制的主要功能其实就是对系统中的所有进程实施有效的管理,它具有创建新的进程,撤销进程,实现进程状态转换等功能,这个比较复杂,那么我们可以把进程的控制简单的理解为就是要实现各种进程状态之间的转换,包括从创建态到就绪态,或者从就绪态到终止态这样的一系列的转换。所以其实进程控制其实就是要实现这些绿色箭头表示的这些具体的过程

​

‍

‍

‍

‍

那么我们应该如何实现这种进程控制,怎么实现这些进程状态之间的转换?我们先来回顾一下之前提到的有一个叫做进程组织的问题,操作系统会把各个处于不同状态的进程对应的 PCB 挂到相应的一系列的队列当中,用这种方式来管理组织进程的 PCB,

​

‍

那么我们再把这个模型再来细化一下,就像这个样子

‍

‍

如果一个进程要被创建,那么它会处于创建它创建进程的过程,需要对进程的 PCB 进行初始化,然后分配像内存之类的系统资源。

当进程创建完毕之后,初始化这些工作结束之后,会把进程的 PCB 放入到就绪队列当中,所以这是由创建态到就绪态转换的一个过程

之后如果一个进程被 CPU 调度,然后它就会从就绪态转换为运行态,这个转换过程我们需要做的就是把进程的运行环境给恢复,并且修改 PCB 当中的内容。就是说把 PCB 当中的那个状态标志位从就绪态改变为运行态,并且把进程的 PCB 从就绪队列当中摘出来。然后这个进程就可以开始被处理运行。

​

‍

这个地方为什么要恢复进程运行的环境,因为进程之前可能运行到一半,然后被切换了,所以进程的那些运行的中间结果其实是被保存在 PCB 当中的,所以进程当再次被调度的时候,需要把它之前的运行环境给恢复过来。

那么当进程在执行的过程当中,如果说用系统调用的方式,发出了一个等待某个事件的请求,那么我们就需要把这些进程当前运行的环境给保存下来,用于之后进程还可以接着往下执行,并且还需要把进程的 PCB 当中的标志位从运行态改变为阻塞态,然后把进程的 PCB 放到相应的事件的阻塞队列当中,

‍

‍

‍

类似的,如果要从阻塞态转换为就绪态,那么我们需要修改 PCB 的内容,并且把 PCB 从阻塞队列放到就绪队列当中。如果说进程它在这个阻塞队列当中是在等待某种系统资源的分配,那么这个操作系统还需要把这个系统资源分配给进程,

像其他的运行态到就序态的转换,还有运行态到终止态的转换,这些过程其实我都需要修改 PCB 当中的内容,并且有的时候还可能会需要需要回收系统资源或者为进程分配系统资源。

那么可以看到其实进程的状态切换,中间所需要做的事情是比较复杂的,我们需要修改 PCB 的内容,并且把 PCB 修放到相应的正确的队列当中

​

‍

‍

那么思考一个这样的问题,假如说某一个进程把它的 PCB 从一个队列放到了另一个队列,但是我们并没有把 PCB 当中的状态标志改成相应的新的状态,那么这种情况其实是很危险的,极有可能会导致系统错误,因为 PCB 所处的队列和当前 PCB 当中的状态标志位这两个数据就变得不一致了。

那么为了防止这个问题,就使用了所谓的原语来实现进程控制。原语的特点就是在执行期间不允许被中断,只能一气呵成,这种不可以被中断的操作就可以称之为原子操作。那么像原语其实是采用关中断和开中断两个指令来组合实现的,

当原语相关的这些逻辑代码开始执行之前会先执行一个关中断指令,执行了关中断指令之后,如果说此时有一个外部中断信号进入,那么外部中断信号是被会被忽略的,暂时不会被处理,所以这就保证了原语的这一系列的处理不会被中断。那么只有之后在执行了开中断指令之后,再接收到一个外部中断信号,这个时候才会转入到相应的中断处理程序,然后开始处理。

所以可以看到通过光中段和开中段就可以实现源原语这种一气呵成的操作。也就是刚才我们提到的把 PCB 放到一个队列当中,并且还需要同时保证它 PCB 当中的数据也被修改,这样的事情就可以用原语来实现。那么可以看到原语使用的关中断开中断指令,其实它的权限是非常大的,如果一个用户进程可以随便的使用这两种指令的话,那么就意味着用户进程可以永远不被中断,他会一直霸占着 CPU 资源,这样显然是很危险的事情,所以关中断和开中断指令显然它是一种特权指令,只能在核心态下进行,所以肯定也是运行在核心态的。那么其实原语这个概念,在之前咱们提到操作系统内核小结的时候也提到过,原语它是属于操作系统内核的一部分,它需要运行在核心态

​

‍

# 进程控制相关的原语

‍

那么操作系统提供了哪些进程控制相关的原语,其实无论哪个原语,要做的无非就是三类事情,首先是更新 PCB 当中的信息,第二是把 PCB 插入到合适的队列当中,第三有可能会涉及到分配或者回收资源这样的事情。另外像更新 PCB 当中的信息会包括比如说像修改进程状态的标志这样的事情,所有的进程控制原语,它都会导致进程的状态改变,所以肯定都会修改进程的状态标志。

另外如果说剥夺了当前正在运行的进程的 CPU 使用权,那么就需要把进程相关的运行环境给保存下来,把它保存到 PCB 当中。如果一个进程它要进入到运行态,那么我们就需要把进程之前的那些运行环境把它给恢复过来

所以其实接下来我们要学习的这些言语无非就是做了这样的三件事情,大家可以用这个为框架来进行理解和记忆。

‍

‍

‍

首先操作系统内核实现了所谓的创建原语,用来实现进程的创建工作,创建原语进行了这样的一系列的操作,大家可以对比刚才提出的这三类事情来进行来进行理解。那么创建原语实现了一个进程,从无到有,从无到创建态,再从创建态进入到就绪队列,进入就绪态这样一个过程,

引起进程创建的事件有这样几种,像用户登录,分时系统当中用户登录成功之后,操作系统会为用户建立一个和他相关的用户管理进程。

那么除此之外,现在多道批处理系统当中,如果说有一个新的作业从外存调入内存要开始运行,那么这个时候操作系统也会为作业建立一个它对应的新的进程。另外有的时候系统用户向操作系统提出某种请求的时候,操作系统会专门新建一个进程来处理用户提出的请求,所以这种情所以如果说一个用户要求操作系统提供服务,也有可能会导致一个进程被创建。另外用户进程也可以主动地申请操作系统,为它创建一个子进程,这就是应用请求导致的进程创建。那么这就是创建原语

​

‍

‍

另外操作系统还提供了用于实现进程的终止相关工作的撤销原语,撤销原语完成了这样一系列的工作,其实无非也就是更新一些 PCB 的内容,然后回收一些系统资源这样的事情。然后如果说一个处于运行态进程,它运行正常结束,或者说运行的过程中,由于一些程序 bug 导致了异常的结束,比如说像整数除以 0 这样的错误,那么这种情况会使操作系统会使用撤销原语,来使进程从运行态转变为终止态,最后完成了撤销,完成了终止态相关的一系列工作之后,进程就被彻底撤销了。

​

‍

‍

另外如果一个进程处于就绪态或者阻塞态,那么此时如果有外界干预,比如说像用户主动的请求撤销进程,这个时候操作系统也会使用撤销原语,来使进程直接从用就绪态或者阻塞态直接转变为终止态,然后完成一系列的工作之后,最后把进程彻底的干掉。像外界干预,比如说像我们使用 windows 操作系统,任务管理器来杀进程这样的一种操作,其实就是所谓的外界干预。

‍

第三种,操作系统还提供了进程的阻塞和进程的唤醒,相关的言语就是阻塞原语和唤醒原语,阻塞原语和唤醒原语所做的这一系列的工作,其实也是处理 PCB 的一些内容,或者把它插入到合适的队列这样的一系列的工作。

那么如果一个正在运行的进程,它需要等待系统分配某种资源,或者说需要等待某个事件的发生,操作系统就会使用阻塞原语把进程进行阻塞,从此由此进程会由运行态转变为阻塞态。那么当进程等待的事件发生之后,操作系统又会使用唤醒原语,来把刚才进程从阻塞态给我转变为就绪态。

那么需要注意的是进程的唤醒,这个事件其实就是进程被阻塞的时候所等待的事件,因此阻塞原语和唤醒原语应该是成对使用的,进程因为什么事件被阻塞,那么就应该因为什么事件被唤醒。

​

‍

‍

另外操作系统还提供了进程切换相关的原语,进程切换相关的原语,其实实现的也是一些 PCB 相关的一系列的操作。那么像当前正在运行的进程时间片到,或者有更高的进程到达,然后抢占了 CPU,或者说当前正在执行的进程主动的申请阻塞,或者说当前进程终止,这些都有可能导致进程的切换。那么这个切换原语会让当前处于运行态的进程变为阻塞态或者就绪态,另外又会让一个处于就绪态的进程进入到运行态,所以这是切换源语的作用。

​

‍

‍

‍

# 小结

那么我们再来回顾一下小节的内容,首先我们介绍了什么是进程控制,其实进程控制就是要实现进程的各种状态之间的转换,进程控制是用原语来实现的,我们需要注意的是原语是必须一气呵成的,不可中断的一种特殊的程序,而这种一气呵成,不可中断的特性是用开中断和关中断指令来实现的。

之后我们又介绍了进程控制相关的原语,其中阻塞原语和唤醒原语必须要成对的出现,各个原语在背后大概做了哪些事情,大家其实不需要死记硬背,只需要进行理解就可以了。好的,那么这就是小节的全部内容。

上次更新: 2024/9/30 16:30:28
2_1_2_进程的状态与转换
2_1_4_进程通信

← 2_1_2_进程的状态与转换 2_1_4_进程通信→

最近更新
01
2025 年 2 月记
02-28
02
最全面的浏览器教程-完结撒花
02-16
03
这个工具可以轻松搞到你的浏览器账户密码!
02-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式