Linux进程状态补充(10)

news2025/4/1 13:18:45

文章目录

  • 前言
  • 一、阻塞
  • 二、挂起
  • 三、运行R
  • 四、休眠D
  • 五、四个重要概念
  • 总结


前言

  上篇内容大家看的云里雾里,这实在是正常不过,因为例如 写实拷贝 等一些概念的深层原理我还没有讲解,大家不用紧张,我们继续往下学习就行!!!

  在本篇开始之前,我们先来回顾一下有关 进程 的一些知识点:

  • OS管理的本质是先描述,再组织
  • OS并非直接管理进程 ,而是管理 进程 的 PCB(task_struct)
  • PCB 中有着进程的各种信息,包括:PID、PPID、进程状态等
  • 我们可以通过函数 getpid() 获取当前进程的 PID
  • 进程 间存在父子关系,可以通过 fork() 主动创建 子进程
  • 父子进程 相互独立,共享一份代码时,具有 写时拷贝 机制

在这里插入图片描述


一、阻塞

  先来看看进程状态图
在这里插入图片描述

  • 阻塞 就是 进程 因等待某种条件就绪,而导致的一种不推进状态
  • 通俗来说,阻塞 就是 进程 卡住了,原因就是缺少资源

  比如在我们日常生活中,常常发生堵车,这就是因为 道路资源 不够用了,车辆这个 进程 就需要原地等待

那么 进程 需要什么资源呢?

  • 比如 磁盘、网卡、显卡 等各种外设
  • 假设你现在想在 steam 上下载游戏,当你点击下载按钮后提示磁盘空间不足,此时是无法运行 steam下载 这个进程的,因为此 进程 需要等待足够大的 磁盘资源
  • 此时我们就称此 进程 为 阻塞 状态

  一言以蔽之,进程阻塞就是不被调度,原因是 进程 的 task_struct 结构体需要在某种被 OS 管理的资源下排队

二、挂起

  理解 进程阻塞 后,理解 进程挂起 就比较轻松了

  其定义为:当 CPU 资源紧张时,将 进程 交换至 磁盘 中挂起,此时内存中只有 PCB,所以 挂起 可以看作一种特殊的阻塞状态

  比如在我们日常生活中,一边走路一边玩手机很危险,所以此时我们会将玩手机这个 进程挂起 ,即把手机揣进兜里,然后 专心执行走路 这个 进程

  进程是何种状态,取决于此进程的PCB在哪里排队!!! 本质无外乎链表的增、删、查、改!!!

在这里插入图片描述

三、运行R

  一个程序在运行就表示该 进程 处于 运行 状态,那么事实真的如此吗?
在这里插入图片描述

  可以看到当前的进程状态为 睡眠 S+
在这里插入图片描述

注: + 表示当前进程在前台运行中

原因在于:

  • 运行了,但我们很难捕捉到
  • 根据冯诺依曼体系, printf 也是将内存里面去写的,相当于显示器也有自己的缓存,printf 也有自己的 I/O,因为 I/O 的速度很慢,所以大部分时间都在 I/O, 所以我们进程大部分都在等待状态

四、休眠D

  存在一种特殊睡眠状态 休眠 D,休眠 又被称为不可中断休眠,顾名思义,休眠 D 状态下的 进程 是无法终止的,kill 指令和 OS都无能为力,只能默默等待 进程阻塞 结束,拿到资源了,进程 才会停止 休眠 D 状态

  倘若存在 休眠 D 进程长时间运行,那么此时就表示系统离宕机不远了

  我来画个示意图来解释一下为什么会有这么一个特殊的进程状态,

在这里插入图片描述
  情景是 进程A 想将一整天银行的交易记录(100w条)永久保存到磁盘里面,进程A把磁盘叫出来,说:我这边有100w条数据,请你帮我保存到你那边去呗,而磁盘相对于内存来说是非常慢的,而这个时候进程A就只能阻塞了,就被链入到磁盘等待队列 struct device* devices 中了,而状态变为S(假设,事实上是D,后面就知道为什么不能了),这个时候进程A就翘脚嗑瓜子了,让其他进程运行,但是这个时候,OS急冲冲地跑过来,说:我们内存资源已经不足了,你再占用资源我自己都要寄了,覆巢之下,岂有完卵!,我只好把你干掉了。这个时候磁盘发现写到第80w的时候发现这个时候磁盘也要慢了,只好告诉进程A:赶快告诉用户,写入失败了,赶快返回了错误码。但是这个时候进程A已经被OS干掉了,磁盘只好把数据丢弃了,也就造成了数据的丢失

  数据丢失导致银行老板把进程A、OS、磁盘叫到办公室,磁盘委屈道:我就是个臭跑腿的,我已经将数据写入失败的可能告诉你了,我跟进程B,进程C都是这样干的,这不怪我!进程A说:这不怪我,这怪OS把我给干掉了,人在家中坐,锅从天上来,OS说:这不怪我,我本来就是管理者,我只是在履行保护内存资源的职责!

  很明显,明察秋毫的我们发现了其实是银行的问题,定义了一个新的状态D深度睡眠,用于当 OS 和 磁盘 进行 I/O阻塞 的时候,这就是D状态的由来

