【Linux系统】页表的存在位 与 OS的按需加载策略




在这里插入图片描述



一、引入


加载程序会将程序代码全部从磁盘中加载进内存吗?

为什么你的电脑的运存只有16GB,但你可以运行上百GB的游戏,如黑神话马喽?

这就涉及到 操作系统的按需加载策略


二、页表的存在位


页表的一个标志位:存在位 isexists (is exeist),用于表示该页面是否已经加载到内存中,如果 isexists 为 false,表示该页面尚未加载到内存中;如果 isexists 为 true,表示该页面已经在内存中。

当一个进程试图访问一个存在位为 0 的页面时,硬件会生成一个缺页中断,操作系统会处理这个中断,并进行重新加载磁盘内存与判断非法访问等操作。



三、按需分页概念


        在现代操作系统中,程序并不会在运行时一次性将所有代码和数据从磁盘加载到内存中。相反,操作系统采用了一种叫做**按需分页(Demand Paging)**的技术来管理内存,这种技术可以显著减少程序启动时所需的内存开销,并提高系统的整体性能。

1、按需分页

        按需分页是一种内存管理技术,它只有在实际需要访问某个页面时才会将该页面从磁盘加载到内存中。具体来说,当程序尝试访问一个尚未加载到内存中的页面时,硬件会产生一个缺页中断(Page Fault),操作系统会捕获这个中断,并负责将请求的页面从磁盘加载到内存中。


比如你正在玩“黑神话马喽”,整个游戏的总资源大小为130GB,但你的电脑只有16GB的内存。以下是你玩游戏时可能发生的情况:

  1. 启动游戏:游戏启动时,操作系统只加载必要的初始化代码和资源,这部分可能只需要几十MB的内存。
  2. 进入游戏:当你进入游戏的第一个场景(如黑风山),操作系统会根据需要加载该场景的资源。这些资源可能包括地图数据、角色模型、纹理等。
  3. 移动到新场景:当你从黑风山移动到黄风岭时,操作系统会卸载黑风山的资源,并加载黄风岭的资源。这个过程中可能会发生多次页面故障,但操作系统会按需加载所需的资源。
  4. 内存管理:在游戏运行过程中,操作系统会不断监控内存使用情况。如果内存不足,它会将不常用的页面换出到交换分区,以释放内存空间,这里就涉及到 页面置换(后面章节有讲解)

若游戏运行卡顿,可能是因为物理内存资源不充足,影响到系统调度进程,同时游戏资源大,需要不断和磁盘进程IO交互(和磁盘IO交互本就耗时)。



2、缺页中断处理流程

【Linux系统】缺页中断机制-CSDN博客



四、按需分页可能会导致性能下降:功大于过


        按需分页(Demand Paging)确实有可能导致程序在运行时偶尔出现性能下降的情况,尤其是在首次访问未加载到内存中的页面时。然而,这种技术带来的好处远远超过了潜在的负面影响。下面是按需分页可能导致性能下降的原因及操作系统是如何缓解这些问题的:


1、可能导致的性能下降原因

⭐🚩精华:处理中断耗时、磁盘IO耗时、额外上下文切换耗时

  1. 缺页中断:当程序访问一个尚未加载到内存中的页面时,会产生一个缺页中断。处理这个中断需要一定的时间,包括从磁盘读取页面数据并将其加载到内存中。
  2. 磁盘 I/O 开销:从磁盘读取数据通常比从内存读取要慢得多。因此,频繁的磁盘 I/O 操作可能会导致程序运行速度减慢。
  3. 上下文切换:在处理缺页中断期间,操作系统可能会暂时挂起当前进程,并调度其他进程运行,这会导致额外的上下文切换开销。

2、操作系统的缓解措施

⭐🚩精华:提前加载、缓存用过的、先调度别人

为了减轻按需分页可能带来的性能影响,操作系统采取了多种策略和技术:

  1. 预读取(Prefetching):操作系统可以预测程序将来可能会访问的页面,并提前将这些页面从磁盘加载到内存中。这样可以减少实际发生缺页中断的情况。
  2. 高速缓存(Caching):操作系统维护了一个高速缓存系统,用于存储最近使用过的页面。这样,当程序再次访问同一个页面时,可以从高速缓存中快速获取,而不需要再次从磁盘读取。
  3. 智能调度(Smart Scheduling):操作系统在调度进程时会考虑当前进程的活动模式。例如,在处理缺页中断时,操作系统可能会优先调度那些等待 I/O 完成的进程,而不是立即恢复当前进程的执行。
  4. 页面置换算法(Page Replacement Algorithms):操作系统使用高效的页面置换算法(如 LRU 最近最少使用算法)来决定哪些页面应该被替换出内存。这有助于保持最常使用的页面始终驻留在内存中。

