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

Linux练级宝典->Linux进程概念介绍

目录

进程基本概念

 PCB概念

task_struct

tack_struct内容分类

 PID和PPID

fork函数创建子进程

 进程优先级概念

 4个名词

进程地址空间

进程地址空间的意义

内核进程调度队列 

优先级

活动队列

过期队列


进程基本概念

一个正在执行的程序。担当分配系统资源的实体(CPU时间,内存)。

怎么理解?因为我们的进程就是CPU要计算的东西,内存是存储进程的东西并且唯一和CPU打交道的就是内存。(冯诺依曼体系)

我们知道通常我们的程序都是存在磁盘里的,但是只有内存能和CPU打交道,即计算运行任务。所以我打开一个软件其实就是把磁盘里的程序加载到内存中了,然后内存在继续去和CPU打交道。

 PCB概念

我们知道我们再使用软件时,我们并不是一次只能打开一个软件,而是一次有多个软件是打开的。那内存就有一个,我们这么多进程怎么管理的?

记住6个大字兄弟“先描述,后组织”。描述其实就和面向对象思想类似(C语言中没有面向对象的说法),把一个对象用一个结构体封装起来,需要什么变量就加入什么就是描述了。

组织也很简单:我们为什么要学数据结构,就是为了组织数据的,也可以说是管理数据。假设我们Linux里面用的是链表,那就会是下面这样的。

 这样一来,我们需要用到哪个进程通过查找就能在这个链表中找到了。那我们怎么知道要找的是哪一个PCB,当然里面的变量中,就有唯一标识PCB的变量叫做PID,下面会解释。

task_struct

对于上面的PCB是在所有系统对进程的总称,而task_struct就是Linux中对进程的统称。

tack_struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器(pc): 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
  • 上下文数据: 进程执行时处理器的寄存器中的数据。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟总和,时间限制,记账号等。
  • 其他信息

有两条指令关于进程的查询

1. ps aux : 这条指令用于查看所有进程信息

2.  ps aux | head -1 && ps aux | grep proc | grep -v grep :这条指令用于查询单一进程

grep指令就是用来查找指定进程的。

 PID和PPID

PID:process ID,就是表示进程的ID,在双链表中查找某一特定进程使用。

PPID:parent process ID,表示当前PID的爸爸进程,有什么用呢?下面会说。

fork函数创建子进程

fork分叉函数,就和分叉一样,把当前的进程分裂成两个,原进程是分裂出来的进程的父进程。(可以套娃)

 这个分裂的进程,也会被创建出来,所以此时就是两个进程,那代码怎么执行的,当然就是共用一份代码,后面会有进程替换(exec),把子进程的执行逻辑脱离出去执行另一个程序,父进程依旧执行老代码。

 父子进程的使用的变量是相同的,但是如果子进程有更改变量的操作,此时子进程和父进程的变量就不同了(写时拷贝)。

那我们如果想在一份代码中分离父子进程怎么做呢?

if分流父子进程

先说说,fork函数的返回值:0,-1,和大于0的值。

子进程的fork返回值是0,父进程的fork返回值是子进程的PID(大于0的值)。如果是-1则说明fork出错。

所以if分流的做法就是判断fork的返回值。 

 进程优先级概念

什么是进程优先级,首先我们知道,我们假设了PCB的管理是一个链表,那除了按顺序取走进程外,如果有突发事件,或者优先级高的任务,此时就有了进程优先级的概念。

怎么查看进程优先级

 ps -l 指令。

我们可以看到一个PRI和NI值

PRI与NI解释

PRI(priority)代表的就是当前进程的优先级,PRI的值越小优先级越高。

NI (nice),代表修改进程优先级的数值。

所以NI值是正数,进程优先级PRI增大,所以优先级变低,NI值是负数,同理。

NI取值有范围:-19 - 20;PRI的默认值为80;

renice修改进程的nice值

renice 就是更改nice值针对某个特定进程。

用法:renice + nice值 + PID;

 4个名词

竞争性:进程是很多的,一台电脑,通常来说只有一个CPU,所以每个进程都有竞争。

独立性:每个进程的运行,要有独立的空间独立的资源,使得多进程不受干扰。

并行:多个进程在多个CPU下分别同时进行运行。

并发:多个进程在一个CPU下采用进程切换的方式,让我们人为感觉多个进程是同时推进的。

进程地址空间

我们把地址空间看成一把尺子,不同的刻度之间有不同的区域,存储不同的信息。

但记住了进程地址空间,里面的空间是虚拟空间,就是操作系统给进程画的大饼,只是让进程以为自己得到了整个内存空间,实际上是进程用多少,才在物理内存中开辟多少。这样就避免了每次都要预先给进程分配好空间才能运行,而是进程用多少开辟多少,增加效率。

进程地址空间叫什么呢?mm_struct,(memory_struct)。怎么拿到呢?

