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

进程的理解

进程的理解

目录

  1. 什么是进程
  2. 主要特征
  3. 主要组成部分
  4. 进程状态
  5. 进程优先级

1.什么是进程

概念

  • 在操作系统中,**进程(Process)**是一个正在执行的程序实例。
  • 可以将进程理解为一个动态的实体,它不仅包括静态的程序代码,还包括程序执行过程中涉及的所有信息,如内存空间、文件描述符、CPU状态等。

管理的本质:先描述,再组织

为了方便管理进程,将进程的信息抽象出来,放在叫做进程控制块(PCB)的数据结构中。PCB是操作系统用来管理进程的核心数据结构,包含了进程的所有重要信息。即进程=程序代码+PCB

PCB的组成部分

  • 进程标识符(PID):唯一标识进程的整数,用于区分不同的进程。
  • 进程状态:表示进程当前的状态,如就绪、运行、阻塞、终止等。
  • 程序计数器(PC):指向下一个要执行的指令地址,操作系统通过它来恢复进程的执行。
  • CPU寄存器状态:包括各个 CPU 寄存器的当前值,以便在进程切换时能够恢复执行。
  • 内存管理信息:包括指向进程地址空间的基址和限长,或其他内存管理结构的信息。
  • 调度信息:进程的优先级、调度策略等,用于决定进程的执行顺序。
  • 进程间通信信息:进程使用的信号量、消息队列、共享内存等,用于进程之间的通信和同步。
  • I/O状态信息:包含进程打开的文件描述符、网络连接等信息,帮助管理与 I/O 相关的操作。
  • 用户信息:可能包括与用户相关的信息,如用户 ID 和组 ID,以确保安全性和访问控制。

2.主要特征

  1. 动态性:进程是程序在操作系统中的一次执行过程,因此是动态的。进程从创建到执行、暂停、终止等,一直处于变化之中。

  2. 独立性:每个进程都有自己的私有地址空间和资源,彼此独立。一个进程的运行不应直接影响其他进程,操作系统通过隔离机制确保进程之间的独立性。

  3. 并发性: 在多任务操作系统中,可以同时运行多个进程。多个进程可以并发执行,在多核系统上可以真正实现并行,在单核系统上则是通过快速切换实现“并行”。

    并发:任务可以交替进行,而不一定是同时

    并行:多个任务同时进行

  4. 资源管理:进程需要操作系统分配的各种资源(如CPU时间、内存、文件句柄等)才能正常运行。操作系统通过进程来管理和分配这些资源。

  5. 生命周期:每个进程从创建到退出经历一个完整的生命周期,包括创建、就绪、运行、等待(或阻塞)和终止等状态的转换。

3.主要组成部分

  1. 进程控制块(PCB)
    • 每个进程在操作系统中都有一个进程控制块(Process Control Block),它记录了进程的相关信息,如进程ID、进程状态、优先级、CPU寄存器状态、内存分配信息等。
    • PCB 是操作系统管理和调度进程的核心数据结构。
  2. 地址空间:每个进程有自己独立的地址空间,分为代码区、数据区、堆栈区等。
    • 代码区:存储程序的执行代码。
    • 数据区:存储全局变量和静态变量。
    • 堆区:用于动态内存分配。
    • 栈区:用于存储函数调用、局部变量、返回地址等。
  3. CPU状态:进程在运行时,需要CPU寄存器、程序计数器等状态信息。操作系统会保存和恢复这些信息,以便在进程切换时能够正确恢复进程的执行状态。
  4. 文件和资源:进程可能会打开文件、使用网络连接等。操作系统为每个进程维护一个资源表,记录它使用的资源句柄。

PCB中已经包含了CPU状态文件和资源,也就是第3和第4点,而在描述进程的组成部分时再次提及它们,目的是强调它们在进程执行过程中的重要性。

4.进程状态

