虚拟内存原理介绍

news2024/11/26 20:19:49

文章目录

    • 1. 虚拟内存介绍
    • 2. 虚拟寻址
    • 3. 虚拟地址空间
    • 3. 页表
    • 4. 地址翻译
    • 5. TLB加速地址翻译
    • 6. 多级页表
    • 7. 页面置换算法

1. 虚拟内存介绍

我们知道系统中的所有进程都是共享CPU和主存资源,但这样就会存在一个问题,这么多进程怎么知道主存上的一块内存是已分配给了其它进程还是空闲状态。所有我们需要一种机制来专门负责操作系统上内存资源的管理,而虚拟内存就充当这样一个角色。

虚拟内存是操作系统提供的一种内存管理技术,是对主存的一种抽象。由硬件异常、硬件地址翻译、主存、磁盘文件和内核软件的完美交互,它为每个进程提供了一个大的、一致的和私有的地址空间。

虚拟内存提供了三个重要的能力:

  1. 它将主存看成是一个存储在磁盘上的地址空间的高速缓存,在主存中只保存活动区域,并根据需要在磁盘和主存之间来回传送数据,通过这种方式,它高效地使用了主存。
  2. 它为每个进程提供了一致的地址空间(如每个进程的地址空间都是[0, 4G]),从而简化内存管理。
  3. 它保护了每个进程的地址空间不被其他进程破坏:1)每个进程只能使用它已分配的内存,否则会出现“段错误”;2)页表为每块虚拟内存指定了访问权限,如果权限不对会出现“保护错误”;3)CPU引用不在主存上的虚拟页会触发缺页中断,中断处理程序会把主存中牺牲也换出到磁盘中。

2. 虚拟寻址

CPU 直接访问内存的方式就是使用物理地址,我们把这种方式称为物理寻址 (physical addressing),然而,现代处理器使用的是一种称为虚拟寻址 (virtual addressing) 的寻址形式,使用虚拟寻址, CPU 通过生成一个虚拟地址 (Virtual Address, VA) 来访问主存,这个虚拟地址在被送到内存之前先转换成适当的物理地址 个虚拟地址转换为物理地址的任务叫做地址翻译 (address translation) 。地址翻译需要 CPU 硬件和操作系统之间的紧密合作。 CPU 芯片上叫做内存管理单元 (Memory Management Unit,MMU) 的专用硬件,利用存放在主存中的查询表来动态翻译虚拟地址,该表的内容由操作系统管理。
在这里插入图片描述

3. 虚拟地址空间

虚拟地址和物理地址是一样,是一个非负整数的地址空间集合{0, 1, 2, …, N - 1},这个地址空间集合就是虚拟地址空间(virtual address space)。一个地址空间的大小是由表示最大地址所需要的位数来描述的。例如,一个包含 N = 2 n 2^{n} 2n个地址的虚拟地址空间就叫做一个n位地址空间,由此可知一个32位的系统最多支持 2 32 2^{32} 232= 4GB大小地址。

虚拟页:

同时我们要知道**虚拟内存被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组。**每字节都有一个唯一的虚拟地址,作为到数组的索引。磁盘上数组的内容被缓存在主存中。

操作系统把虚拟内存划分成一个个大小固定的虚拟页(Virtual Page, VP),类似地,物理内存被分割大小固定且相等的物理页 (Physical Page, PP) 也被称为页帧 页框(page fram )。页面大小可以使用sysconf(_SC_PAGESIZE)查看。

对于虚拟机往往会有下面三种状态:

  • 未分配:系统还未分配(或者创建)的页。未分配的块没占用任何数据和它们相关联,因此也就不占用任何磁盘空间。
  • 已缓存:当前已缓存在物理内存(主存)中的已分配页。
  • 未缓存:未缓存在物理内存中的已分配虚拟页。

