『 Linux 』重新理解挂起状态

文章目录

    • 🦄 前言
    • 新建状态 🐋
    • 挂起状态 🐋
    • 唤入唤出 🐋
    • 进程与操作系统间的联系 🐋


🦄 前言

请添加图片描述

『 Linux 』使用fork函数创建进程与进程状态的查看中提到了对挂起状态的一个理解;

挂起状态相比于其他状态来说,挂起状态与CPU并没有太直接的关系;在计算机的磁盘当中,存在着一个swap分区,这个分区就是为了当内存不足时使进程状态转化为挂起状态而准备的;

在队列当中的进程不仅仅是PCB结构体,由于各个进程要通过使用资源来操作自身的代码及数据可以得知一个进程中除了PCB结构体以外还包含着对应的代码以及数据;而挂起状态即为:

当内存严重吃紧时,操作系统会将这个进程所对应的代码及数据交换至磁盘中的swap分区从而到达减轻内存的负担,当这个进程对应的代码及数据被交换至swap分区时这个进程即为挂起状态;

在这里插入图片描述


新建状态 🐋

请添加图片描述

从『 Linux 』进程地址空间存在的意义 博客中可以知道,加载的本质就是创建进程,在一个进程的创建中,OS在初始化进程地址空间时往往采用延迟加载的策略使得能够更有价值的发挥内存的作用;

所以在一个进程创建之后,OS并不会立马为该进程分配对应的物理内存并在页表中建立映射关系;

当一个进程被创建时只初始化其对应的内核数据结构而并未申请对应物理内存(分配内存建立映射关系)时,这个状态即为新建状态;

在这里插入图片描述

这个状态下内核数据结构已经被初始化完毕;

当内存管理单元(MMU)对进程的页表的映射中未找到对应的映射关系,内存管理单元将会向OS反馈这个异常状态,这个异常状态就是 “缺页中断”;

OS获取到缺页中断的异常状态时将会去把磁盘中的代码和数据加载进内存当中;


挂起状态 🐋

请添加图片描述

在前言中提到对于挂起状态的概念性理解,而在实际上挂起状态不能完全理解为一个进程的当前状态,更能理解为一个进程中的部分代码和数据的状态;

举一个例子:

内存作为计算机中的断电易失存储介质其有着读写速度快的优点,其根据计算机的配置不同有着不同的大小(4GB,8GB…);

而某些游戏的大小少则几十GB,大则上百GB,所以将这个程序中的所有的代码和数据加载同时加载进内存当中是不可能的,所以计算机在处理这些大型程序时将以延迟加载的策略,但本质上进程内所对应的内核数据结构已经被创建;

内存管理单元(MMU)检查到页表中的虚拟地址不存在对应的映射关系将产生缺页中断的异常状态并通知OS分配内存加载数据,以这种延迟加载的策略使得内存能够更加高效的被利用;

但本质上为了内存的高效利用仅仅只是利用延迟加载方式以分批加载的策略并不能完美的使内存被高效利用;

当进程中部分的代码和数据被执行完毕后将持续保存在内存当中一段时间,这种策略叫做页面缓存(page caching);

在页面缓存中,OS会将最近使用过的页面 (包括代码和数据) 保留在内存当中一定时间,以便在将来可能需要再次访问这些内容时能够更快的获取,以提高进程整体的效率;

而当进程间的一些页面长时间未被进程访问使用,或者是在内存吃紧的情况下,OS将会把这些不常用的页面(包括代码和数据)移动至磁盘的swap分区当中以便释放内存使内存能够有效利用;

这种将页面移至磁盘swap分区的行为称为唤出;

而这些被存放进磁盘中swap分区数据的这种状态被称为挂起状态;

所以挂起状态不能完全称之为一个进程的状态,当进程仍在调度队列运行时,其某些页面可能已经进行了唤出并发生了页面置换,也就成为了概念中的挂起状态;

在这里插入图片描述

当进程中已经执行了代码和数据或者是并不常用的页面(包括数据和代码)被唤出至swap当中时,OS将会重新在页表中对这个唤出的页面进行重新建立新的映射关系,这个映射关系将从物理内存地址移至磁盘中的swap分区,这种行为被称作页面置换;

需要注意,在新建状态中,对于数据的"内存分配调度"取决于内存管理单元(MMU)对是否存在有效页表映射关系的检查所反馈的异常状态(缺页中断),并不会像此处一样建立对应的映射关系;

当然,当磁盘中的swap分区占满时,OS通常会选择释放swap分区中的部分数据,以腾出一定的空间来满足系统的内存需求,这个过程通常被称为"交换调度";