进程在其生命周期中经历多个状态。以下是进程的主要状态及其描述:

  1. 新建状态(New):进程正在被创建。此状态表示操作系统正在为新进程分配必要的资源,如内存、进程控制块等。
  2. 就绪状态(Ready):进程已经获得了必要的资源,但尚未被调度到CPU上执行。在这个状态下,进程随时可以执行,只待调度器选择它。
  3. 运行状态(Running):进程正在使用CPU执行指令。在这个状态下,进程被分配了CPU时间,并正在执行其代码。
  4. 阻塞状态(Blocked / Waiting):进程因为等待某些事件(如I/O操作完成、资源可用等)而无法继续执行。在这个状态下,进程不能被调度到CPU上运行,直到所等待的事件发生。
  5. 终止状态(Terminated):进程完成执行或由于异常情况退出。此状态下,进程的资源被释放,操作系统会更新其PCB以反映进程的终止。
  6. 挂起状态(Suspended):有些操作系统会引入“挂起”状态,表示进程被暂时移出内存,处于不活跃状态。此状态可以分为:
    • 挂起就绪(Suspended Ready):进程被挂起,但可以被恢复到就绪状态。
    • 挂起阻塞(Suspended Blocked):进程因等待事件而被挂起。
  7. 就绪挂起状态(Ready Suspended):进程虽然在就绪状态,但由于系统资源不足而被挂起。这时,进程不能立即运行,需等待资源可用。

上面的这些状态是站在所有操作系统的角度所谈的,下面将介绍Linux操作系统的进程状态。

/*
* The task state array is a strange "bitmap" of
* reasons to sleep. Thus "running" is zero, and
* you can test for combinations of others with
* simple bit tests.
*/
static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

这是Linux操作系统kernel源代码里对进程状态的定义:

  • "R (running)": 任务正在运行或已准备好运行。
  • "S (sleeping)": 任务处于睡眠状态,等待某个事件完成。
  • "D (disk sleep)": 任务处于不可中断的睡眠状态,通常是在等待磁盘 I/O。
  • "T (stopped)": 任务已停止,通常是由于信号或用户请求。
  • "t (tracing stop)": 任务因跟踪而停止,通常是由调试器引起的。
  • "X (dead)": 任务处于“死亡”状态,意味着已终止但资源尚未完全清理。
  • "Z (zombie)": 任务是一个僵尸进程,已经终止但在等待父进程读取其退出状态。

在实际的操作系统中,挂起这一状态是不可见的,被操作系统藏起来,避免人为修改造成破坏。

特殊的进程状态

僵尸进程:是一种已经终止但尚未被父进程回收的进程。

父进程(Parent Process)是指生成子进程的进程。每个进程在启动新的子进程时都会成为该子进程的父进程。

产生过程

  1. 子进程终止:子进程完成任务并退出。
  2. 进程状态保留:操作系统保留子进程的进程 ID (PID) 和状态信息,直到父进程通过 wait 系列系统调用读取它。
  3. 等待父进程回收:在父进程读取子进程的状态前,子进程保持僵尸状态。此时,它已释放资源,但仍在进程表中占用一个位置。

孤儿进程:是指其父进程已经终止,但它本身仍在运行的进程。

处理过程

  1. 父进程终止:孤儿进程的父进程意外退出或因故障而终止,导致子进程失去父进程。
  2. 重新分配给 init 进程:在 Unix 和 Linux 系统中,所有孤儿进程会被自动重新分配给 init 进程(通常 PID 为 1),该进程是所有进程的祖先。init 进程的职责之一是充当孤儿进程的新父进程。
  3. 继续执行并回收:孤儿进程在 init 进程的管理下继续执行,并在其结束时由 init 进程回收,避免产生僵尸进程。

5.进程优先级

为什么会有优先级?

  • 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级。

怎么理解权限和优先级?

  • 权限是能不能做,优先级是谁先做

进程优先级是指操作系统用来决定进程获得 CPU 时间的相对重要性和顺序的数值指标。优先级高的进程有优先执行权利。配置进程优先权对多任务环境的Linux很有用,可以改善系统性能。

在这里插入图片描述