如下图,虚拟页0,3还没有被分配,因此在磁盘上还不存在。虚拟页1,4和6 被缓存在物理内存中。页2、5和7已经被分配了,但是当前并未缓存在主存中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GtQjcmm8-1685111385108)(https://secure2.wostatic.cn/static/4aWscciPAXfNPx8mKnmEVA/image.png?auth_key=1685111151-eu9n7Fj4b8jCphKb8ensX9-0-4dc01b6010a54eefcc734509fd511a6a)]

3. 页表

页表就是一个**页表条目 **(Page Table Entry,PTE) 的数组,用来记录虚拟地址和物理地址之间的映射关系。每次将虚拟地址时转换为物理地址时都会读取页表。页表的内容由操作系统负责维护。

虚拟地址空间中的每个页在页表中一个固定偏移量处都有一个页表条目(PTE),每个PTE都记录一个有效位(表示该页是否缓存在主存中)、虚拟页在物理页中的起始地址和页表的访问权限(READ、WRITE、SUP)等等信息。
在这里插入图片描述

4. 地址翻译

上面介绍的都是地址翻译的基础知识,下面介绍系统是如何实现虚拟地址到物理地址之间转换的。

前面我们介绍了虚拟页面分为三种状态:未分配、已缓存和未缓存,其中如果CPU引用到了未缓存的虚拟页,而该页在主存中并未分配,这种情况我们称为缓存不命中(不命中的虚拟页会有缺页中断处理程序帮忙处理,处理完后的虚拟页会变成已缓存状态),相反如果虚拟页存在缓存中也就是已缓存的虚拟,CPU访问时我们可以说缓存命中。而对于命中和不命中地址翻译流程如下:

缓存命中:

在这里插入图片描述

注:VA :虚拟地址, PTEA: 页表条目地址,PTE: 页表条目,PA: 物理地址

  • 第一步:处理器生成一个虚拟地址,并把它传送给 MMU。
  • 第二步:MMU 生成 PTE 地址,并从高速缓存/主存请求得到它。
  • 第三步:高速缓存/主存向 MMU 返回 PTE。
  • 第四步:MMU 构造物理地址, 并把它传送给高速缓存/主存。
  • 第五步:高速缓存/主存返回所请求的数据字给处理器。

缓存不命中:
在这里插入图片描述

  • 第一步到第三步:和缓存命中流程的第一步到第三步相同。
  • 第四步:PTE 中的有效位是零,主存中未存储虚拟页,这时MMU 会触发了一次缺页异常,传递 CPU中的控制到操作系统内核中的缺页异常处理程序
  • 第五步:缺页处理程序会先确定出物理内存中的牺牲页,如果这个页面内容和磁盘内容一致(说明页面内容不是脏数据),则把它换出到缺页对应磁盘位置。
  • 第六步:缺页处理程序页面调入新的页面,并更新内存中的 PTE。
  • 第七步:缺页处理程序返回到原来的进程,再次执行导致缺页的指令。 CPU 将引起缺页的虚拟地址重新发送给 MMU。因为虚拟页面现在缓存在物理内存中,所以就会命中,在 MMU 执行了图中剩余步骤之后,主存就会将所请求字返回给处理器。

5. TLB加速地址翻译

在MMU中包含了一个PTE的小的缓存,称为**翻译后备缓冲器 **(Tranlation Lookaside Buffer, TLB),TLB是一个小的虚拟寻址缓存保存着PTE,当地址翻译时如果TLB命中则可以直接获取到物理内存地址,如果不命中则需要多执行一步去访问高速缓存/主存中的PTE,从中获取到物理地址。因为MMU位于芯片上,所以如果TLB命中的话会大大加快地址翻译速度。

以下是TLB命中时地址翻译过程:
在这里插入图片描述

  • 第1步:CPU 产生一个虚拟地址。
  • 第2步和第3步: MMU从TLB 中取出相应的 PTE。
  • 第4步: MMU 将这个虚拟地址翻译成一个物理地址,并且将它发送到高速缓存/主存。
  • 第5步:高速缓存/主存将所请求的数据字返回给 CPU。

当TLB 不命中时,MMU 必须从高速缓存/主存中取出相应的 PTE。新取出的 PTE 存放在 TLB 中,可能会覆盖—个已经存在的条目。
在这里插入图片描述

6. 多级页表

前面提到的都是一个单独的页表来进行地址翻译,对于这样的页表在一个32位的地址空间,4KB的页面和一个4字节的PTE,即使引用程序只引用了很小部分的虚拟内存,但是任然需要一个4MB ( 4 * 2 32 2^{32} 232/ 4KB)页表驻留在内存中。对于64位的系统来说将变得更加复杂。

所以采用了多级页表的形式,比如,一级页表的每个PTE负责映射虚拟地址空间中一个 4MB 的片(chunk),每个片又都由1024个连续的页面组成;二级页表中的每个PTE负责映射一个4KB 的虚拟内存页面。
在这里插入图片描述

这么做的有两个好处:

1)如果一级页表中的 PTE 是空的,那么二级页表就不会存在,这样可以节约大部分内存。

