虚拟内存系统【如何支持巨大的虚拟地址空间】

news2024/11/26 18:20:02

如何支持巨大的虚拟地址空间

    • 📖1. 为什么要支持巨大的虚拟地址空间
    • 📖2. 交换空间
    • 📖3. 存在位
    • 📖4. 页错误
    • 📖5. 为了处理页错误,操作系统大致做了什么?
    • 📖6. 页面换出
    • 📖7. 当程序从内存中读取数据会发生什么?
    • 📖8. 页面置换什么时候真正发生

📖1. 为什么要支持巨大的虚拟地址空间

为什么我们要为进程支持巨大的虚拟地址空间呢

为了方便和易用性,有了巨大的地址空间,你不必担心程序的数据和代码是否有空间存储,只需自然的编写代码,根据需要分配内存.

📖2. 交换空间

我们需要在硬盘上开辟一部分空间用于物理页的移入和移出,在操作系统中,一般这样的空间称为交换空间(swap space).因为我们将内存中的页交换到其中,并在需要的时候又交换回去.

image-20221201111234015

上图中,可以看到一个4页的物理内存和8页的交换空间(在磁盘上),有4个进程,进程0、进程1、进程2都只有一部分有效页在内存中,剩下的在硬盘的交换空间中,进程3的所有页都被交换到了磁盘上,因此它目前没有运行,有一块交换空间是空闲的,通过这个小例子,你应该能够看出,使用交换空间是如何让系统假装比实际物理内存更大.

📖3. 存在位

现在我们在硬盘上有一部分交换空间,需要在系统中增加一些机制,来支持从硬盘交换页.

让我们先回想一下内存引用会发生什么

正在运行的进程生成虚拟地址(用于获取指令或访问数据),硬件将其转换为物理地址,再从内存中获取所需数据.

硬件首先从虚拟地址获得VPN(虚拟页号),检查TLB是否命中,如果命中,则获得最终的物理地址并从内存中取回,它不需要额外的内存访问.

如果在TLB中找不到VPN(即TLB未命中),则硬件在内存中查找页表(使用页表基址寄存器),并使用VPN查找该页的页表项(PTE)作为索引,如果页有效且存在于物理内存中,则硬件从PTE中获得PFN,将其插入TLB,并重试该指令,这次TLB中就会命中.

但是,我们要支持页可以从内存交换到磁盘,必须添加更多的机制,具体的说,当硬件在PTE中查找时,可能发现页面不在物理内存中,硬件判断是否在内存中的方法,是通过页表项中的一条新信息,即存在位.

如果存在位设置为1,则表示该页存在于物理内存中,如果存在位设置为0,则表示该页不在物理内存中,而在硬盘中. 访问不在物理内存中的页,这种行为被称为页错误.

当发生页错误(页未命中),硬件产生中断,操作系统被唤醒处理页错误,执行页错误处理程序.

📖4. 页错误

如果一个页不在物理内存中,即它已经被交换到了硬盘上,在处理页错误时,操作系统需要将该页交换到内存中,那么有一个问题:操作系统怎么知道所需的页在哪里呢?

操作系统可以用PTE中的某些位来存储硬盘地址,把存储PFN的位置改为存储硬盘地址,当操作系统收到页错误时,它会在PTE中查找地址,并将请求发送到硬盘,将页读取到内存中.

当硬盘I/O完成时,操作系统会更新页表,将此页标记为存在,更新页表项(PTE)的PFN字段以记录新获取页的内存位置,并重试指令. 下一次重新访问时TLB还是未命中,然而这次因为页在内存中,因此会将页表中的地址更新到TLB中(也可以在处理页未命中时顺便更新TLB),最终的重试操作会在TLB中找到转换映射,从已转换的内存物理地址,获取所需的数据或指令.

📖5. 为了处理页错误,操作系统大致做了什么?

首先,操作系统必须为将要换入的一个页找到一个物理帧,如果没有这样的物理帧,我们将不得不等待页面置换算法执行,并从内存中踢出一些页,释放帧供这里使用. 在获得物理帧后,处理程序发出I/O请求从交换空间中读取页,最后,当这个慢操作完成时,操作系统更新页表并重试指令,重试将导致TLB未命中,然后硬件(MMU)通过查找页表找到该项并缓存在TLB中,然后再一次重试,此时硬件将能够访问所需的值.

