虚拟内存原理

news2024/11/17 11:44:30

局部性原理

计算机组成原理里我们可以知道cache掉入的数据都是连续的

我们可以看下面的例子,data创建的数组,因为我们要读入的是这个数组所以调入的是这一段内存的内容就大概率不会miss

但是我们要知道有些程序的代码被执行的几率是很小的,我们要让大概率被执行的代码引用的空间落入cache,其实科学家研究过,一个程序其实只有一部分局部代码在运行时会被访问,并非所有代码都需要被执行。

这个就叫做局部性原理

大部分程序都是满足此原理

时间局部性有些变量会被重复访问

空间局部性比如a[i]=b[i]

修改缓存的数据

这里叫做脏区,大家可以自行百度一下,这个是计组的基础,其实就是修改cache然后回写

swap space

其实就是磁盘与内存的缓存区域

这个缓存也是为了解决硬盘和内存运行速度不匹配的问题,且硬盘容量比内存要大得多

所以这个缓存区能解决硬盘速度太慢,内存条空间较小的问题,他们是互补(理论上内存无限大)

我们做一个总结

我们看图,越往左存储空间越小,速度越快,越往右存储空间越大,速度越满。右边的设备是左边设备的扩充,我们只需要把常用数据放入左边的设备。

这整个就是虚拟内存的结构

部分装入,虽然内存很小,但是互补之后,我们只需要把不常用的存在低速设备里,常用的放入高速设备里,这就理论上达到无限内存,我们编程就不用担心物理内存的限制。

demand paging

请求式页面调度

并非所有虚内存的空间都在内存中有物理位置(从硬盘掉入内存),因为逻辑上我们需要满足无限内存,但是如果访问到不常用的数据就需要从硬盘里调用数据

判断页表里的valid/invalid值是否有效

判断数据是否在内存驻留

如果数据没有驻留在内存就向硬盘去调度(需要查询硬盘里是否有该数据),最后整个过程叫做paging

如果没有驻留在内存就不会产生page fault,直接取内存驻留的数据,如果有page fault就需要从硬盘调用数据进入内存

上面整个请求调页对于虚拟内存来说可以扩大内存空间,但是这个机制是要访问内存和硬盘的所以调页时间肯定是要比正常时间要低很多

其实这里还有个问题,如果需要调页时发现内存空间满了,那么调页磁盘的空间无法进入内存空间,这里我们就需要解决这个问题

根据下面的图我们可以发现我们可以用置换来解决,也就是我们需要讲一块内存空间存入硬盘,然后再讲我们需要的硬盘数据存入内存,这个过程就叫做页面置换

但这里还有个问题,如果调页置换,我们需要考虑刚置换的内存数据,会否等下又要置换回来,如果多次这样时很浪费运行周期的。

这里我们讨论一些算法

fifo算法先进先出

我们将最先进入内存空间的数据置换

因为这个数据再内存中待的最久,所以一般都已执行完了

我们举个例子,这个例子里我们可以看到3 0和2 3这里再0和3刚被淘汰下次执行又页面置换了,后面几次调用又好几个都是这样

我们可以看到除了前三个强制页面置换,一共发生了十二次页面置换

最优算法

我们可以看到这个算法产生的置换更少,因为它是根据后面需要的资源去判断谁需要被置换

而且既然它叫做最优了,那么基本就是目前最优了

但这里有个致命缺陷,导致整个算法无法实现,我们前面就提到过,我们无法预测程序下一步需要什么

那么我们优化整个算法尽量逼近这个算法的实现逻辑,我们无法判断后面进程需要什么资源,那么我们就只能根据前面执行过的来判断

LRU算法

比fifo算法少了三次,比最优算法多了三次。

系统的抖动

在页面置换时请求调出去的内存可能下一步指令有需要调用,所以这里会产生大量的反复调用调出的动作,这个动作就叫做抖动

这里最后一句说了抖动还有一个特性,就是置换的时间远远大于调用此进程的时间,这个就叫做抖动。

抖动的原因

页框分配太少

并发进程过多(这里其实也是进程过多页框过少)

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

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

相关文章

通达信KDJ抄底指标公式,利用J值小于0

前几天介绍了平滑KDJ指标公式,当时有人提出来不建议处理KDJ,KDJ的特点是灵敏,经过处理后就失去其意义了。不过我认为每种指标有相应的使用场景,不必拘泥于原始指标,指标也是人想出来的。今天就利用KDJ的灵敏&#xff0…

Windows下curl编译,使用vcpkg定制自己的【curl】。

本篇介绍在Windows下如何编译curl,curl自称是星球上最好用的计算机网络工具,但是它在windows上纯手动编译很困难,我们使用vcpkg来简化它的编译,方便我们使用。 目录 一、CURL介绍 二、vcpkg下载、编译、定制【curl】 三、编写…

代码随想录算法训练营第十五天 | 层序遍历 、226.翻转二叉树、101.对称二叉树

打卡第15天,今天继续二叉树 今日任务 层序遍历10道题226.翻转二叉树101.对称二叉树 层序遍历10道题 题单 102.二叉树的层序遍历107.二叉树的层次遍历II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个…

工作篇:触摸屏原理介绍

一、触摸屏概述 触摸屏作为一种新的输入设备,它是目前最简单、方便、自然的一种人机交互方式。 当接触了屏幕上的图形按钮时,屏幕上的触觉反馈系统可根据预先编程的程式驱动各种连结装置,可用以取代机械式的按钮面板,并借由液晶…