2)只有一级页表才要总是在主存中;虚拟内存系统可以在需要时创建、页面调入或调出二级页表;这就减少了主存的压力;只有最经常使用的二级页表才要缓存在主存中。

7. 页面置换算法

在磁盘和内存之间传送页的活动叫做交换 (swapping) 或者页面调度(paging) 。页从磁盘换入主存叫页面调入 ,从主存换出到磁盘叫页面调出 ,都是相对主存而言。

当系统物理内存用完时,页面就会在主存和磁盘之间频繁调入和调出,程序性能会出现明显的抖动,如果系统内存使用量超过了系统物理内存交换空间的总大小那么系统程序将会阻塞。由此也可知道程序的最大虚拟内存空间 = 物理内存+交换空间

当发生缺页中断时,虽然可以随机地选择一个页面来置换,但是如果每次都选择不常使用的页面会提升系统的性能。如果一个被频繁使用的页面被置换出内存,很可能它在很短时间内又要被调入内存,这会带来不必要的开销。人们已经从理论和实践两个方面研究出了很多算法,目前页面算法有下面几个:

  1. 最优页面置换算法
  2. 最近未使用页面置换算法
  3. 先进先出页面置换算法
  4. 第二次机会页面置换算法
  5. 时钟页面置换算法
  6. 最近最少使用页面置换算法
  7. 用软件模拟LRU
  8. 工作集页面置换算法
  9. 工作集时钟页面置换算法

在这里插入图片描述

具体算法原理见《现代操作系统》第3.4节。

本文主要参考书籍《深入理解计算机系统》。

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

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

相关文章

使用Java语言开发高效易用的--雅书阁商城管理系统

使用Java语言开发雅书阁商城管理系统 如果你正在寻找一种简单而优雅的方式来管理图书,那么使用Java语言开发雅书阁商城管理系统就是一个好选择。下面我们来详细介绍这个系统的开发过程。 效果展示 1.首页 2.注册界面 3.登录成功商城首页 4.购物车 5.电子书…

避开测试开发的常见陷阱:一份实战指南

陷阱一:过度依赖自动化测试 过度依赖自动化测试可能导致对复杂的用户交互和体验不够重视。自动化测试的力量在于它的一致性和覆盖广泛的可能性,但人工测试也同样重要,尤其是对于用户体验和复杂的用户交互。 示例:在一个电商网站…

ROS和ROS2使用

ubuntu20.04下安装qt5.12 https://blog.csdn.net/lj19990824/article/details/121013721 Ubuntu 20.04在桌面左侧边栏添加QT creator快捷图标 https://blog.csdn.net/kavieen/article/details/118695038 Qt和ROS:https://github.com/chengyangkj?tabrepositories…

操作系统原理 —— 内存覆盖与交换(十九)

什么情况下需要覆盖与交换 要弄清楚什么是覆盖与交换的概念,首先我们要知道在什么情况下才会使用到覆盖与交换。 在早期的计算机内存很小的时候,比如 IBM 推出的第一台 PC 机最大只支持 1 MB 大小的内存,因此会经常出现内存大小不够的情况&…

c++函数重载与运算符重载基础

什么是重载 重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。 重载的作用:重载函数常用来实现功能类似而所处理的…

【C语言】数组和字符串

目录 数组和字符串 概述 一维数组 一维数组的定义和使用 一维数组的初始化 数组名 二维数组 字符数组与字符串 字符数组与字符串区别 数组和字符串 概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来——称为数组。 数组就…

紧接上文,基于轻量级yolov5s模型开发构建手写甲骨文检测识别系统

在我之前的文章中,关于手写文字、手写数字、手写字母的检测识别相关的项目都有了不少的实践了,这里就不在赘述了,感兴趣的话可以自行移步阅读即可。 《基于轻量级目标检测模型实现手写汉字检测识别计数》 《python开发构建基于机器学习模型…

