Linux 进程概念补充 (自用)

news2025/4/21 11:44:05

进程概念

  • 内核
  • 进程
  • 进程状态
  • 内存泄漏
  • 进程调度。
  • 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.coloradmin.cn/o/2339398.html

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

相关文章

PyTorch - Tensor 学习笔记

上层链接:PyTorch 学习笔记-CSDN博客 Tensor 初始化Tensor import torch import numpy as np# 1、直接从数据创建张量。数据类型是自动推断的 data [[1, 2],[3, 4]] x_data torch.tensor(data)torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])输出&am…

Navicat、DataGrip、DBeaver在渲染 BOOLEAN 类型字段时的一种特殊“视觉风格”

文章目录 前言✅ 为什么 Boolean 字段显示为 [ ]?✅ 如何验证实际数据类型?✅ 小结 前言 看到的 deleted: [ ] 并不是 Prisma 的问题,而是数据库客户端(如 Navicat、DataGrip、DBeaver)在渲染 BOOLEAN 类型字段时的一种…

基于 Vue3 + ECharts + GeoJson 实现区域地图钻取功能详解

文章目录 前言一、实现步骤1. 项目初始化2. 准备GeoJson数据3. 创建地图组件4. 创建主页面组件5. 使用组件 二、功能亮点三、性能优化建议四、常见问题解决五、结语六、实战demo七、资源下载 前言 在数据可视化领域,地图展示是一种非常直观的表现形式。而地图钻取&…

安卓学习24 -- 网络

1 整体架构 (出处见水印) 这两张是能找到的比较清楚的图。目前可以看出,底层的网络业务,还是传统的linux内核提供。(注:这两个图我个人觉得不是非常对。。。) 在安卓上增加的两个比较重要的部…

github新建一个远程仓库并添加了README.md,本地git仓库无法push

1.本地git仓库与远程仓库绑定 2.push时报错,本地的 main 分支落后于远程仓库的 main 分支(即远程有更新,但你本地没有),需要拉取远程的仓库--->在merge合并(解决冲突)--->push 3.但是git …

Python:使用web框架Flask搭建网站

Date: 2025.04.19 20:30:43 author: lijianzhan Flask 是一个轻量级的 Python Web 开发框架,以简洁灵活著称,适合快速构建中小型 Web 应用或 API 服务。以下是 Flask 的核心概念、使用方法和实践指南 Flask 的核心特点: 轻量级 核心代码仅约…

Kotlin delay方法解析

本文记录了kotlin协程(Android)中delay方法的字节码实现,并解析了delay方法如何实现挂起操作。 一、delay方法介绍 1.1、delay方法使用举例 class TestDelay {suspend fun testDelay() {Log.d("TestDelay", "before delay")delay(1000)Log.d…

【Vulkan 入门系列】创建描述符集布局和图形管线(五)

描述符集布局定义了着色器如何访问资源(如缓冲区和图像),是渲染管线配置的关键部分。图形管线定义了从顶点数据到最终像素输出的整个处理流程,包括可编程阶段(如顶点和片段着色器)和固定功能阶段&#xff0…

mysql中in的用法详解

MySQL 中 IN 操作符用法详解 IN 是 MySQL 中用于多值筛选的高效操作符,常用于 WHERE 子句,可替代多个 OR 条件,简化查询逻辑并提升可读性。以下从基础语法、应用场景、性能优化、常见问题及高级技巧进行全方位解析。 一、基础语法与优势 1.…

MySQL为什么默认使用RR隔离级别?

大家好,我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别?】面试题。希望对大家有帮助; MySQL为什么默认使用RR隔离级别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR(Repeatable Read)…

施磊老师基于muduo网络库的集群聊天服务器(二)

文章目录 Cmake简单介绍Cmake与MakefileCmake配置CmakeLists.txt 编写完整cmake例子文件夹杂乱问题多级目录Cmakevscode 极其推荐 的 cmake方式 Mysql环境与编程mysql简单使用User表Friend表AllGroup表GroupUser表OfflineMessage表 集群聊天项目工程目录创建网络模块代码Chatse…

线性DP:最长上升子序列(子序列可不连续,子数组必须连续)

目录 Q1:简单遍历 Q2:变式(加大数据量) Q1:简单遍历 Dp问题 状态表示 f(i,j) 集合所有以第i个数结尾的上升子序列集合-f(i,j)的值存的是什么序列长度最大值max- 状态计算 (其实质是集合的划分)…

C语言之文本加密程序设计

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 文本加密程序设计 摘要:本文设计了一种文本加密程序,旨在提高信息安…

云效部署实现Java项目自动化部署图解

前言 记录下使用云效部署Java项目,实现java项目一键化自动化部署。 云效流程说明: 1.云效拉取最新git代码后 2.进行maven编译打包后,上传到指定服务器目录 3.通过shell脚本,先kill java项目后,通过java -jar 启动项…

0801ajax_mock-网络ajax请求1-react-仿低代码平台项目

0 vite配置proxy代理 vite.config.ts代码如下图所示: import { defineConfig } from "vite"; import react from "vitejs/plugin-react";// https://vite.dev/config/ export default defineConfig({plugins: [react()],server: {proxy: {&qu…

基于Python智能体API的Word自动化排版系统:从零构建全流程模块化工作流与版本控制研究

基于Python智能体API的Word自动化排版系统:从零构建全流程模块化工作流与版本控制实践研究 1. 引言2. 研究背景与意义3. 自动排版工作流的设计原理3.1 文档内容提取与解析3.2 样式参数与格式化规则3.3 智能体API接口调用3.4 自动生成与批量处理3.5 与生成式AI的协同4. 系统架构…

Java【网络原理】(4)HTTP协议

目录 1.前言 2.正文 2.1自定义协议 2.2HTTP协议 2.2.1抓包工具 2.2.2请求响应格式 2.2.2.1URL 2.2.2.2urlencode 2.2.3认识方法 2.2.3.1GET与POST 2.2.3.2PUT与DELETE 2.2.4请求头关键属性 3.小结 1.前言 哈喽大家好啊,今天来继续给大家带来Java中网络…

每天学一个 Linux 命令(27):head

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/27/index.html head 是 Linux 中用于查看文件开头部分内容的命令,默认显示文件前 10 行,适合快速预览文件结构或日志头部信息。 命令格式 head [选项] [文件]常用选项 选项说明-n <行数>指定显示前 N 行(如…

【2025软考高级架构师】——计算机系统基础(7)

摘要 本文主要介绍了计算机系统的组成&#xff0c;包括硬件和软件两大部分。硬件由处理器、存储器、总线、接口和外部设备等组成&#xff0c;软件则涵盖系统软件和应用软件。文章还详细阐述了冯诺依曼计算机的组成结构&#xff0c;包括 CPU、主存储器、外存等&#xff0c;并解…

LeetCode 打家劫舍+删除并获得点数

题目描述 打家劫舍题目传送门1 删除并获得点数传送门2 思路 这两道题看似毫无关系&#xff0c;但竟然可以用桶数组联系起来&#xff01;&#xff01; 先说打家劫舍这道题 限制条件是不能走相邻的屋&#xff0c;再联想到跳台阶&#xff08;走一格或两格&#xff09;&#x…