当前位置: 首页 > article >正文

《操作系统 - 清华大学》 8 -5:进程管理:进程生命周期管理

进程的动态特性——生命周期管理详解

在前面的内容中,大致把进程相关知识的第一部分给大家做了介绍,主要围绕进程的静态部分,包括进程到底有哪些组成、具有什么样的特点,以及它是如何表示不同信息的。

接下来,将深入探讨进程的动态特点,也就是进程的状态。进程状态代表着进程生命周期的变化过程。基于此,会从三个方面展开讲解,分别是进程的生命周期管理进程的状态变化模型,以及进程的挂起模型

一、进程的生命周期管理概述

什么是进程生命周期呢?很显然,进程从开始产生到最后结束的整个过程,就是它的生命周期。在这个过程中,主要涉及进程创建、运行、等待、唤醒和结束这几个关键环节,将其统称为进程的生命周期管理。

二、进程创建

在这里插入图片描述

进程的创建就如同人类的诞生,总得有个起始点。当操作系统初始启动时,会创建第一个进程,我们称之为 init 进程,这个进程承担着创建其他新进程的重任。

除此之外,还有两种常见的进程创建场景。一是用户发出创建进程的请求,之后操作系统会响应并完成创建操作;二是正在运行的进程,由于自身特殊需求,也会向操作系统发出创建新进程的请求。

当决定创建新进程时,系统会在内存中构建一个 PCB(进程控制块) ,它代表了进程最初始的状态。接着,系统会为其完成一系列初始化工作,填充进程控制块中的相关数据,至此,一个新进程就形成了。不过,新创建的进程并不会立即执行,它需要等待操作系统从众多可以执行的进程(即就绪进程)中选择它,这里就涉及到后续要讲的调度算法,包括何时选择、如何选择等问题。一旦某个就绪进程被选中,它就会从就绪态转变为运行态,占用 CPU 开始执行。

三、进程等待

在这里插入图片描述

进程在执行过程中,可能会出现需要等待的情况。例如,当进程要读取硬盘上的文件时,由于硬盘读取数据的速度相较于 CPU 的执行速度非常慢,如果让 CPU 一直等待文件读取完成,会造成资源的极大浪费。此时,进程就需要进入等待状态,让其他就绪进程得以占用 CPU 执行,而该进程自身则等待操作系统将文件读入内存。

另外,如果进程需要与其他进程协同工作,但其他进程尚未执行,导致它无法继续推进,或者进程需要其他数据、资源而暂时无法获取时,同样需要等待。进程进入等待状态,是由自身发起的,因为只有进程自身清楚何时需要等待以及等待的具体事件。当进程进入等待状态后,它便不再占用 CPU 资源。

四、进程唤醒

在这里插入图片描述

有等待就会有唤醒。当进程等待的资源得到满足,或者等待的事件发生时,进程就可以继续执行了。此时,进程会从等待状态转变为就绪态,这意味着它又可以被操作系统调度,占用 CPU 执行任务。需要注意的是,处于等待状态的进程自身无法唤醒自己,只能由操作系统或者其他进程来唤醒。

五、进程结束

在这里插入图片描述

在进程的整个执行过程中,执行、等待、唤醒这些环节可能会多次重复。当进程完成了所有功能后,就会走向结束。进程结束主要有以下几种情况:

  1. 正常退出:进程顺利完成所有预定功能后正常结束运行。
  2. 自身错误退出:进程在执行过程中出现错误,但自身判断无法继续执行,于是主动选择退出。
  3. 致命错误被强制退出:进程出现严重错误,比如访问其他进程的地址空间,这是操作系统所不允许的,此时操作系统会强制杀死该进程。
  4. 被其他进程杀死:例如,一些管理进程发现某个进程占用内存过多,影响了整个系统的安全和可靠性,就会将其杀死。

总结

本文详细介绍了进程生命周期管理的各个阶段,包括进程的创建、运行、等待、唤醒和结束。进程的创建有多种触发方式,新进程创建后需经调度才能执行;执行过程中可能因各种原因等待,等待由进程自身发起;等待的进程需被其他进程或操作系统唤醒;进程结束则分为正常退出、自身错误退出、因致命错误被强制退出以及被其他进程杀死这几种情况。理解进程的生命周期管理,有助于深入掌握操作系统中进程的运行机制,为后续学习进程的状态变化模型和挂起模型奠定基础。


http://www.kler.cn/a/559391.html

相关文章:

  • [HOT 100] 2439. 最小化数组中的最大值
  • pikachu靶场搭建教程
  • Qt ModbusTCP和ModBusRTU读写数据
  • 运维linux日志面试题及参考答案
  • STM32-智能台灯项目
  • 【CS285】高斯策略对数概率公式的学习笔记
  • c语言左值和右值的区别
  • 【GPU驱动】- 状态机
  • CF 13A.Numbers(Java实现)
  • nodejs:vue 3 + vite 作为前端,将 html 填入<iframe>,在线查询英汉词典
  • 常用的性能优化方法和技巧
  • 在Spring Boot中如何使用Freemaker模板引擎
  • Cocos Creator Shader入门实战(一):材质和Effect的了解
  • docker容器网络配置及常用操作
  • 如果二者隔离级别不一致,以哪个为主。例如@Transactional 隔离级别是RC,mysql是RR
  • FunAudioLLM:用语音大模型解锁智能语音交互的无限可能
  • 第六届全球数据库大赛:PolarDB TPC-C性能优化挑战赛方案分享(一)--参数调优
  • Linux相关概念和易错知识点(30)(线程互斥、线程同步)
  • SQLMesh 系列教程8- 详解 seed 模型
  • C#贪心算法