『 Linux 』重新理解挂起状态

news2024/12/25 8:59:59

文章目录

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


🦄 前言

请添加图片描述

『 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.coloradmin.cn/o/1310690.html

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

相关文章

【计算机组成体系结构】只读存储器ROM

一、ROM分类 二、计算机中重要的ROM 运行时操作系统在主存中,但是由于RAM断电后数据会丢失,所以操作系统都存储在辅存中,在开机时由CPU读入主存,而BIOS芯片就是用来存储自举装入程序的,它用于开机时引导把操作系统装入…

VS2022 将项目打包,导出为exe运行

我有一个在 VS2022 上开发的程序,基于.net 6框架, 想打包成 .exe程序,以在另一个没有安装VS的机器上运行,另一个机器是Win7系统,上面安装了.net 6框架。 虽然网上很多教程,需要安装Project Installer,配置A…

element日历组件只显示月和日,把年份隐藏掉

最终效果: 把年份和旁边的两个小标志小标去掉, 也就是把这红色框框内的内容隐藏掉 我们先用控制台看看里面具体的样式 1、可以看到 class “el-date-picker__header” 的 div是控制日历组件的标题的,div里面的button和span就是对应标题里面…

k8s部署nacos

先决条件: 这里的存储使用的是storageClass,所以要预先将storageClass(nfs)部署完成详情参见: k8s-StoargClass的使用-基于nfs-CSDN博客 因为nacos数据存储依赖于mysql.所以要预先部署MySQL,然后再部署nacos 部署mysql使用的pvc [rootmaster /devops/nacos/mysql]$cat mysql…

平头哥玄铁系列 RISC-V 芯片及开发板

1、玄铁 9 系列概述 玄铁 8 系列 基于C-SKY架构,玄铁 9 系列基于 RISC-V 架构。E 系列为 RISC-V 32 位,C 系列为 RISC-V 64 位。 E902:超低功耗 RSIC-V 架构处理器 E902 采用 2 级极简流水线兼容 RISC-V 架构且对执行效率等方面进行了增强&a…

ISP-EE(Edge Enhance)

ISP-EE(Edge Enhance) EE模块在某些ISP主控中叫做sharpness或者sharpen,这些名称指代的模块是同一个,不用再纠结。主要就是在YUV域内弥补成像过程中图像的锐度损失,对边缘和细节进行加强,从而恢复场景本应具有的自然锐度。 锐度…

思福迪运维安全管理系统 test_qrcode_b RCE漏洞复现

0x01 产品简介 思福迪运维安全管理系统是思福迪开发的一款运维安全管理堡垒机。 0x02 漏洞概述 由于思福迪运维安全管理系统 test_qrcode_b路由存在命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限&#…

电子元器件介绍——电阻(一)

电子元器件 文章目录 电子元器件前言1.1电阻基本知识1.2电阻的作用1.3电阻的分类1.4 贴片电阻贴片电阻的规范、尺寸、封装 1.5 技术参数噪声: 1.6 电阻的失效 总结 前言 接下来我们就把常用的电子元器件全部介绍给大家,这一节是电阻,电容电感…

springboot使用EasyExcel导出数据

springboot使用EasyExcel导出数据 简介:本文主要描述使用EasyExcel导出数据的简单流程,事实上企业需求一般都比较简单,就是表单数据输出到Excel即可,如果数据量大的话,为了避免占用内存过高或者OOM,使用多…

网工内推 | IT经理,50k*14薪,NP以上即可,七险一金

01 海天瑞声 招聘岗位:IT经理 职责描述: 1、IT基础架构的方案制定、实施和日常维护,包括机房建设运维、服务器配置及运维、网络规划及运维、上网行为管理、电话、电话、监控、门禁等各类弱电系统搭建及运维 2、负责公司环境及网络安全防御体…

RabbitMQ 如何保证消息可靠性

RabbitMQ 如何保证消息可靠性 1. 保证生产者可靠1.1 生产者确认机制1.2 实现生产者确认1.2.1 开启生产者确认机制1.2.2 定义ReturnCallback1.3.3.定义ConfirmCallback 1.3 注意 2. 保证MQ可靠2.1 数据持久化2.1.1 交换机持久化2.1.2.队列持久化2.1.3 消息持久化2.1.4 注意 3. 保…

ThingWorx/Vuforia—工业物联网和AR平台

产品概述 ThingWorx是美国PTC公司旗下的一款物联网和AR平台,它提供了适用于IoT的开发工具和能力,使开发者可以为工业物联网快速构建和部署变革性的智能互联解决方案,使创新者能够快速为当今的智能互联世界提供优异的应用程序、解决方案和用户…

自动机器学习是什么?概念及应用

自动机器学习 (Auto Machine Learning) 的应用和方法 随着众多企业在大量场景中开始采用机器学习,前后期处理和优化的数据量及规模指数级增长。企业很难雇用充足的人手来完成与高级机器学习模型相关的所有工作,因此机器学习自动化工具是未来人工智能 (A…

装机DIY-配件价格比较

计算机配件价格比较 🚀🚀🚀🚀最近无事总刷到DIY装机视频,自己也有兴趣,同时这段时间也在学前端,发现每次比较价格都有重新搜,重新计算,且不同配置也不好比较&#xff0c…

【毕业设计】基于STM32的智能衣柜设计

1、功能说明 功能如下: 1、用stm32控制ds18b20采集温度 2、然后按键可以设置上下限温度, 3、采集的温度低于下限温度时候 打开加热片开始加热, 4、加热到上限温度关闭加热片停止加热, 5、采集的温度可以在oled显示, 6、然后弄个按…

c语言:指针运算

目录 指针类型与整型进行加减 规律 同类型指针减法运算 其他类型的指针运算 一个数据对象的内存位置有两个重要信息: 数据对象的首地址。数据对象占用存储空间大小 指针类型的值存储的是内存地址。内存地址是从0开始,依次加1的整型数据。 指针类…

单元测试二(实验)-云计算2023.12-云南农业大学

1、实践系列课《深入浅出Docker应用》 https://developeraliyun.com/adc/scenarioSeries/713c370e605e4f1fa7be903b80a53556?spma2c6h.27088027.devcloud-scenarioSeriesList.13.5bb75b8aZHOM2w 容器镜像的制作实验要求 创建Dockerfile文件: FROM ubuntu:latest WORKDIR data…

Git应用——代码提交规范 feat ,fix ,style

当前使用 feat 增加新功能fix 修复问题/BUGstyle 代码风格相关无影响运行结果的perf 优化/性能提升refactor 重构revert 撤销修改test 测试相关docs 文档/注释chore 依赖更新/脚手架配置修改等workflow 工作流改进ci 持续集成types 类型定义文件更改wip 开发中 别处看到 fea…

玩转大数据14:分布式计算框架的选择与比较

1. 引言 随着大数据时代的到来,越来越多的企业和组织需要处理海量数据。分布式计算框架提供了一种有效的方式来解决大数据处理的问题。分布式计算框架将计算任务分解成多个子任务,并在多个节点上并行执行,从而提高计算效率。 2. 分布式计算…

【操作系统导论】内存篇——分页

引入 采用 「分段」 的方式,将空间切成 不同长度的分片,会出现 碎片化 问题,随着时间推移,分配内存会越来越困难。 因此,值得考虑「分页」的方法: 将空间分割成 固定长度的分片 ; 将物理内存…