📖6. 页面换出

刚才我们假设有足够的空闲内存来存储从交换空间换入的页. 但是,如果内存已经满了呢?

这时操作系统必须先交换出一个或多个页,以便为操作系统即将交换入的新页留出空间,选择哪些页被换出的策略,被称为页面置换.

📖7. 当程序从内存中读取数据会发生什么?

首先硬件从虚拟地址中拿出VPN,并在TLB中检查是否命中,当TLB未命中时则需要查找页表中的PTE,会分三种情况:

  1. 该页存在且有效,在这种情况下,TLB未命中处理程序可以从PTE中获取PFN,并将这对转换保存在TLB中,接着重新执行指令,这次TLB会命中,获得物理地址并在内存中读取到数据
  2. 页未命中处理程序需要运行,虽然它是一个有效页,但它此时不在物理内存中
  3. 访问的是一个无效页,可能由于程序中出现了错误,硬件捕获这个非法访问,操作系统陷阱处理程序运行,可能会杀死非法进程.

📖8. 页面置换什么时候真正发生

为了保证有少量的空闲内存,大多数操作系统会设置高水位线和低水位线(LW),来帮助决定何时从内存中清楚页.

大致原理是这样:当操作系统发现有少于LW个页可用时,后台负责释放内存的线程会开始运行,直到有HW个可用的物理页,这个后台线程有时称为交换守护进程或页守护进程.

在执行交换的过程时,我们可以进行一些优化,例如,许多系统会把多个要写入的页聚集或分组,同时写入到交换空间中,从而提高硬盘的效率.

为了配合后台的分页线程,页面置换算法首先检查是否有空闲页,而不是直接执行替换,如果没有空闲页,会通知后台的分页线程按需要释放页(把它换出到磁盘上),当线程释放一定数目的页时,它会重新唤醒原来的线程,然后就可以把需要的页换进内存,继续执行.

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

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

相关文章

IDEA 中使用 SparkSQL 远程连接 Hive

文章目录第一步,环境配置第二步,IDEA 配置第三步,授权第四步,连接测试扩展——华为云/阿里云集群报错第一步,环境配置 首先,你要确保你的集群可以正常运行。 我们在 Windows 电脑中安装 Hadoop&#xff0…

【新知实验室--音视频通话】腾讯云TRTC-实时音视频---多人会议视频通话SDK基础搭建

🦖我是Sam9029,一个前端 Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-JS学习,CSS学习,Vue-2领域博主 🐱‍🐉🐱‍🐉恭喜你,若此文你认为写的不错,不要吝啬你的赞扬,求收…

基于STM32单片机的篮球计时记分器proteus仿真原理图PCB

功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示比赛剩余时间,球队分数 2.默认计时器为4节,每节10分钟,每节比赛结束,蜂鸣器报警 3.按键功能介绍: 1’键——加1分 4’键——减1分 2’键——加2分 5’键—…

基于java+springmvc+mybatis+vue+mysql的水果食品果蔬生鲜商城销售系统

项目介绍 网络购物作为一种全新的销售方式赢得了越来越多销售者的青睐,近年来销售额更是以连年翻番的惊人速度成倍增长,网络购物已经形成了自身特有的网络销售市场和全新的网络营销模式,也使网络营销渠道应运而生,同时&#xff0…

SRM供应商平台哪些好用?

SRM系统是管理供应商的系统,旨在与供应商建立高效的协同关系,是一种围绕采购业务的双赢管理模式。 但市面上SRM系统供应商层出不穷,很多企业在数字化转型中不知如何挑选合适自己企业的SRM系统,或是选错了系统,效率提升…

成功的项目管理工具拥有的五大功能

如果您决定投资一种新的项目管理工具,那么您需要确保购买的是最适合自己的。在为您的企业寻找最佳项目管理软件时,不要被所有的花里胡哨分心,因为某些东西看起来很漂亮并不意味着它有实质。不要错过对团队成功至关重要的关键功能,…

【论文精读7】MVSNet系列论文详解-PVA-MVSNet

PVA-MVSNet论文名为:Pyramid Multi-view Stereo Net with Self-adaptive View Aggregation,主要是用了一个自适应的聚合模块来在构建代价体时不用均匀的方差、而是让不同的特征体具有一定的选择注意力权重来对最终的代价体做贡献,同时对于多尺…

