虚拟内存【Linux】

虚拟内存

  • 为什么需要虚拟内存
  • Linux虚拟内存的结构
    • 32位系统下的虚拟地址空间
    • 64位系统下的虚拟地址空间
    • 页表
    • 多级页表
    • TLB
  • 流程
  • 虚拟内存的作用

为什么需要虚拟内存

  为了在进行多进程编码进行内存访问的时候保持内存的隔离性,数据安全性,所以出现了虚拟内存。举一个例子:
  如果没有虚拟内存,我们在编码一个程序的时候将数据写在了编号为1000的物理内存上,当我们编码另外一个程序的时候,就需要注意,避免写入或修改上一个程序在编号为1000的物理内存处的数据,当已经有了几百个程序对物理内存进行过读写时,我们在进行内存读写的时候就会变得格外困难(因为需要避免覆写已经有数据的物理内存空间)。
  所以虚拟内存的出现解决了这个问题。

Linux虚拟内存的结构

  每一个进程都会分配一个独立的虚拟内存空间,独立的页表。不同的进程拥有相同结构的虚拟内存空间。分为32位和64位系统的虚拟地址空间。
在这里插入图片描述

32位系统下的虚拟地址空间

在这里插入图片描述
  可以看的出来,内核空间位1G,用户空间为3G。

64位系统下的虚拟地址空间

在这里插入图片描述

  进入内核态的时候使用内核空间,进入用户态的时候使用用户空间,比如使用系统调用的时候就会进入内核态,发生缺页中断也会进入内核态。
  不同进程的内核空间都是统一的,不同进程的用户空间都是独立的。
在这里插入图片描述

页表

  虚拟空间是通过页表,就能通过虚拟地址,得到物理内存上的物理地址,从而进行对物理内存上的读写。
  页表是存储在内核空间的,而内核空间是当操作系统启动的时候就加载到物理内存上的,一般不会进行内存交换。
在这里插入图片描述
  页表可以像上图一样理解,虚拟地址和物理地址一一映射,除了这个,其他的页表项,比如有效位可以分辨该空间是否被使用,读写权限可以保障数据的安全性。

多级页表

  虚拟内存和物理内存一定得是一一对应的,但是如果4Gb的物理内存和虚拟内存都一一映射的话,就会导致页表过于庞大。为了解决这个问题,引入了多级页表。如下图所示:
在这里插入图片描述
  但是如果多个进程都要实现自己的虚拟内存和物理内存一一映射的话,那么就算是多级页表,也会使得存储在内核空间的多进程的页表十分庞大。通过局部性原理我们知道,经常使用访问的数据大部分时候都是集中在那么几块页中,因此我们运行程序的时候不需要将全部程序都加载进内存中,需要时再换入,内存紧张时再换出到磁盘,这就使得每一个进程实际使用的物理内存空间不大,相应的,所需要的页表也就不需要那么多。这带来的好处就是进程使用的内存可以大于实际的物理内存。

TLB

  多级页表在检索的时候也会出现效率低下的问题,并且由于局部性原理,我们可以将一些常访问的页表项存储带I/O效率更快的硬件TLB(也叫做快表)中,这样就可以解决上述问题。

流程

  1. cpu拿到虚拟内存中的虚拟地址。
  2. 通过MMU(内存管理单元)查询TLB中的页表项是否含有该虚拟地址到物理地址的映射,如果有,直接返回,如果没有,MMU则查询页表。
  3. 如果在页表中查询到该虚拟地址到物理地址的映射,则直接返回,如此,cpu就拿到了相应的物理地址,可以进行操作。否则,cpu会触发一个缺页中断,然后操作系统会将磁盘上相应的页加载进物理内存,并且更新页表,将新加载进物理内存的页面进行同虚拟内存的映射。
  4. 然后回到第3步,MMU重新查询页表,此时已经有了映射,cpu成功拿到物理地址。

虚拟内存的作用

  1. 使得进程使用的内存空间大于物理内存实际的空间。
  2. 每个进程拥有独立的虚拟内存,在多进程的情况下,使得进程之间不会访问到除自己内存空间外的地址,解决了多进程地址冲突的问题。
  3. 页表项中还含有一些表明页面属性的项,比如读写权限,有效位,使得我们不可以随意访问一些不可修改的页, 增加了数据的安全性。
  4. 每一个进程都拥有相同的虚拟地址空间,使得我们对于内存管理更加容易了,减少了代码的错误和地址的冲突。

      😄 创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看😄

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

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

相关文章

PPI(每英寸像素数)、DPI(每英寸点数)和Pixel(像素)的区别和联系?

一、定义 PPI、DPI和Pixel是图像处理、打印和显示领域中常用的三个概念,它们之间既有区别又有联系。以下是对这三个概念进行分别讲解: 1. PPI(Pixels Per Inch)-即每英寸像素数,是图像分辨率的一种表示方…

(补充):java各种进制和文本、图像、音频在计算机中的存储方式

文章目录 前言一、进制1 逢几进一2 常见进制在java中的表示3 进制中的转换(1)任意进制转十进制(2)十进制转其他进制二、计算机中的存储1 计算机的存储规则(文本数据)(1)ASCII码表(2)编码规则的发展演化2 计算机的存储规则(图片数据)(1)分辨率、像素(2)黑白图与灰度…

科技日报社激发数据要素价值,树立媒体行业数字化转型标杆

更多案例研究与行业报告,请前往爱分析官网 媒体行业企事业单位在数据要素领域得天独厚,日积月累的新闻报道、媒资素材、读者反馈和市场研究,沉淀出属于它们的“数据金矿”。 但是,多数相关单位尚未重视和发挥数据要素价值&#…

LLM应用构建前的非结构化数据处理(三)文档表格的提取