首先我们知道task_struc是Linux单个进程的描述,这个描述里其实就包含了mm_struct。所以只要找到对应进程的task_struct就能找到对应的mm_struct。

然后刚刚我们不是说进程的地址空间是虚拟的吗?它怎么找到对应的实际的物理内存呢?

如上图,我们在查找时1.先去页表中查找这个数据是否存在(页号),存在就去物理内存中直接拿。2.如果这个数据并不存在,那就说明他还在磁盘中,所以此时就会给这个数据一个页号,然后把磁盘的数据拿到内存,此时再给这个数据一个页号(在内存不足以装下内存时的选择)。3.还有一种情况就是,这个数据还没创建,此时就会先创建然后在建立虚拟内存和物理内存的映射。

我们上面也有说,子进程和父进程最开始使用的都是同一个变量数据,那更改后进行的写时拷贝是什么意思

如上图就是我们重新开辟空间给子进程的变量,此时这个变量归子进程,父进程还是使用原来的变量。节省空间。

为什么不直接给子进程创建额外的空间?

很简单 就是因为有些程序是只有读操作的,此时给子进程在创建是不是就没用了,直接去父里面读就好了。

进程地址空间的意义

1.如果进程直接使用物理空间,每次进程切换,都是要切换整个空间给别人,还要保持自己的变量数据是被保护的,维护难度增加。

2.所以使用虚拟空间,实际就是在你时间片期间用多少就给你多少,并且通过映射的规则,我们在上层就不用担心,不同的进程的数据被修改了,因为这是操作系统进行维护的。

内核进程调度队列 

 CPU中也有一个对应的组织结构。

优先级

我们之前说进程不是有优先级吗?

普通优先级:100-139,之前我们nice值是-20 - 19,40个级别

实时优先级:0 - 99(现在用不到了),所以我们只有关心普通优先级即可。

活动队列

我们可以看到队列的个数就是140代表每个优先级.活动队列指的是,时间片还没结束的进程都按照优先级排列在活动队列中,nr_active代表表示的是当前具体有几个正在运行的进程。

调度过程:

1.遍历140个queue,找到一个非空队列,从0开始遍历!!(优先级)。

2.取出第一个进程开始计算运行,本次调度完成。

3.一直拿出直到这个队列全部解决,然后继续向后遍历。

4.所以看得出我们是一批一批处理的,新来的高优先级,也是要等前面进程处理完,才能运行

因为队列数量固定为140个,所以时间复杂度为o1.

过期队列

过期队列就是时间片到了还没有执行完,此时这个队列用来维护这些没运行完的队列。

结构总体和活动队列一样的。

那我们如果活动队列全都执行完了之后怎么操作?

首先我们要知道有两个指针:active_ptr和expired_ptr。顾名思义就是两个指向两个队列的指针。

当活动队列执行完后,此时active_ptr指向过期队列,过期队列变为活动队列,反之相同。

 所以就完成了一次交换,此时再次重新执行。

也可以看出内存中的数据一般都是等一次执行完后,CPU去内存中继续取新的程序执行。

相关文章:

Linux练级宝典->Linux进程概念介绍

目录 进程基本概念 PCB概念 task_struct tack_struct内容分类 PID和PPID fork函数创建子进程 进程优先级概念 4个名词 进程地址空间 进程地址空间的意义 内核进程调度队列 优先级 活动队列 过期队列 进程基本概念 一个正在执行的程序。担当分配系统资源的实体&#…...

OpenHarmony 5.0 mpegts封装的H265视频播放失败的解决方案

问题现象 OpenHarmony 5.0版本使用AVPlayer播放mpegts封装格式的H.265(HEVC)编码格式的视频时出现报错导致播放失败 问题原因 OpenHarmony 5.0版本AVPlayer播放器使用histreamer引擎,因为 libav_codec_hevc_parser.z.so 动态库未开源导致H265编码格式视频解析不到…...

Qt从入门到入土(九) -model/view(模型/视图)框架

简介 Qt的模型/视图(Model/View)架构是一种用于分离数据处理和用户界面展示的设计模式。它允许开发者将数据存储和管理(模型)与数据的显示和交互(视图)解耦,从而提高代码的可维护性和可扩展性。…...

缓存之美:Guava Cache 相比于 Caffeine 差在哪里?

