Linux 进程概念补充 (自用)

进程概念

  • 内核
  • 进程
  • 进程状态
  • 内存泄漏
  • 进程调度。
  • Linux真实调度算法
  • 环境变量

内核

狭义上的操作系统指的是 内核就是进程管理进程调度,文件系统等等。
广义上的操作系统其实在外壳指令这些。封装了系统调用的东西。

进程

课本概念程序的一个基本实例
内核观点,承担分配资源的实体。
我们可以理解为所谓进程就是PCB+加载到内存的代码和数据。

管理就得先描述再组织。Linux下的PCB就是task_struct。

我们可以通过指令ps axj|head -1

ls /proc (内存级的文件系统)

在这里插入图片描述
cwd -> cwd 表示进程的 ​当前工作目录
exe -> 表示进程执行的 ​可执行文件路径,即进程是通过哪个二进制文件启动的

bash就是一个死循环的进程

fork()创建子进程,如何理解fork调用一次返回两次
一个函数通常在执行到return语句之前,函数的工作基本完成了。
我们认为在fork函数内部执行到return之前,我们已经创建了子进程。父子进程同时return

进程状态

进程状态实际就是task struct中的一个整数。
有运行阻塞挂起。
运行就是进程链入到运行队列
阻塞就是进程链入到阻塞队列中

理解Linux内核链表的话题,
Linux的PCB,封装一个双向链表的结构体。
封装了一个previous指针和一个next指针。
PCB中可以存在多个这样的结构体
第一个head我们放在这个调度队列中,第二个放在在等待队列中,第三个再放入其他。
这样就可以将一个进程链入到不同的数据结构当中。可能有的人会想,我们就可以用offset函数计算出偏移量

如何管理硬件?管理硬件先描述再组织,就是我们有个struct device的。结构体里面封装了这个。ID标识符,然后status表示状态,然后task struck wait_queen,

如果说进程所就绪的,所需要的资源未就绪,我们就把它列入到特定硬件的阻塞队列中,如果如果硬件那个硬件就去了,我们就在那再链回到运行队列中。

事实上我们察觉不了,其实是内存中的代码和数据挂回到磁盘中但是我们保留它PCB的结构体

挂起就是挂到外设或者说将他放到运行队列的末端。

运行在在unix,Linux下表现的就是偶尔加或者说r状态二加是前台,r是后台。
S就是阻塞状态,然后也就可中断睡眠,浅睡眠。就是然后操作系统可以自自主的杀死这个进程。

具体状态
R(后台)和R+(前台)运行

S(阻塞) 可中断休眠(操作系统可自主杀死该进程)
t(暂停) debug下
T(暂停) Ctrl+Z
这个是Linux下的特有的状态,这个只是一种操作系统止损的行为。这个进程是不是真要杀死?但操作系统只是怀疑这个进程有问题,所以就暂停住他。

D就是不可中断状态。因为如果说我们进行大量的这个写入,但是如果说进程被杀死,用户无法得知,那数据就会直接丢失,为此我们需要一个不可被击杀的状态,但其实这个状态是很少见的。只要做存储和IO的人才知道

Z状态就是僵尸状态,僵尸进程这个东西是非常重要的,如果我们不对僵尸进程进行处理的话,那就会造成这个内存泄露,父进程不管僵尸进程就会一直维护导致内存泄漏。

内存泄漏

常驻内存的进程(死循环)才会有内存泄漏

如果子进程退出之前,父进程先现在死亡了,那么子进程就会托管给父进程?

进程调度。

我们要理解到首先我们谈两个概念,优先级和权限。优先级是指先后顺序,权限是能否得到我们只有在具有访问的权限的情况下才能谈优先级的概念。

我来讲一下nice值,值越低,优先级越高。但其实nice值是有一定范围的即优先级有一定范围,否则会导致进程饥饿,

并发是多个进程。单哥CPU快速切换,也就是分时系统。
并行就是多个进程。多个CPU。