当系统中所有可用的存储空间(包括物理内存与swap分区)都已被占满时,OS才可能会因为内存不足而报错,导致系统无法正常运行;


唤入唤出 🐋

请添加图片描述

在这里应该进行区分一下,当内存管理单元(MMU)对页表的映射关系进行检查时若是未找到对应的映射关系时将会向OS发送异常状态(缺页中断),OS根据对应的异常状态对进程进行对应处理;

这里的概念是对于上文中提到新建状态以及对进程进行的延迟加载所对应的策略方法,这种方法被称为"内存分配"或是"内存分配调度";

本质上与唤入(page in) 唤出(page out) 并没有关系,唤入唤出指的是对于不常用的页面加载进磁盘中的swap分区与当这个数据重新要被使用时从swap分区再次加载进内存的概念;

二者不能相提并论;


进程与操作系统间的联系 🐋

请添加图片描述

从上文中可以总结出,实际上进程可以看作一个静态的容器;

它的作用本质上只是表示了一个程序在执行过程中的状态和资源集合(包括代码,数据,寄存器状态等);

本质上进程并不具备行为;

概念上理解的进程的行为本质上是由OS其他硬件来共同完成的;

OS负责管理进程的创建调度销毁,以及资源分配等;

硬件包括中央处理器(CPU),进程管理单元(MMU)其他设备等;

从上文可以得出结论,实际上操作系统与内存管理单元之间的关系是互相协作的;

操作系统负责管理系统资源,包括内存管理;一般用来分配内存,管理进程和线程的地址空间,或是调度内存中的页面;

而内存管理单元一般负责将页表中的虚拟地址转化为物理地址并在需要的时候执行内存访问权限的检查,同时检查页表中是否存在有效的映射关系 触发"页面中断" 使得操作系统能够以"延迟加载"的策略高效使用内存;

操作系统和内存管理单元的共同协作实现了对内存的有效管理和保护;

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

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

相关文章

LearnDash LMS ProPanel在线学习系统课程创作者的分析工具

点击阅读LearnDash LMS ProPanel在线学习系统课程创作者的分析工具原文 LearnDash LMS ProPanel在线学习系统课程创作者的分析工具通过整合报告和作业管理来增强您的 LearnDash 管理体验,使您能够发送特定于课程的通信,并显示课程的实时活动&#xff01…

Postgresql在Windows中使用pg_dump实现数据库(指定表)的导出与导入

场景 Windows中通过bat定时执行命令和mysqldump实现数据库备份: Windows中通过bat定时执行命令和mysqldump实现数据库备份_mysqldump bat-CSDN博客 Windows上通过bat实现不同数据库之间同步部分表的部分字段数据: Windows上通过bat实现不同数据库之间…

YOLOv5改进 | SPPF | 将RT-DETR模型AIFI模块和Conv模块结合替换SPPF(全网独家改进)

一、本文介绍 本文给大家带来是用最新的RT-DETR模型中的AIFI模块来替换YOLOv5中的SPPF。RT-DETR号称是打败YOLO的检测模型,其作为一种基于Transformer的检测方法,相较于传统的基于卷积的检测方法,提供了更为全面和深入的特征理解&#xff0c…

Termux搭建nodejs环境

安装nodejs ~ $ pkg install nodejs使用http-server搭建文件下载服务 先安 http-server 并启动 # 安装 http-server 包 ~ $ npm install -g http-server# 启动 http-server 服务 ~ $ http-server Starting up http-server, serving ./http-server version: 14.1.1http-serve…

高可用初探

高可用的本质是主备切换,主备切换对使用者是透明的。 一、路由器高可用 虚拟路由协议VRRP VRRP是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 VRRP 路由器中的一台。控制虚拟路由器 IP 地址的 VRRP 路由器称为主路由器,…

【Hadoop面试】HDFS读写流程

HDFS(Hadoop Distributed File System)是GFS的开源实现。 HDFS架构 HDFS是一个典型的主/备(Master/Slave)架构的分布式系统,由一个名字节点Namenode(Master) 多个数据节点Datanode(Slave)组成。其中Namenode提供元数…

RISC-V 基础知识汇总

1、指令集 基本指令集 指令集名称描述版本状态RV32I基本整数指令集, 32位元2.1已批准RV32E基本整数指令集(嵌入式系统), 32位元, 16 个暂存器2.0已批准RV64I基本整数指令集, 64位元2.1已批准RV64E基本整数指令集(嵌入式系统), 64位元, 16 个暂存器2.0已批准RV128I基本整数指令…