3、实际效果

尽管按需分页可能会在某些情况下导致短暂的性能下降,但在大多数情况下,它带来的好处远大于这些负面影响:

  • 内存利用率高:由于不是一次性加载所有页面,内存可以被更高效地利用,更多的进程可以同时运行而不必担心内存不足的问题。
  • 快速启动:程序可以在较少的内存资源下快速启动,因为只有真正需要的页面才会被加载。
  • 节省磁盘 I/O:由于不是所有页面都需要频繁访问,磁盘 I/O 的次数可以大大减少,从而提高整体系统性能。


五、页面置换:舍小保大

        当操作系统接收到一个缺页中断,并且发现没有足够的物理内存空间来加载新的页面时,它会采取一系列措施来腾出物理内存空间。这一过程通常被称为页面置换(Page Replacement)。页面置换的目标是在尽可能不影响系统性能的前提下,选择合适的页面从物理内存中移除(换出)以腾出空间。


1、页面置换的基本步骤

⭐🚩精华:要多大,选择舍谁,舍掉放到swap,加载新的


  1. 确定需要腾出的空间:操作系统首先确定需要多少物理内存空间来满足新的页面加载需求。
  2. 选择页面置换算法:操作系统会根据所使用的页面置换算法来决定哪些页面应当被移出物理内存。常见的页面置换算法包括:
    • 最近最少使用(LRU, Least Recently Used):选择最近最少使用的页面进行换出。
    • 先进先出(FIFO, First In First Out):选择最早进入内存的页面进行换出。
  3. 页面标记和选择:根据选定的页面置换算法,操作系统会对内存中的页面进行标记,并选择需要换出的页面。
  4. 页面换出(Page Swap Out):操作系统将选中的页面从物理内存中移出,并保存到磁盘上的交换区(Swap Space)中。交换区通常是硬盘上的一个分区或文件,专门用来存储暂时不用的内存页面。
  5. 页面换入(Page Swap In):一旦腾出了足够的物理内存空间,操作系统就可以将新请求的页面加载到物理内存中,并更新页表,以便后续的访问可以直接命中内存。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webpack 老项目升级记录:从 node-sass 限制的的 node v8 提升至支持 ^node v22

老项目简介 技术框架 vue 2.5.17webpack 4.16.5"webpack-cli": "3.1.0""node-sass": "^4.7.2" 几个阶段 第一步:vue2 升级到最新 第一步:升级 vue2 至最新版本,截止到目前(2024-10-…

【vim】手动安装 Leader-F

LeaderF 是一个功能强大的 Vim 插件,主要用于快速导航和搜索。它可以帮助用户在 Vim 中高效地查找文件、缓冲区、标签、函数等各种元素,极大地提高了编辑效率。 LeaderF 的安装如果按照仓库中的教程来的话可以很方便的实现安装,这里介绍一下…

面试官:常见的网络攻击手段有哪些?解决方案了解吗?零基础入门到精通,收藏这一篇就够了

引言:由于互联网和信息技术的高速发展,网络安全变得尤为重要,如果不熟悉常见的网络攻击手段,就会造成数据泄漏、信息安全问题、乃至国家安全问题,本文就来介绍下常见的网络攻击手段和一些防范措施。 题目 面试官&…

深入理解值类型和引用类型的存储

目录 内存 存储 1)栈区 2)堆区 C#的编译过程 1)源代码 2)公共语言规范(Common Language Specification,CLS) 编译 3)通用中间语言(Microsoft Intermediate Language,CIL或MSIL) 4&…

从陌生到信赖,3款AI写作助手教会了我何为真诚的表达

现在信息多得不得了,写作已经不是只有人才能干的事了。人工智能技术发展得特别快,AI写作助手也开始帮我们写东西了。一开始,我对这些AI助手挺好奇的,后来用着用着就越来越信任它们,甚至有点离不开了。我用的那三款AI写…

ONLYOFFICE 文档8.2版本已发布:PDF 协作编辑、改进界面、性能优化等更新

ONLYOFFICE 在线编辑器最新版本已经发布,其中包含30多个新功能和500多个错误修复。阅读本文了解所有更新。 关于 ONLYOFFICE 文档 ONLYOFFICE 是一个开源项目,专注于高级和安全的文档处理。坐拥全球超过 1500 万用户,ONLYOFFICE 是在线办公领…

Python日志记录库——loguru

知识星球:知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具知识星球是创作者连接铁杆粉丝,实现知识变现的工具。任何从事创作或艺术的人,例如艺术家、工匠、教师、学术研究、科普等,只要能获得一…

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法,它们不仅帮助我们理解和描述复杂系统的行为,还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发,逐步深入到各种优化算法,并探讨它们在实际问题中的应用。 思维导图文件可获取:https:…