1.学习内容 本节次学习内容来自于吴恩达老师的Preprocessing Unstructured Data for LLM Applications课程,因涉及到非结构化数据的相关处理,遂做学习整理。 本节主要学习pdf中的表格数据处理 2.环境准备 和之前一样,可以参考LLM应用构建前…

车载聚合路由器应用场景分析

乾元通QYT-X1z车载式1U多卡聚合路由器,支持最多8路聚合,无论是应急救援,还是车载交通,任何宽带服务商无法覆盖的区域,聚合路由器可提供现场需要的稳定、流畅、安全的视频传输网络,聚合路由器可无缝接入应急…

Flutter-实现物理小球碰撞效果

效果 引言 在Flutter应用中实现物理动画效果,可以大大提升用户体验。本文将详细介绍如何在Flutter中创建一个模拟物理碰撞的动画小球界面,主要代码实现基于集成sensors_plus插件来获取设备的加速度传感器数据。 准备工作 在开始之前,请确保在pubspec.yaml文件中添加senso…

未羽研发测试管理平台

突然有一些觉悟,程序猿不能只会吭哧吭哧的低头做事,应该学会怎么去展示自己,怎么去宣传自己,怎么把自己想做的事表述清楚。 于是,这两天一直在整理自己的作品,也为接下来的找工作多做点准备。接下来…

rsync远程同步--累了,明天继续再写~。

rsync官网链接 rsync(Remote Sync,远程同步)开源快速备份工具,是一个用于本地和远程文件同步的Unix-like命令行程序。它使用“快速数据传输算法”,只发送源和目标之间的差异,因此数据传输非常高效。 可以在不同主机之间镜像同步整 个目录树…

[安洵杯 2019]easy_serialize_php

源码&#xff1a; <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user"] guest; …

JRE、JVM、JDK分别是什么。

JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包&#xff0c;它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器&#xff08;javac&#xff09;、Java 运行时环境&…

VUE中ECharts提示框tooltip自动切换

目录 前言1导入插件2定义参数3 插件API 前言 使用VUE开发的数据大屏统计&#xff0c;又需要将 echarts的提示框 tooltip 实现自动切换&#xff0c;网上有个很简单的插件&#xff08;echarts-tooltip-auto-show&#xff09;&#xff0c;使用教程简单分享给大家。 自动每隔几秒切…

LeetCode热题100刷题10:46. 全排列、78. 子集、17. 电话号码的字母组合、39. 组合总和、138. 随机链表的复制

回溯问题 46. 全排列 全排列问题&#xff1a; path 递归终止条件&#xff1a;path中是否已存储所有元素&#xff1b; for循环处理节点集合&#xff1a;used0未被使用的元素 class Solution { public:vector<int> path;vector<vector<int>> res;void backt…

【深度学习基础】MAC pycharm 专业版安装与激活

文章目录 一、pycharm专业版安装二、激活 一、pycharm专业版安装 PyCharm是一款专为Python开发者设计的集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在帮助用户在使用Python语言开发时提高效率。以下是对PyCharm软件的详细介绍&#xff0c;包括其作用和主要功能&…

『大模型笔记』GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布

GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布 文章目录 一. GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布1. 评估和结果2. 研究见解和未来方向二. 参考文献一. GraphRAG:用于复杂数据发现的新工具现已在GitHub上发布 下载 GraphRAG今年早些时候,我们介绍…

Qt Creator仿Visual Studio黑色主题

转自本人博客&#xff1a;Qt Creator仿Visual Studio黑色主题 1.演示 配置文件和步骤在后面&#xff0c;先看成品&#xff0c;分别是QWidget和QML的代码编写界面&#xff1a; 2. 主题配置文件 下载链接&#xff1a;QtCreator _theme_VS_dark.xml 也可以自己新建一个xml文件&…

【每日一练】python基础入门实例

""" 幼儿园加法练习题 题数不限 每满100分奖励10个棒棒糖 要求&#xff1a; 1.使用三目运算符与基础运算的对比 2.随机数字相加 3.调用函数 4.循环执行练习题 5.有计算分数 6.有时间停止休眠 """ #导入随机模块 import random #导入时间模块 imp…

Data-Juicer:阿里巴巴荣誉出品的大模型数据清洗框架

Diffusion Models专栏文章汇总:入门与实战 前言:如何优雅地进行大规模数据清洗是一门艺术,特别对于大模型,数据的质量是决定模型成功最关键的因素之一。阿里巴巴最近开源了一项专门针对大语言模型和视频生成大模型的数据清洗框架,值得关注! 目录 主要特点 数据处理 分…

2.17分一区文献精读:机器学习:乳腺癌预后预测的统计和机器学习模型的开发及内外部验证:队列研究-摘要

#精医求精&#xff0c;文献阅读 大家好&#xff0c;我是蔡老师&#xff0c;一个立志学会所有医学大数据分析模型的女子 今天我们从文献阅读开始 这篇文章的影响因子为17分&#xff0c;全文名称为《Development and internal-external validation of statistical and machine l…

如何让 3D 数字孪生场景闪闪发光

今日图扑软件功能分享&#xff1a;我们将探讨 HT 系统如何通过分组管理灯光、裁切体和流光&#xff0c;以提高场景光影效果的精准度和整体可控性。 HT 中的灯光、裁切体、流光是会影响它所在区域一定范围内的其他节点的表现&#xff0c;如 场景中有个 A 灯光&#xff0c;默认情…

C++入门基础(2)

目录 一、引用: 1、定义&#xff1a; 2、特性&#xff1a; 3、引用的使用&#xff1a; 4、const引用&#xff1a;控制权限 const引用定义: const引用可以接收3种对象&#xff1a; 1、正常对象&#xff1a; 2、临时对象&#xff1a; 3、const对象&#xff1a; 总结&…