上图是Linux操作系统的实时进程状态图,输入ps -l输出,简单解释下:

  • F(Flag):进程的标志位,代表进程的某些属性。
  • S(State):进程的状态
  • UID(User ID):表示进程所有者的用户 ID。
  • PID(Process ID):进程的唯一标识符。
  • PPID(Parent Process ID):父进程的 ID。
  • C(CPU Usage):进程的 CPU 使用率百分比。
  • PRI(Priority):进程的优先级。
  • NI(Nice Value):进程的 nice 值,影响优先级。
  • ADDR:内存地址。- 表示地址未被使用或不可用。
  • SZ(Size):进程的内存占用大小,以页(page)为单位。
  • WCHAN(Waiting Channel):如果进程在等待资源,这里会显示正在等待的内核函数。
  • TTY(Terminal):进程关联的终端。两个进程都在 pts/0 上,这意味着它们是通过同一终端会话(伪终端)启动的。
  • TIME:进程使用的总 CPU 时间。
  • CMD(Command):进程启动时的命令。

其中,有关进程优先级的是PRINI

  • PRI是进程的优先级,其值越小优先级越高。
  • NI是人为可以修改的地方,PRI(new)=PRI(old)+NI,我们通过更改NI值来影响进程的优先级,其中NI的取值范围是[-20,19)。

如何修改NI值?

输入top->r->进程的PID->NI值

相关文章:

进程的理解

进程的理解 目录: 什么是进程主要特征主要组成部分进程状态进程优先级 1.什么是进程 概念: 在操作系统中,**进程(Process)**是一个正在执行的程序实例。可以将进程理解为一个动态的实体,它不仅包括静态…...

LeetCode494:目标和

题目链接&#xff1a;494. 目标和 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int sum 0;for(int i 0; i < nums.size(); i){sum nums[i];}if(abs(target) > sum)…...

vue3中自定义校验函数密码不生效问题

vue3中自定义校验函数密码不生效问题 由于在自定义的校验规则中只校验了有数据的情况&#xff0c;以至于在没输入时&#xff0c;校验不生效 &#xff08;1&#xff09;用户不输入校验不生效 const validateSurePassword (rule, value, callback) > {if (value ! ) {if (…...

RabbitMQ(死信队列)

一、本文抒写背景 前面我也在延迟队列篇章提到过死信队列&#xff0c;也提到过一些应用场景&#xff01; 今天呢&#xff0c;这篇文章&#xff0c;主要就是实战一个业务场景的小Demo流程&#xff0c;哈哈&#xff0c;那就是延迟关闭订单。 二、开始啦&#xff01;letgo! 首…...

HTTP代理的优点和局限性

在这个信息爆炸的时代&#xff0c;网络已成为我们获取知识、交流思想、开展商务的重要平台。但随之而来的隐私泄露、网络安全威胁、以及无处不在的网络监控&#xff0c;却让我们的每一次在线活动都充满了风险。 在这样的背景下&#xff0c;HTTP代理技术应运而生&#xff0c;它不…...

大厂面试真题-如果通过JVM自带的工具排查和解决线上CPU100%的问题

通过JVM自带的工具去定位和解决线上CPU 100%的问题&#xff0c;可以遵循以下步骤&#xff1a; 一、使用top和jps定位Java进程 使用top命令&#xff1a; 在Linux服务器上执行top命令&#xff0c;查看所有进程的CPU使用情况。找到CPU使用率最高的进程&#xff0c;并记录其PID&a…...

kubernetes中微服务部署

微服务 问&#xff1a;用控制器来完成集群的工作负载&#xff0c;那么应用如何暴漏出去&#xff1f; 答&#xff1a;需要通过微服务暴漏出去后才能被访问 Service 是一组提供相同服务的Pod对外开放的接口借助Service&#xff0c;应用可以实现服务发现和负载均衡Service 默认只…...

基于 Java 的天气预报系统设计与实现

随着互联网的飞速发展&#xff0c;天气预报系统变得越来越重要。它可以帮助用户了解未来几天的天气情况&#xff0c;便于出行、活动安排。本文将介绍如何使用 Java 构建一个简单的天气预报系统&#xff0c;涉及系统架构设计、核心功能开发以及完整的代码实现。 1. 系统架构设计…...

思迅商云8前台打开提示上传日志信息失败

