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

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

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

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

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

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

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

二、进程创建

在这里插入图片描述

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

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

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

三、进程等待

在这里插入图片描述

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

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

四、进程唤醒

在这里插入图片描述

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

五、进程结束

在这里插入图片描述

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

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

总结

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

http://www.dtcms.com/a/34145.html

相关文章:

  • LeetCode 热题 100 160. 相交链表
  • 【Linux】线程的其他概念(理论篇)
  • 自然语言处理中的检索增强生成研究综述
  • 【开源项目】分布式文本多语言翻译存储平台
  • Spring Boot 启动类的原理与作用
  • 3D Gaussian Splatting(3DGS)的核心原理
  • 深入理解与实战SQL IFNULL()函数
  • thinking in java - 泛型2
  • 0083.基于springboot+uni-app的社区车位租赁系统小程序+论文
  • 顺序储存的二叉树(堆)
  • 【Linux网络】网络编程基础
  • VScode+stfp插件,实现文件远程同步保存【2025实操有效】
  • Java 中的 List 和 Map:全面解析与实际应用
  • 国产OS上完整编译Qt5.15、搭建基本开发环境需要的库
  • 基于python的旅客游记和轨迹分析可视化系统设计(新)
  • DPVS-3: 双臂负载均衡测试
  • 架构对比分析
  • 【Python爬虫(60)】解锁社交媒体数据宝藏:Python爬虫实战攻略
  • 【Linux】基于UDP/TCP套接字编程与守护进程
  • 【环境安装】
  • 编程小白冲Kaggle每日打卡(13)--kaggle学堂:<机器学习简介>基础数据探索
  • 从零开始:VirtualBox安装Ubuntu 24.04.1 LTS
  • 2025牛客寒假算法基础集训营6 个人补题 ACIJKL
  • 算法常见八股问题整理
  • 车载DoIP协议 --- TCP详细解析
  • 洛谷B3636
  • 关于GeoPandas库
  • CMOS图像传感器——偏振光图像传感器技术
  • HarmonyOS Design 介绍
  • 实验题目:SQL 数据更新、视图