五、四个重要概念

  竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便有了优先级。
  独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
  并行: 多个进程在多个CPU下分别同时进行运行,这称之为并行。
  并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发。

  CPU执行进程代码,不是把进程代码执行完毕,才开始执行下一个,而是给每一个进程预分配一个 时间片 ,基于 时间片 ,进行调度轮转(单CPU下)


总结

  这篇有点水,下篇争取来个实的!

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

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

相关文章

基于Python深度学习的鲨鱼识别分类系统

摘要:鲨鱼是海洋环境健康的指标,但受到过度捕捞和数据缺乏的挑战。传统的观察方法成本高昂且难以收集数据,特别是对于具有较大活动范围的物种。论文讨论了如何利用基于媒体的远程监测方法,结合机器学习和自动化技术,来…

EtherNet/IP转ProfiNet协议转换网关驱动西门子PLC与流量计的毫秒级压力同步控制

一、案例背景 汽车涂装线的静电喷涂工艺对压缩空气流量稳定性要求极高。原系统中Alicat流量计与西门子PLC因协议差异无法联动,导致涂料浪费率高达8%。通过JM-EIPM-PN网关实现供气系统与PLC的深度集成。从而实现了EtherNet/IP转ProfiNet的通讯。 二、设备连接与配置…

【力扣刷题|第十七天】0-1 背包 完全背包

目标和 力扣题目网址:目标和 这道题我们先用回溯的思想来做。首先我们设正数和为S,数组和为N,目标值为T,那么S-(N-S)T化简之后可以得S(TN)/2即选择的正数个数为偶数,而且NT也为偶数,那么第一个判断条件我们就有了&…

深度学习处理时间序列(3)

基于常识、不使用机器学习的基准 在开始使用像黑盒子一样的深度学习模型解决温度预测问题之前,我们先尝试一种基于常识的简单方法。它可以作为一种合理性检查,还可以建立一个基准,更高级的机器学习模型需要超越这个基准才能证明其有效性。对…

VectorBT:使用PyTorch+LSTM训练和回测股票模型 进阶二

VectorBT:使用PyTorchLSTM训练和回测股票模型 进阶二 本方案基于LSTM神经网络构建多时间尺度股票收益率预测模型,结合VectorBT进行策略回测。核心原理是通过不同时间窗口(5/10/20/30日)捕捉股价的短期、中期、长期模式&#xff0c…

蓝桥杯 第十二天 819 递增序列

注意注意&#xff1a;不考虑左上的情况&#xff0c;因为题目给的样例没有 public static int is1(char ch[][],int m,int n){int ans0;for (int i0;i<m;i){//起始点在哪for (int j0;j<n;j){int add1;while(jadd<n){if(ch[i][j]<ch[i][jadd]) ans; //横add;}add1…

【YOLOv11】目标检测任务-实操过程

目录 一、torch环境安装1.1 创建虚拟环境1.2 启动虚拟环境1.3 安装pytorch1.4 验证cuda是否可用 二、yolo模型推理2.1 下载yolo模型2.2 创建模型推理文件2.3 推理结果保存路径 三、labelimg数据标注3.1 安装labelimg3.2 解决浮点数报错3.3 labelimg UI界面介绍3.4 数据标注案例…

C++_STL之vector篇

一、vector的常见用法 注&#xff1a;C中若使用vector需包含头文件<vector>. 1.vector的构造函数 int n 10,ret1;vector<int> nums(n,ret); //n表示vector初始的容量 ret表示vector中初始化的值for (auto e : nums)cout << e << " "; 扩展…

sqli-labs靶场 less 9