《PMBOK 指南第七版》初识

个人理解: 体系构建变化非常大,7版延续6版的内容,但对项目管理的视角完全不同,系统化的思考方式10知识领域 到 12管理原则的转变,突出了对变化的敏捷应对,体现管理的有效性5过程域 到 8 绩效域的转变&…

Android源码分析 - InputManagerService与触摸事件

0. 前言 有人问到:“通过TouchEvent,你可以获得到当前的触点,它更新的频率和屏幕刷新的频率一样吗?”。听到这个问题的时候我感到很诧异,我们知道Android是事件驱动机制的设计,可以从多种服务中通过IPC通信…

03 Android基础--fragment

03 Android基础--fragment什么是fragment?fragment生命周期?动态的fragment与静态的fragmentfragment常用的两个类与APIFragment与Activity通信什么是fragment? 碎片,一个activity中可以使用多个fragment,可以把activi…

应用模型开发指南上新介绍

Module、HAP、Ability、AbilitySta-ge、Context……您是否曾经被这些搞不懂又绕不开的知识点困扰? 现在,全新的《应用程序包基础知识》及《应用模型开发指南》为您答疑解惑! 这里有您关注的概念解析、原理机制阐述,也有丰富的…

gitlab+idea回退代码并提交到新分支

目录结构前言idea创建新分支查看代码提交记录使用IntelliJ IDEA获取使用Git Bash Here获取代码回退到指定版本回退执行命令行使用IntelliJ IDEA实现使用Git Bash Here实现回退完成验证idea提交指定版本代码验证分支代码推动成功前言 IntelliJ IDEA GitLab开发过程中需将代码回…

ajax调用restful接口

HTTP动词对应操作POST新增信息GET获取信息PUT更新信息DELETE删除信息一、POST-----新增信息 1. 后台接口 PostMapping(value "/save") public String save(RequestBody(required true) Emp emp){System.err.println(emp.toString());// 将数据信息存库empService.…

Android开发面试【金三】——启动优化

前言 一下子来到了,面试的高潮季。金三银四的三月份;在我们Android开发的众多面试中,扑面而来的超多面试题难道很多程序员。 Android的性能优化,主要是从以下几个方面进行优化的: 稳定(内存溢出、崩溃&am…

安全认证--JWT介绍及使用

安全认证--JWT介绍及使用1.无状态登录原理1.1.什么是有状态?1.2.什么是无状态1.3.如何实现无状态1.4.JWT1.4.1.简介1.4.2.数据格式2.编写JWT工具2.1.添加JWT依赖2.2.载荷对象2.3.工具2.4.测试2.4.1.配置秘钥2.4.2.测试类2.5项目源码1.无状态登录原理 有状态登录和无…

G1D54-CRF

一、CRF的输入X是什么?是构造的特征吗? 如此,CRF的x只用于状态函数吗? CRF的例子解释调用代码 机器之心 知乎忆榛 此处线性链条件随机场的特征函数形式被统一了? BilstmCRF,强烈推荐!&#x…

AM402和SV660N、IS620N运动控制

软件:InoProShop(V1.7.3) 1、添加EtherCAT伺服从站 2、PLC运动控制程序和ETHERCAT在一个任务中。 3、编码器脉冲设置。 注意电机转速值是以秒还是分钟计量单位。 SV660N IS620N 4、设置电机停机方式。使用sin停机效果比较圆滑,默认梯形。 5、库管理器…

广和通携手联发科技正式发布基于MediaTek T830 平台5G模组FG370的可快速落地FWA解决方案

2月28日,全球领先的物联网无线通信解决方案和无线通信模组提供商广和通正式宣布:新一代5G模组FG370已率先实现量产,并于2023世界移动通信大会(MWC Barcelona 2023)期间携手联发科技正式发布基于FG370的FWA解决方案&…

十三、MyBatis的缓存

缓存:cache 缓存的作用:通过减少IO的方式,来提高程序的执行效率。 mybatis的缓存:将select语句的查询结果放到缓存(内存)当中,下一次还是这条select语句的话,直接从缓存中取&#xf…

数字信号复习题纲

数字信号复习题纲一、希尔伯特变换器(:heavy_check_mark: )1. 什么是希尔伯特变换器?2. 试证明信号通过希尔伯特变换器后的输出二、能量信号的自相关函数、卷积运算与能量谱(:heavy_check_mark:)1. 能量信号2. 试证明自…

webpack配置完全指南

前言 对于入门选手来讲,webpack 配置项很多很重,如何快速配置一个可用于线上环境的 webpack 就是一件值得思考的事情。其实熟悉 webpack 之后会发现很简单,基础的配置可以分为以下几个方面: entry 、 output 、 mode 、 resolve …

深入理解Storm 之 TridentStrom

从Demo讲起: FixedBatchSpout spout new FixedBatchSpout(new Fields("sentence"), 3, new Values("the cow jumped over the moon"),new Values("the man went to the store and bought some candy"),new Values("four score and seven …

新库上线 | CnOpenData中国债券市场债券信息数据

中国债券市场债券信息数据 一、数据简介 债券是政府、企业、银行等债务人为筹集资金,按照法定程序发行并向债权人承诺于指定日期还本付息的有价证券。债券购买者或投资者与发行者之间是一种债权债务关系,债券发行人即债务人,投资者&#xff…