请按照以下步骤核实处理&#xff1a; 1、重启sql服务后测试。 2、请先备份前台安装目录&#xff0c;之后删除安装目录下的log文件和localdate下的log文件&#xff0c;之后重新打开软件&#xff0c;若依旧不行则说明前台文件有损坏&#xff0c;需要重新安装客户端&#xff0c;…...

webstorm的缩进设置(过度缩进解释)

在编写前端代码时 缩进规范一般被认为是2个空格 而非默认的4个空格 当我们通过webstorm去编写前端代码时 我们可以通过setting->Code Style->html/css/js指定的界面中去设置tab/indent/continuation indent 具体的话 我们将html/css/js操作界面中的tab/indent设置为2个空…...

与ZoomEye功能类似的搜索引擎还有哪些?(渗透课作业)

与ZoomEye功能类似的搜索引擎有&#xff1a; Shodan&#xff1a;被誉为“物联网的搜索引擎”&#xff0c;专注于扫描和索引连接到互联网的各种设备&#xff0c;如智能家居设备、工业控制系统、摄像头、数据库等。它提供全球互联网设备的可视化视图&#xff0c;帮助用户了解网络…...

Java 计数排序

计数排序&#xff08;Counting Sort&#xff09;是一种非比较型排序算法&#xff0c;适用于一定范围内的整数排序。它的基本思想是通过计数输入元素中每个值出现的次数&#xff0c;然后计算每个值的起始位置&#xff0c;最终将元素放到正确的位置上。计数排序的时间复杂度为 O(…...

error: RPC failed; curl 16 Error in the HTTP2 framing layer

yschai@LAPTOP-F2L146JK:~$ git clone https://github.com/Chyusen/yschai.git Cloning into ‘yschai’… error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush after ref listing 使用Ubuntu在git clone github上的项目的时候,遇到以上报错…...

Python脚本分类和代码举例

Python是一种强大且灵活的编程语言&#xff0c;被广泛应用于数据分析、Web开发、自动化、人工智能等领域。在不同的应用场景下&#xff0c;Python脚本可以被分类为多种类型。本文将深入分析Python脚本的分类&#xff0c;同时提供相关代码示例&#xff0c;帮助读者理解和应用这些…...

【Redis十二】Redis的典型应用(缓存和分布式锁)

目录 Redis作为缓存 1.什么是缓存&#xff1f; 2.缓存的更新策略 3.缓存预热&#xff0c;缓存穿透&#xff0c;缓存雪崩和缓存击穿 Redis作为分布式锁 1.什么是分布式锁&#xff1f; 2.分布式锁的实现过程 Redis是目前后端开发中非常热门的组件之一&#xff0c;本篇文章…...

C++入门基础知识107—【关于C++continue 语句】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C continue 语句的相关内容&#xff01;…...

【AI大模型】《多模态持续学习》最新进展综述

摘要—持续学习&#xff08;CL&#xff09;旨在使机器学习模型能够从新数据中不断学习&#xff0c;同时在不遗忘已获得知识的基础上进行扩展。随着机器学习模型从小规模到大规模预训练架构的演变&#xff0c;以及从支持单一模态数据到支持多模态数据&#xff0c;多模态持续学习…...

大厂面试真题-CPU飙升问题怎么定位

CPU使用率飙升是开发者和系统管理员常遇到的问题&#xff0c;定位CPU飙升问题通常涉及以下步骤&#xff1a; 一、使用系统监控工具 查看CPU使用图表&#xff1a;利用任务管理器&#xff08;Windows系统&#xff09;或top、htop&#xff08;Linux系统&#xff09;等工具&#…...

【每日刷题】Day137

【每日刷题】Day137 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; 2. 495. 提莫攻击 - 力扣&#xf…...

24.4 基于consul服务发现模式

本节重点介绍 : consul 安装consul go代码注册服务&#xff0c;注销服务&#xff0c;获取服务node_exporter改造为consul服务发现在数量比较大时&#xff0c;在注册服务的时候&#xff0c;关闭check&#xff0c;可以降低consul的压力 consul 安装 准备工作 # 下载consul wge…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...