星起航跨境:跨境卖家可以这样获得好评,稳步提升销量

据调查数据显示,90%以上的消费者购物之前会先查看产品评论,好的评价能促进产品更快地转化,不好的评价还会对产品listing权重产生一定的影响。例如:在产品listing的评价较少的情况下,一个1星差评在listing展示超过3天之…

WebRTC实战-第一章-理论基础

目录webrtc-demo基础理论ICE server/信令server/webrtc server的区别和联系coturn安装coturn穿透和转发服务器安装依赖ubuntu系统centos系统编译安装coturn快速测试启动自定义配置启动自定义配置真实配置新建start.sh测试地址,分别测试stun 和 turn打开测试地址测试…

jsp汽车销售管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 jsp汽车销售管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用…

Spire.Doc 10.11.9 支持设置形状填充颜色的透明度

度娘找破解版Spire.Doc for .NET是一个专业的Word .NET库,专门为开发人员设计,用于在任何.NET 平台(Target .NET Framework、.NET Core、.NET Standard、 .NET 5.0、.NET 6.0、Xamarin 和 Mono Android),具有快速和高质…

纷享销客2022新增长系列之《高科技行业橙皮书》重磅发布

二十大报告进一步提出建设数字中国,加快发展数字经济。这意味着,对于各行业而言,充分运用数字化技术推动业务变革、效率变革、流程变革,是各行各业发展的必经之路。 高科技行业作为一个知识与技术密度性高的行业,具备技…

【pen200-lab】10.11.1.146

pen200-lab 学习笔记 【pen200-lab】10.11.1.146 🔥系列专栏:pen200-lab 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月27日🌴 🍭作…

day11-12【代码随想录】删除链表的倒数第N个节点、链表相交、字符串中第二大的数字

文章目录前言一、删除链表的倒数第N个节点(力扣19)二、链表相交(力扣160)三、字符串中第二大的数字(力扣1796)前言 1、删除链表的倒数第N个节点 2、链表相交 3、字符串中第二大的数字 一、删除链表的倒数…

苹果mac装双系统?关于Parallels Desktop你需要知道的相关知识

很多朋友用上了MacBook&#xff0c;但很多软件只能在Windows系统来使用&#xff0c;小白想要在MacBook上装Windows&#xff0c;需要花费大量的时间&#xff0c;所以在此&#xff0c;教大家在MacBook上安装虚拟机&#xff0c;来运行Windows系统。 <目录> 一、你是否适合…

【使用 BERT 的问答系统】第 4 章 :BERT 算法详解

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

岩藻多糖-聚乙二醇-转铁蛋白,Transferrin-PEG-Fucoidan,转铁蛋白-PEG-岩藻多糖

岩藻多糖-聚乙二醇-转铁蛋白,Transferrin-PEG-Fucoidan,转铁蛋白-PEG-岩藻多糖 中文名称&#xff1a;岩藻多糖-转铁蛋白 英文名称&#xff1a;Fucoidan-Transferrin 别称&#xff1a;转铁蛋白修饰岩藻多糖&#xff0c;Tf-岩藻多糖 溶解性&#xff1a;溶于大部分有机溶剂&am…

【微信小程序】如何上传uniApp开发的微信小程序?

uniApp微信小程序如何上传&#xff1f;首先确保已经安装了Hbuilder X 和微信开发者工具确保拥有配置了权限的账号&#xff0c;需要使用此账号的AppId首先联系管理员&#xff0c;让管理员给账号配置权限**[打开微信公众平台地址](https://mp.weixin.qq.com/)**在微信公众平台地址…

微信小程序-HTML标签和wxml比对

一、直接将HTML标签引入微信中 <rich-text nodes"<h3 stylecolor:green; text-align:center;> 通过nodes将HTML标签放到微信中</h3>"> </rich-text> 二、轮播图 <!-- indicator-dots 显示轮播图的小圆点 autoplay circular自动播放&…

C. Qpwoeirut And The City Codeforces Round #809 (Div. 2)

传送门 题意&#xff1a;有n栋楼&#xff0c;每栋楼的高度为&#xff0c;对美丽的楼的定义如下&#xff1a; 对于&#xff0c;如果并且,那么就说明这栋楼是美丽的。&#xff08;所以第一栋楼和最后一栋一定不是美丽的&#xff09; lk现在可以将所有的楼的高度增加任意值&…