进程会调度。
哪怕该进程是死循环也会调度
保存:将寄存器中的内容保存到当前进程的PCB当中
恢复上下文:当前进程的PCB当中的内容恢复到寄存器当中

我要要意识到空间一份,内容多份!!!

Linux真实调度算法

在这里插入图片描述

nr_active表明多少个进程
bitmap[5],0到99实时优先级不考虑,100-139分时我们要考虑的优先级。通过位图我们就能O(1)地得出当前优先级下队列是否有进程
queue哈希桶,哈希函数X-60+(140-40)。
X是进程优先级,进程优先级范围是[60,99]

当前进程执行完之后,并不是直接列入到当前队列的最末端因为这样的话一个优先级高的死循环进程,我们永远无法到达到下一优先级队列当中。因此我们将它列入到过期队列当中。随着时间的发展活跃队列的进程越来越少,过期队列的进程越来越多。最后当活跃队列的进程为零时,我们将活跃队列和过期队列的指针交换(O(1))。又得到了一个充满进程的活跃队列和一个空的过期队列。

环境变量

命令行参数:实现不同程序子功能的方法
int main(int argc,char* argv[])

环境变量从哪来?
配置文件里来

.bash_profile
.bashrc(在这里面添加PATH)

su USER变
su - 重新登入

环境变量Key=Value的形式
PWD(当前路径)
OLDPWD(上次路径)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【dify实战】agent结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载

使用dify agent实现数据库智能问答,echarts可视化展示,excel报表下载 观看视频,您将学会 在dify下如何快速的构建一个agent,来完成数据分析工作;如何在AI的回复中展示可视化的图表;如何在AI 的回复中加入E…

macos下 ~/.zshrc~ 和 ~/.zshrc

macos下 ~/.zshrc~ 和 ~/.zshrc ~/.zshrc通常是备份文件或临时文件,可能由编辑器(如vim)创建,通常可以安全删除,不会影响系统运行。 在Mac下,这种带~后缀的备份文件通常是由以下情况产生: 常…

位运算---总结

位运算 基础 1. & 运算符 : 有 0 就是 0 2. | 运算符 : 有 1 就是 1 3. ^ 运算符 : 相同为0 相异为1 and 无进位相加位运算的优选级 不用在意优先级,能加括号就加括号给一个数 n ,确定它的二进制位中第 x 位是 0 还是 1? 规定: 题中所说的第x位指:int 在32位机器下4个…

Java SpringBoot的自定义配置

一,一个类多个属性的情况 application.properties配置文件写法 my.config.ip127.0.0.1 my.config.port8080自定义配置类:MyTestConfig import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties…

Matlab FCM模糊聚类

1、内容简介 Matlab 211-FCM模糊聚类 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

C++项目 —— 基于多设计模式下的同步异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)

C项目 —— 基于多设计模式下的同步&异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计) 异步线程什么是异步线程?C 异步线程简单例子代码解释程序输出关键点总结扩展:使…

C# 使用 BinaryFormatter 和相关类型时的反序列化风险

C# 使用 BinaryFormatter 和相关类型时的反序列化风险 由来:在项目使用.NET Reactor 混淆 C# 的序列化和反序列化发现存在的问题,读取文件时,转化为对应的类数据有时候为空,所以就在网上搜索了相关知识,在此做个笔记以…

OpenCv高阶(四)——角点检测

一、角点检测 在计算机视觉中,角点检测是识别图像中局部区域(角点)的关键技术,这些区域通常是两条或多条边缘的交点,具有丰富的结构信息,常用于图像匹配、跟踪、三维重建等任务。 Harris角点检测算法是一…

Conda 入门指令教程

Conda 入门指令教程 Conda 是一个强大的包和环境管理工具,广泛应用于数据科学和机器学习项目中。本文将介绍 Conda 的常用指令,帮助你快速上手。 1. Conda 基础操作 查看 Conda 版本 conda --version显示当前安装的 Conda 版本。 更新 Conda conda…

Unity ShaderLab引用HLSL文件找不到其中函数