文章目录 sqli-labs靶场less 9 时间盲注 sqli-labs靶场 每道题都从以下模板讲解&#xff0c;并且每个步骤都有图片&#xff0c;清晰明了&#xff0c;便于复盘。 sql注入的基本步骤 注入点注入类型 字符型&#xff1a;判断闭合方式 &#xff08;‘、"、’、“”&#xf…

【Golang】第八弹----面向对象编程

&#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;Golang &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 前言&#xff1a;Go语言面向对象编程说明 Golang也支持面向对…

java基础以及内存图

java基础 命名&#xff1a; 大驼峰&#xff1a;类名 小驼峰&#xff1a;变量名方法名等其他的 全部大写&#xff1a;常量名字.. // 单行注释 /**/ 多行注释 变量类型 变量名 一、基本类型&#xff08;8个&#xff09; 整数&#xff1a;byte-8bit short-16bit int 32-b…

【嵌入式学习3】TCP服务器客户端 - UDP发送端接收端

目录 1、TCP TCP特点 TCP三次握手&#xff08;建立TCP连接&#xff09;&#xff1a; TCP四次握手【TCP断开链接的时候需要经过4次确认】&#xff1a; TCP网络程序开发流程 客户端开发&#xff1a;用户设备上的程序 服务器开发&#xff1a;服务器设备上的程序 2、UDP 为…

Linux之基础知识

目录 一、环境准备 1.1、常规登录 1.2、免密登录 二、Linux基本指令 2.1、ls命令 2.2、pwd命令 2.3、cd命令 2.4、touch命令 2.5、mkdir命令 2.6、rmdir和rm命令 2.7man命令 2.8、cp命令 2.9、mv命令 2.10、cat命令 2.11、echo命令 2.11.1、Ctrl r 快捷键 2…

llamafactory微调效果与vllm部署效果不一致如何解决

在llamafactory框架训练好模型之后&#xff0c;自测chat时模型效果不错&#xff0c;但是部署到vllm模型上效果却很差 这实际上是因为llamafactory微调时与vllm部署时的对话模板不一致导致的。 对应的llamafactory的代码为 而vllm启动时会采用大模型自己本身设置的对话模板信息…

WebSocket通信的握手阶段

1. 客户端建立连接时&#xff0c;通过 http 发起请求报文&#xff0c;报文表示请求服务器端升级协议为 WebSocket&#xff0c;与普通的 http 请求协议略有区别的部分在于如下的这些协议头&#xff1a; 上述两个字段表示请求服务器端升级协议为 websocket 协议。 2. 服务器端响…

分布式ID服务实现全面解析

分布式ID生成器是分布式系统中的关键基础设施&#xff0c;用于在分布式环境下生成全局唯一的标识符。以下是各种实现方案的深度解析和最佳实践。 一、核心需求与设计考量 1. 核心需求矩阵 需求 重要性 实现难点 全局唯一 必须保证 时钟回拨/节点冲突 高性能 高并发场景…

dom0运行android_kernel: do_serror of panic----failed to stop secondary CPUs 0

问题描述&#xff1a; 从日志看出,dom0运行android_kernel&#xff0c;刚开始运行就会crash,引发panic 解决及其原因分析&#xff1a; 最终问题得到解决&#xff0c;发现是前期在调试汇编阶段代码时&#xff0c;增加了汇编打印的指令&#xff0c;注释掉这些指令,问题得到解决。…

HarmonyOS NEXT——【鸿蒙原生应用加载Web页面】

鸿蒙客户端加载Web页面&#xff1a; 在鸿蒙原生应用中&#xff0c;我们需要使用前端页面做混合开发&#xff0c;方法之一是使用Web组件直接加载前端页面&#xff0c;其中WebView提供了一系列相关的方法适配鸿蒙原生与web之间的使用。 效果 web页面展示&#xff1a; Column()…

优选算法的慧根之翼:位运算专题

专栏&#xff1a;算法的魔法世界 个人主页&#xff1a;手握风云 一、位运算 基础位运算 共包含6种&(按位与&#xff0c;有0就是0)、|(按位或有1就是1)、^(按位异或&#xff0c;相同为0&#xff0c;相异为1)、~(按位取反&#xff0c;0变成1&#xff0c;1变成0)、<<(左…

图论问题集合

图论问题集合 寻找特殊有向图&#xff08;一个节点最多有一个出边&#xff09;中最大环路问题特殊有向图解析算法解析步骤 1 &#xff1a;举例分析如何在一个连通块中找到环并使用时间戳计算大小步骤 2 &#xff1a;抽象成算法注意 实现 寻找特殊有向图&#xff08;一个节点最多…