当前位置: 首页 > 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…...

[红队apt]快捷方式病毒攻击流程

免责声明:本文整理攻击者操作&#xff0c;帮助了解攻击原理&#xff0c;提高防范能力 前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理攻击者是如何用快捷方式进行攻击的流程 快捷方式攻击原理 快捷方式可以指向执行某个程序。 我们利用快捷方式攻击的…...

一个架构师的职业素养:四种常用的权限模型

你好,我是看山。 本文收录在《一个架构师的职业素养》专栏。日拱一卒,功不唐捐。 今天咱们一起聊聊权限系统。 以大家熟知的电商场景举例: 用户可以分为普通用户、VIP用户:我们需要控制不同角色用户的访问范围。比如,京东的PLUS会员,可以进入会员专区,而且能够使用礼金…...

说起来很简单,做起来很复杂:解密Chat GPT背后的原理与技术

你或许已经体验过ChatGPT&#xff0c;它能快速回答各种问题&#xff0c;生成文案、编写代码&#xff0c;甚至陪你聊些有趣的话题。看似简单易用&#xff0c;背后却隐藏着强大的技术支持。 输入几句话&#xff0c;ChatGPT仿佛“理解”了你的问题&#xff0c;立即给出准确的回答…...

tcpdump-arm平台移植

准备工作 下载并解压 972 mkdir tcpdump973 cd tcpdump/974 ls975 wget https://www.tcpdump.org/release/tcpdump-4.99.5.tar.xz976 wget https://www.tcpdump.org/release/libpcap-1.10.5.tar.xz977 tar -xvf libpcap-1.10.5.tar.xz978...

LabVIEW中的非阻塞定时器

在LabVIEW编程中&#xff0c;通常需要在某些任务执行过程中进行非阻塞的延时操作。例如&#xff0c;显示某条信息一段时间&#xff0c;同时继续执行其他任务&#xff0c;并在延时时间结束后停止显示该信息。这类需求通常用于处理优先级不同的信息显示&#xff0c;如错误信息需要…...

MIDIPLUS 50周年丨中国国际乐器展览会首日盛况

10月10日&#xff0c;由中国乐器协会、上海国展展览中心有限公司、法兰克福展览&#xff08;上海&#xff09;有限公司共同主办的中国&#xff08;上海&#xff09;国际乐器展览会在上海新国际博览中心&#xff08;上海市浦东新区龙阳路2345号&#xff09;盛大开幕。 2024上海…...

基于springboot的家政服务管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于springboot的家政服务管理系统1拥有三种角色 管理员&#xff1a;用户管理、服务管理、评价管理、预约管理、分配管理等 用户&#xff1a;登录注册、预约服务、取消服务、评价等 服…...

第十四届单片机嵌入式蓝桥杯

一、CubeMx配置 &#xff08;1&#xff09;LED配置 &#xff08;1&#xff09;LED灯里面用到了SN74HC573ADWR锁存器&#xff0c;这个锁存器有一个LE引脚,这个是我们芯片的锁存引脚&#xff08;使能引脚&#xff09;&#xff0c;由PD2这个端口来控制的 &#xff08;2&#xff…...

Zotero 如何实现数据同步 坚果云

如何在Zotero中设置webdav连接到坚果云&#xff1f; | 坚果云帮助中心...

基于Redis实现的延迟队列

1. 适用场景 日常开发中&#xff0c;我们经常遇到这样的需求&#xff0c;在某个事件发生后&#xff0c;过一段时间做一个额外的动作&#xff0c;比如 拼单&#xff0c;如果2小时未能成单&#xff0c;取消拼单下单&#xff0c;30分钟内未支付&#xff0c;取消订单 之前的我们的…...