在写Unity Shader的过程中,常常需要将方法封装到HLSL文件中,今天遇到一个这样的报错, 明明hlsl文件路径引用没问题,却引用不到方法 并且将分散文件中的函数复制过来一切正常,最终定位到HLSL的预编译指令中 这指令的…

uniapp上传图片时(可选微信头像、相册、拍照)

参考文献&#xff1a;微信小程序登录——头像_onchooseavatar-CSDN博客 <button open-type"chooseAvatar" chooseavatar"onChooseAvatar"> </button>onChooseAvatar(e) {uni.showLoading({title: 上传中...,mask: true});uni.uploadFile({url…

单元测试的一般步骤

Qt Test Qt Test 是 Qt 开发人员发布的一个单元测试框架&#xff0c;用于测试基于 Qt 框架的应用程序或库。它提供了单元测试框架中常见的所有功能以及用于测试图形用户界面的扩展。 1.自动化测试包络ui测试>接口测试>单元测试&#xff1b;现问如何使用Qt进行单元测试&…

【Matlab】中国沿岸潮滩宽度和坡度分布

【Matlab】中国沿岸潮滩宽度和坡度分布 参考文献见最后或者阅读原文&#xff01; 中国沿岸潮滩宽度和坡度分布: figure 1 a 潮滩宽度分布。b 潮滩坡度分布。 图中标注了中国沿海各省&#xff0c;分别为辽宁&#xff08;LN&#xff09;、河北&#xff08;HB&#xff09;、山东&…

理解.NET Core中的配置Configuration

什么是配置 .NET中的配置&#xff0c;本质上就是key-value键值对&#xff0c;并且key和value都是字符串类型。 在.NET中提供了多种配置提供程序来对不同的配置进行读取、写入、重载等操作&#xff0c;这里我们以为.NET 的源码项目为例&#xff0c;来看下.NET中的配置主要是有…

windows服务器及网络:论如何安装(虚拟机)

今天我要介绍的是&#xff1a;在Windows中对于安装系统&#xff08;虚拟机的步骤以及相关的安装事宜&#xff09;&#xff0c;事不宜迟&#xff0c;让我们来看看系统安装&#xff08;虚拟机&#xff09;是怎么操作的&#xff1a; 对现在来说&#xff0c;安装电脑系统已经是非常…

shardingsphere-jdbc集成Seata分布式事务

1、导入相关依赖 <!-- shardingsphere-jdbc --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc</artifactId><version>5.5.1</version></dependency><!-- shardingspher…

05-DevOps-Jenkins自动拉取构建代码

新建Gitlab仓库 先在Gitab上创建一个代码仓库&#xff0c;选择创建空白项目 安装说明进行填写&#xff0c;然后点击创建项目 创建好的仓库是空的&#xff0c;什么都没有 新建一个springboot项目&#xff0c;用于代码上传使用。 只是为了测试代码上传功能&#xff0c;所以代码…

C#核心(24)结构体和类的区别,抽象类和接口的区别(面试常问)

前言 随着上一节我们对StringBulider的讲解落下帷幕&#xff0c;c#核心的知识点我们也即将告一段落,我们讲完了面向对象要用的三大特性&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;和七大原则。期中自然也不乏一些小的散的碎的的知识点。 今天我们要讲的也…

HTMLCSS实现异环网站,期末web作业

本网站是我在学习前端时敲得&#xff0c;仅供学习使用。 这段代码是一个完整的 HTML 网页项目&#xff0c;包含 HTML、CSS 和 JavaScript 部分&#xff0c;用于构建一个名为 “异环” 的网页。网页具备头部导航栏、主体视频展示、图片交互元素、音乐播放控制、视频弹窗播放以及…

Oracle表的别名不能用as,列的别名可以用as

在 Oracle 数据库中&#xff0c;‌表的别名‌和‌列的别名‌在使用 AS 关键字时确实有不同规则&#xff0c;以下是详细说明&#xff1a; 1. 表的别名&#xff08;Table Alias&#xff09;‌ ‌不支持 AS 关键字‌&#xff0c;直接跟在表名后即可。‌语法示例‌&#xff1a; S…