如何指定 Maven 的 JDK 版本?

maven 路径:/data/maven/ jdk 路径:/data/jdk_1.8 1、修改 mvn 可执行文件并指定 JDK 版本 vim /data/maven/bin/mvn # 在开头新增即可... # zhurs add JAVA_HOME PATH JAVA_HOME/data/jdk_1.8 ...保存退出即可! 为什么在此处新增&#x…

C/C++(六)多态

本文将介绍C的另一个基于继承的重要且复杂的机制,多态。 一、多态的概念 多态,就是多种形态,通俗来说就是不同的对象去完成某个行为,会产生不同的状态。 多态严格意义上分为静态多态与动态多态,我们平常说的多态一般…

【博客节选】Unity角色异常抖动问题排查

本文截取自本人文章 :【Unity实战笔记】第二一 基于状态模式的角色控制——以UnityChan为例 发现出现角色抖动问题 尝试解决方法: 跳跃的loop time不要勾选; 相机aim添加垂直阻尼 还是不行,仔细查看是位移时震颤。 UnityCha…

两个mp3音频怎么合成一个?音频合成的多个好用方法教程

两个mp3音频怎么合成一个?在数字音频时代,随着各类音频内容的日益丰富,合并音频文件的需求也愈发突出。无论是为了制作连贯的音乐集,还是为了解决某些场合下音频播放的便利性,将两个或多个MP3音频合并在一起&#xff0…

【C++面试刷题】快排(quick_sort)和堆排(priority_queue)的细节问题

一、快排的快速选择算法两种思路(面试会考)O(N) 快排的三数取中思路: 重要的是将它三个数进行排序最左为最小,中间为次小,最右为最大的数。(错误原因:我刚开始没有将这三个数进行排序&#xff…

Notepad++通过自定义语言实现日志按照不同级别高亮

借助Notepad的自定义语言可以实现日志的按照不同级别的高亮&#xff1b; 参考&#xff1a; https://blog.csdn.net/commshare/article/details/131208656 在此基础上做了一点修改效果如下&#xff1a; xml文件&#xff1a; <NotepadPlus><UserLang name"Ansibl…

洞察数据之美:用可视化探索销售与温度的关系

目录 数据可视化1.气温数据可视化图片展示将最高和最低气温合并绘制折线图&#xff1a;将最高和最低气温合并绘制散点图&#xff1a; 2.销售数据可视化几种常见的销售数据可视化方法及其适用场景&#xff1a;图片展示通过热力图和堆叠柱状图的直观展示&#xff0c;可以得出以下…

CAS简介

#1024程序员节&#xff5c;征文# CAS是什么&#xff1f; CAS&#xff08;Compare And Swap&#xff09;&#xff0c;即比较与交换&#xff0c;是一种乐观锁的实现方式&#xff0c;用于在不使用锁的情况下实现多线程之间的变量同步。 CAS操作包含三个操作数&#xff1a;内存位…

【Nginx】win10 安装Nginx

1.下载 nginx: download 2.安装 解压即可 3.启动 可以自己修改端口&#xff0c;conf/nginx.conf 确保端口不被占用cmd启动&#xff08;不要双击nginx.exe启动&#xff0c;至于原因我粘贴一下&#xff09; start nginx.exe 可以看到是后台运行&#xff0c;还不错 访问&…

易基因:Nat Commun:ATAC-seq等揭示恒河猴大脑高分辨率解剖区域的转录组和开放染色质图谱

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 恒河猴是神经科学研究中常用的模型动物&#xff0c;其大脑结构和功能与人类大脑相似。大脑中复杂的遗传网络是灵长类动物行为、认知和情感的基础&#xff0c;一直是神经科学的核心。大脑…

全面了解MindSporeLite轻量化推理工具(概念版)

一、参考资料 技术干货&#xff5c;极速、极智、极简的昇思MindSpore Lite&#xff1a;助力华为Watch更加智能 二、相关概念 MCU MCU的全称是Microcontroller Unit&#xff0c;中文可以称为微控制器或者单片机。MCU既可用于汽车电子、工业控制等领域&#xff0c;也可应用于…

Docker入门之构建

Docker构建概述 Docker Build 实现了客户端-服务器架构&#xff0c;其中&#xff1a; 客户端&#xff1a;Buildx 是用于运行和管理构建的客户端和用户界面。服务器&#xff1a;BuildKit 是处理构建执行的服务器或构建器。 当您调用构建时&#xff0c;Buildx 客户端会向 Bui…