Linux进程状态补充(10)

文章目录

  • 前言
  • 一、阻塞
  • 二、挂起
  • 三、运行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.mzph.cn/diannao/76032.shtml

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

相关文章

信息学奥赛一本通 1609:【例 4】Cats Transport | 洛谷 CF311B Cats Transport

【题目链接】 ybt 1609:【例 4】Cats Transport 洛谷 CF311B Cats Transport 【题目考点】 1. 动态规划:斜率优化动规 【解题思路】 解法1:设a点的前缀和 输入的 d d d序列是从 d 2 d_2 d2​到 d n d_n dn​,共n-1个数字。人…

bluecode-20240913_1_数据解码

时间限制:C/C 1000MS,其他语言 2000MS 内存限制:C/C 256MB,其他语言 512MB 难度:困难 数据解码 指定有一段经过编码的二进制数据,数据由0个或多个"编码单元"组成。"编码单元"的编码方式…

接口自动化进阶 —— Pytest全局配置pytest.ini文件详解!

pytest.ini 是 Pytest 的全局配置文件,用于自定义测试运行的行为和规则。通过配置 pytest.ini,可以避免在命令行中重复输入参数,提升测试的效率和一致性。 1. 配置文件的位置和格式 位置:pytest.ini 文件通常放在项目的根目录下。…

ModuleNotFoundError: No module named ‘demjson‘

错误 ModuleNotFoundError: No module named demjson 表明 Python 无法在其环境中找到名为 demjson 的模块。demjson 是一个第三方库,用于在 Python 中编码和解码 JSON 数据。如果你尝试导入它但遇到了这个错误,那很可能是因为你的 Python 环境中没有安装…

1、C51单片机(STC8G2K64S4)串口实验

一、串口1接线图 1、下面是单片机外接电路图,P30,P31分别用于RXD和TXD功能引脚 2、我们来查看单片机手册 串口1需要设置的寄存器 串口1的功能脚配置选择位,看电路图选择的是P3.0,P3.1。 3、串口1:SCON控制寄存器 设置为0x50:0101 0000。&a…

3PL EDI:SA Piper Logistics EDI需求分析

SA Piper Logistics成立于2005年,是一家专注于全球供应链管理的第三方物流服务商(3PL),总部位于美国芝加哥。公司以“优化物流效率,重塑供应链价值”为使命,提供仓储管理、运输规划、订单履行及跨境清关等一…

vscode正则表达式使用

小标题 ^\d.\d.\d\s.*$ ^表示匹配字符串的开头。\d\.\d\.\d表示匹配一到多个数字,接着一个小数点,再接着一到多个数字,然后又一个小数点和一到多个数字,用来匹配类似 “2.1.1” 这样的标题号部分。\s表示匹配一个空格。.*表示匹配…

力扣.旋转矩阵Ⅱ

59. 螺旋矩阵 II - 力扣&#xff08;LeetCode&#xff09; 代码区&#xff1a; class Solution {const int MAX25; public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans;vector<int> hang;int len_nn;int arry[25][25]…

软件工程面试题(十)

1、OSI七层模型tcp四层模型是什么样的 OSI七层参考模型 :物理层 、数据链路层 、网络层 、传输层、应用层、会话层、表示层 TCP/IP:第一层网络接口层第二层 第二层??网间层 第三层??传输层 第四层??应用层 2、JAVA测试模式(ZZ): 模式(一) Main 模式 模式(二)…

淘宝双十一大促监控系统开发:实时追踪爆品数据与流量波动

以下是开发一个淘宝双十一大促监控系统&#xff0c;以实时追踪爆品数据与流量波动的详细步骤及示例代码&#xff1a; 实现思路 数据获取&#xff1a;利用淘宝 API 或者爬虫技术&#xff0c;获取商品的销售数据、浏览量等信息。数据存储&#xff1a;将获取到的数据存储到数据库…

高并发金融系统,“可观测-可追溯-可回滚“的闭环审计体系