【ICEM CFD】导入模型后,即使勾选point和curve也看不到几何模型上的点和线

一、问题背景 导入模型后,即使勾选point和curve也看不到几何模型上的点和线。 二、解决办法 原来导入模型后,往往第一步最需要操作的是!!! 构建拓扑!!! Build Diagnostic Topolo…

完美解决safari、微信浏览器下拉回弹效果、包含微信小程序 webview 套H5页面下拉效果。

如题,解决微信小程序、公众号 下拉回弹橡皮筋效果, 屏蔽掉 “此网页由XXXXX提供”; // 禁止页面上下整体滑动 document.body.style.overflow "hidden"

基于Jmeter+ant+Jenkins+钉钉机器人群通知的接口自动化测试

前言 搭建jmeterantjenkins环境有些前提条件,那就是要先配置好java环境,本地java环境至少是JDK8及以上版本,最好是JAVA11或者JAVA17等较高的java环境,像jenkins这种持续构建工具基本都在向上兼容JAVA的环境,以前的JAV…

为什么网络安全人口很稀缺,招聘人数却很少?

2020年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢&#xff1…

常见数据库(MSSQL,Mysql,PostgreSQL,Oracle)安装注意事项

常见数据库安装注意事项 (原标题: DataWindowHTTP数据库安装) 转载请保留版权消息勿删除:(谢绝转载到任何文档网站!) blog.csdn.net/chengg0769 http://www.powerbuilder.ltd http://www.haojiaocheng.…

设计模式(行为型模式)之:Observer(观察者模式)

文章目录 动机使用场景代码实现类图结构模式分析: 动机 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” - 一个对象(目标对象)的状态改变,所有的依赖对象(观察者对象)都将得到通…

绝不能错过!8款AI文案神器,让你轻松写出优质文案

无论你是否准备好,它们都已经来了。如果你知道如何使用它们,AI文案工具可以成为你的新朋友。 现在AI文案工具无处不在,眼花缭乱,从内容生成器到电子商务聊天机器人。原因很简单:AI可以节省大量时间和金钱。这是我们都喜…

markdown 编辑器使用

在博客开头加上 [TOC](这是你的目录标题)就可以根据博客内容自动生成如下所示的目录: 这是你的目录标题 Markdown 编辑器功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表无序…

智慧城市的建设需要数字孪生技术吗?

智慧城市建设需要依靠多种技术来实现数字化、智能化和可持续发展的目标。其中,数字孪生技术在智慧城市建设中起着重要的作用。 首先,数字孪生技术可以提供高度精确的城市建筑和基础设施的数字模型。通过对城市的建筑、道路、水系等要素进行数字化建模&a…

vue.set this.$set的作用

Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法 当一个对象在vue中是响应式的,如果仅仅使用普通的方式向这个对象添加或修改这个属性的值,是不会触发视图更新的 但是使用 vue.set 或者 this.$set 的方式可以使得新添加的属性也是响…

【ARM AMBA AXI 入门 2 - AXI协议中的BURST】

文章目录 1.1 突发传输简介1.1.1 AXI4 突发传输控制信号1.1.1.1 AxLEN 突发传输长度1.1.1.2 AxSIZE 突发传输宽度1.1.1.3 AxBURST 突发传输类型 1.1.2 AXI 传输实例 1.1 突发传输简介 在地址总线上进行一次地址传输后,进行多次数据传输( data transfer)…

GPT4 在医学任务表现-Capabilities of GPT-4 on Medical Challenge Problems

微软和openai在2023年4月的论文。 Capabilities of GPT-4 on Medical Challenge Problems 数据集介绍 USMLE Self Assessments:问题,有表格 USMLE Sample Exam:pdf,有图片 MedQA:多语种多选, PubMedQA…

基于Python的接口自动化-pymysql模块操作数据库

目录 引言 一、PyMySQL安装 二、Python操作数据库 写在最后 引言 在进行功能或者接口测试时常常需要通过连接数据库,操作和查看相关的数据表数据,用于构建测试数据、核对功能、验证数据一致性,接口的数据库操作是否正确等。 因此&#x…