neuq-acm预备队训练week 10 P1525 [NOIP2010 提高组] 关押罪犯

解题思路 本题用并查集的方法 AC代码 #include <bits/stdc.h> using namespace std; int f[55555]; struct S {int a,b,c;friend inline bool operator<(S a, S b){return a.c>b.c;} } d[100000];int find(int x) {return f[x]x? x:(f[x]find(f[x])); }int mai…

易点易动固定资产管理系统——提升固定资产管理透明度和可靠性

通过全面的资产跟踪、准确的数据记录和实时的报告分析&#xff0c;易点易动系统为企业提供了全新的固定资产管理解决方案&#xff0c;帮助企业实现高效、精确的资产管理&#xff0c;提高运营效率&#xff0c;降低风险&#xff0c;实现可持续发展。 固定资产是企业重要的资源和投…

windows系统通过docker安装redis

文章目录 首先本地要安装了docker,且对docker有一定的了解,不了解可以看我博客哈以前写过安装redis,走的国内镜像.后面有了梯子就不用搞那么麻烦了配置文件映射 注意,指定本地文件需要/开头没有冒号举个栗子/D/server/redis/64bit/docker7_2_0redis.conf命令 首先本地要安装了d…

2019系统修复

修改启动顺序 尝试从最后一次正确配置启动 然后删除最后安全的程序。 准备usb系统盘 用系统引导盘进入命令提示符 chkdsk c: 在只读模式看下是否磁盘有问题。 sfc /scannow命令 在管理员命令提示符窗口输入&#xff1a;sfc /scannow命令。 复制&#xff1a;sfc /scanno…

LeetCode 746. 使用最小花费爬楼梯

一、题目 1、题目描述 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花…

倚力未来:人工智能智能辅助医疗的前景与挑战

导言 人工智能在医疗领域的应用正迅速发展&#xff0c;为医疗行业带来了新的可能性。本文将深入探讨人工智能在医疗中的智能辅助应用&#xff0c;以及这一趋势面临的前景和挑战。智慧医疗是指通过先进的信息技术&#xff0c;如人工智能、物联网、大数据等&#xff0c;实现医疗数…

使用Pytorch从零开始构建StyleGAN2

这篇博文是关于 StyleGAN2 的&#xff0c;来自论文Analyzing and Improving the Image Quality of StyleGAN&#xff0c;我们将使用 PyTorch 对其进行干净、简单且可读的实现&#xff0c;并尝试尽可能地还原原始论文。 如果您没有阅读 StyleGAN2 论文。或者不知道它是如何工作…

算法leetcode|93. 复原 IP 地址(多语言实现)

文章目录 93. 复原 IP 地址&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 93. 复原 IP 地址&#xff1a; 有效 IP …

如何戒掉懒惰这个坏习惯?

懒惰是一个常见的坏习惯&#xff0c;它会阻碍我们的进步&#xff0c;影响我们的生活质量。然而&#xff0c;戒掉懒惰并不容易&#xff0c;需要付出一定的努力和毅力。本文将介绍几种方法来戒掉懒惰习惯&#xff0c;帮助你走上一个积极向上的道路。首先&#xff0c;认识到懒惰的…

【MATLAB】数据拟合第11期-基于粒子群迭代的拟合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 基于粒子群迭代的拟合算法是一种优化技术&#xff0c;它基于粒子群优化算法&#xff08;PSO&#xff09;的基本思想。该算法通过群体中个体之间的协作和信息共享来寻找最优解。 在基于粒…

tortoisesvn各版本下载链接

https://tortoisesvn.net 无法访问最新版本下载 TortoiseSVN download | SourceForge.net 所有版本下载 TortoiseSVN - Browse Files at SourceForge.net

iPhone16:首款AI iPhone?

随着科技水平的不断发展&#xff0c;智能手机逐渐成为人们最依赖的电子产品之一。为能够满足用户需求&#xff0c;手机的硬件、外观设计与性能飞速提升&#xff0c;这也导致智能手机市场快速进入到瓶颈期。 为了能够带来更优秀的表现&#xff0c;苹果可能会为iPhone 16系列带来…

CSS学习笔记整理

CSS 即 层叠样式表/CSS样式表/级联样式表&#xff0c;也是标记语言&#xff0c; 用于设置HTML页面中的文本内容&#xff08;字体、大小、对齐方式等&#xff09;、图片的外形&#xff08;宽高、边框样式、边距&#xff09;以及版面的布局和外观显示样式 目录 准备工作 Chrome调…