大家好,我是 方圆。本文将结合 Guava Cache 的源码来分析它的实现原理,并阐述它相比于 Caffeine Cache 在性能上的劣势。为了让大家对 Guava Cache 理解起来更容易,我们还是在开篇介绍它的原理: Guava Cache 通过分段(…...

[漏洞篇]XSS漏洞详解

[漏洞篇]XSS漏洞 一、 介绍 概念 XSS:通过JS达到攻击效果 XSS全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以…...

【Leetcode 每日一题】2269. 找到一个数字的 K 美丽值

问题背景 一个整数 n u m num num 的 k k k 美丽值定义为 n u m num num 中符合以下条件的 子字符串 数目: 子字符串长度为 k k k。子字符串能整除 n u m num num。 给你整数 n u m num num 和 k k k,请你返回 n u m num num 的 k k k 美丽值…...

IO进程线程(线程)

作业 1.创建两个线程,分支线程1拷贝文件的前一部分,分支线程2拷贝文件的后一部分 2.创建三个线程,实现线程A打印A,线程B打印B,线程C打印C;重复打印顺序ABC。 信号量实现: 条件变量实现&#x…...

1-002:MySQL InnoDB引擎中的聚簇索引和非聚簇索引有什么区别?

在 MySQL InnoDB 存储引擎 中,索引主要分为 聚簇索引(Clustered Index) 和 非聚簇索引(Secondary Index)。它们的主要区别如下: 1. 聚簇索引(Clustered Index) 定义 聚簇索引是表数…...

tomcat单机多实例部署

一、部署方法 多实例可以运行多个不同的应用,也可以运行相同的应用,类似于虚拟主机,但是他可以做负载均衡。 方式一: 把tomcat的主目录挨个复制,然后把每台主机的端口给改掉就行了。 优点是最简单最直接,…...

论文阅读分享——UMDF(AAAI-24)

概述 题目:A Unified Self-Distillation Framework for Multimodal Sentiment Analysis with Uncertain Missing Modalities 发表:The Thirty-Eighth AAAI Conference on Artificial Intelligence (AAAI-24) 年份:2024 Github:暂…...

解决asp.net mvc发布到iis下安全问题

解决asp.net mvc发布到iis下安全问题 环境信息1.The web/application server is leaking version information via the "Server" HTTP response2.确保您的Web服务器、应用程序服务器、负载均衡器等已配置为强制执行Strict-Transport-Security。3.在HTML提交表单中找不…...

概念|RabbitMQ 消息生命周期 待消费的消息和待应答的消息有什么区别

目录 消息生命周期 一、消息创建与发布阶段 二、消息路由与存储阶段 三、消息存活与过期阶段 四、消息投递与消费阶段 五、消息生命周期终止 关键配置建议 待消费的消息和待应答的消息 一、待消费的消息(Unconsumed Messages) 二、待应答的消息…...

springboot三层架构详细讲解

目录 springBoot三层架构 0.简介1.各层架构 1.1 Controller层1.2 Service层1.3 ServiceImpl1.4 Mapper1.5 Entity1.6 Mapper.xml 2.各层之间的联系 2.1 Controller 与 Service2.2 Service 与 ServiceImpl2.3 Service 与 Mapper2.4 Mapper 与 Mapper.xml2.5 Service 与 Entity2…...

2025最新群智能优化算法:云漂移优化(Cloud Drift Optimization,CDO)算法求解23个经典函数测试集,MATLAB

一、云漂移优化算法 云漂移优化(Cloud Drift Optimization,CDO)算法是2025年提出的一种受自然现象启发的元启发式算法,它模拟云在大气中漂移的动态行为来解决复杂的优化问题。云在大气中受到各种大气力的影响,其粒子的…...

2025年Draw.io最新版本下载安装教程,附详细图文

2025年Draw.io最新版本下载安装教程,附详细图文 大家好,今天给大家介绍一款非常实用的流程图绘制软件——Draw.io。不管你是平时需要设计流程图、绘制思维导图,还是制作架构图,甚至是简单的草图,它都能帮你轻松搞定。…...

记录--洛谷 P1451 求细胞数量

如果想查看完整题目,请前往洛谷 P1451 求细胞数量 P1451 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成,数字 1 1 1 到 9 9 9 代表细胞,细胞的定义为沿细胞数字上下左右若还是细胞数字则为同一细胞,求给定矩形…...

Android Studio 配置国内镜像源

Android Studio版本号:2022.1.1 Patch 2 1、配置gradle国内镜像,用腾讯云 镜像源地址:https\://mirrors.cloud.tencent.com/gradle 2、配置Android SDK国内镜像 地址:Index of /AndroidSDK/...

做到哪一步才算精通SQL

做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE:用来创建数据库、表、索引等对象ALTER:用来修改已存在的数据库对象DROP:用来删除整个数据库或者数据库中的表TRUNCATE:用来删除表中所有的行…...

Manus演示案例: 英伟达财务估值建模 解锁投资洞察的深度剖析

在当今瞬息万变的金融投资领域,精准剖析企业价值是投资者决胜市场的关键。英伟达(NVIDIA),作为科技行业的耀眼明星,其在人工智能和半导体领域的卓越表现备受瞩目。Manus 凭借专业的财务估值建模能力,深入挖…...

postman接口请求中的 Raw是什么

前言 在现代的网络开发中,API 的使用已经成为数据交换的核心方式之一。然而,在与 API 打交道时,关于如何发送请求体(body)内容类型的问题常常困扰着开发者们,尤其是“raw”和“json”这两个术语之间的区别…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...