一句话总结 在高并发金融系统中&#xff0c;审计方案设计需平衡"观测粒度"与"系统损耗"&#xff0c;通过双AOP实现非侵入式采集&#xff0c;三表机制保障操作原子性&#xff0c;最终形成"可观测-可追溯-可回滚"的闭环体系。 业务痛点与需求 在…

Docker 的实质作用是什么

Docker 的实质作用是什么 目录 Docker 的实质作用是什么**1. Docker 的实质作用****2. 为什么使用 Docker?****(1)解决环境一致性问题****(2)提升资源利用率****(3)简化部署与扩展****(4)加速开发与协作****3. 举例说明****总结**Docker 的实质是容器化平台,核心作用…

【测试】每日3道面试题 3/29

每日更新&#xff0c;建议关注收藏点赞。 自动化测试中的PO模式 page object model POM 是一个设计模式&#xff0c;在自动化测试中将页面元素和操作抽象为对象。具体是将每个页面或页面一部分封装为一个类&#xff0c;包含页面元素和相关操作。 PO 模式不仅适用于 Web 应用的自…

ISIS-4 LSP计算

上一章我们介绍了ISIS的LSDB的形成以及相关实验 这一章我们来介绍ISIS是怎样来计算我们的路由的 1、LSDB数据库 之前我们在ISIS概述里面已经提及到Level-1的路由器设备只会维护Level-1的LSDB Level1-2会维护Level-1以及Level-2的LSDB,Level-2只会维护Level-2的LSDB 2、ATT置…

第7期:生成式AI伦理边界——当技术撞上道德与法律的防火墙

现实版"黑镜"事件 某直播平台主播使用AI换脸技术冒充明星带货&#xff0c;当晚销售额破亿。三天后收到法院传票——这不仅侵犯肖像权&#xff0c;生成的虚假宣传内容还引发大规模消费投诉。这个案例让行业意识到&#xff1a;没有伦理约束的AI&#xff0c;就像没有刹车…

Vue2 使用 v-if、v-else、v-else-if、v-show 以及 v-has 自定义指令实现条件渲染

提示&#xff1a;渲染就是显示 文章目录 前言v-if 的基础用法v-elsev-else-ifv-show 和 v-if 对比自定义指令 v-hasv-if 和 v-has 结合使用场景完整示例补充说明 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 在 Vue2 中&#xff0c;可以通过 v-if 和…

【项目合集】只能xx养殖系统,STM32、esp8266、OLED屏幕、dht11、光敏、水位、加热、风扇

硬件 STM32 主控ESP8266 WIIF 模块烟雾传感器dht11 温湿度传感器光敏传传感器&#xff08;偏暗、亮两种状态&#xff09;水位检测OLED 显示当前状态&#xff08;环境数据&#xff09;加热模块&#xff08;灯代替&#xff09;风扇模块电源模块继电器&#xff08;控制风扇&#…

Java多线程与高并发专题——Condition 和 wait/notify的关系

引入 上一篇关于Condition&#xff0c;我们对Condition有了进一步了解&#xff0c;在之前生产/消费者模式一文&#xff0c;我们讲过如何用 Condition 和 wait/notify 来实现生产者/消费者模式&#xff0c;其中的精髓就在于用Condition 和 wait/notify 来实现简易版阻塞队列&am…

29_项目

目录 http.js 1、先注册账号 register.html 2、再登录 login.html 3、首页 index.html 4 详情 details.html cart.html css index.css register.css details.css 演示 进阶 http.js let baseURL "http://localhost:8888"; let resgiterApi baseURL &…

Next.js 项目生产构建优化

Next.js 项目生产构建优化的完整教程&#xff0c;涵盖配置、工具链和性能调优技巧&#xff0c;助你显著加速 npm run build&#xff1a; 注&#xff1a;学习阶段请先测试环境使用&#xff01; 文章目录 [toc]一、基础优化1. 确保使用最新版本2. 清理无用依赖和代码3. 配置 nex…