计算机组成原理/数据库补充 存储器第四章---虚拟内存

news2024/11/25 20:58:09

刚刚数据库下课讲了很多有关虚拟内存的东西感觉很多都忘了,现在写这篇文章来复习一下

为什么要引入虚拟内存

在计算机系统中,多个进程共享CPU和内存,

  • 如果太多的进程需要过多的内存空间,那么其中一部分进程就会无法或得足够得空间而无法运行
  • 此外如果一个进程的数据不小心把写入到另一个进程的内存空间中,那么接下俩会发生令人困惑的错误。

    为了有效的管理内存现代计算机系统提供了一条对内存的抽象概念---虚拟内存,它可以自动的完成内存管理工作不需要应用程序员来干预。

     虚拟内存在计算机系统中扮演了很重要的角色,在链接器、汇编器,加载器和文件以及进程的设计中都扮演了重要的角色。理解虚拟内存有助于理解计算机是如何工作的。

   虚拟内为应用程序提供了强大的能力,例如创建和释放内存空间,将内存空间释放到磁盘的某个部分,以及其他空间共享进程,因此我们编写应用程序时会利用虚拟内存的特性。

  当我们编写应用程序时,每次引用一个变量、间接引用一个指针,或者调用一个malloc函数都会和虚拟内存发生交互,如果虚拟内存使用不当,会发生非常复杂的错误理解虚拟内存可以让我们避免这些错误。

虚拟内存是如何工作的

物理寻址

一个简单的方式是内存中的元素以数组的方式进行存储 ,CPU在读取这条指令的时候会生成一个有效的物理地址,这个物理地址通过内存总线传递给内存控制器,然后内存响应这种读的请求,从物理地址2的地方取出四个字节的内容返还给CPU

73c0084d24c44ae785ffad0d8506380d.png

 虚拟寻址

这种寻址方式下,CPU是通过一个虚拟地址来访问内存的,这个虚拟地址在被送入到内存之前需要转换成相应的物理地址

  • 将一个虚拟地址转换成一个物理地址的任务叫做地址翻译
  • CPU有专门的工作部件来做地址转换,这个专用的部件就是内存管理单元MMU

 

 虚拟地址

598b246c8f8e45fd91a3634106921ab2.png

 虚拟内存用作缓存

虚拟内存可以看成磁盘上N个连续的字节构成的数组,由于每一字节都有唯一的虚拟地址,这个虚拟地址就是数组的索引值,图中展示了一条小型的虚拟存储系统,其中虚拟地址的范围是0~N-1,

对于磁盘上数组的内容被暂存到缓存里,磁盘上的数据被切割成块,这些块作为磁盘和内存之间的传输单元,我们把这些块称为虚拟页,简称VP,每个虚拟页的大小为P个字节,P的值通常是4KB~2MB之间

415c2e0ea3f64f5e8def096a7c0123ea.png

物理页和虚拟页的大小是一样的,也是P个字节,在有些书中也把物理页称为页帧,未分配表示虚拟内存系统还没有创建的页,未分配的页没有任何数据和他相关联,所以他不占用任何的磁盘空间,图中的虚拟内存被分为八个虚拟页,03是未分配的因此在磁盘上还不存在

9d592676f9ec4d06877730d2e8e3008e.png

 第二类表示已经缓存的表示已经缓存在物理内存页中,例如图中的虚拟内存页1 4 6

2aa16b58a5524afebda941a18082a78c.png

第三类是未缓存的,例如图中虚拟页2 5 7 已经被分配了,但是当前并未缓存在内存中。

3cfd6318316d4b848bdeb71224e9cd47.png

 SRAM缓存表示L1 L2L3之间的缓存,DRAM表示虚拟内存系统的缓存,也就内存缓存的虚拟页

DRAM大约比SRAM慢10倍,磁盘大约比DRAM慢十万倍,因此DRAM缓存不命中比SRAM缓存不命中比DRAM的影响更大,DRAM缓存补命中时,需要从磁盘读数据到内存,因此耽误的时间比较长,所以DRAM采用全相联的连接方式,也就是说任何一页的虚拟页都可以放到任意内存页中。

同时,不命中的时候的替换策略也很重要,如果替换错了,那么也会耽误很长的时间DRAM的替换算法比cache替换更为复杂,本文章不做过多介绍。

最后由于磁盘的访问时间很长,所以DRAM采用的是写回的策略而不是写穿透

eb26a189af834f3493a0699ad86739f6.png

 

 

 

 

 

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

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

相关文章

2023年网络安全比赛--Windows渗透测试中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.通过本地PC中渗透测试平台Kali对服务器场景20221219win进行系统服务及版本扫描渗透测试,并将该操作显示结果中1433端口对应的服务版本信息作为Flag值(例如3.1.4500)提交; 2.通过本地PC中渗透测试平台Kali对服务器场景202212…

chatgpt智能提效职场办公-ppt怎么全屏

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 在PowerPoint中,可以通过以下几种方法将演示文稿切换到全屏模式: 方法1:按F5键 在编辑演示文稿的状…

基于LS1028 TSN 交换机硬件系统设计与实现(二)

3.1 LS1028A 芯片研究 目前市面上支持 TSN 系统的芯片较少,其中两家较大的公司之一博通 ( Broadcom ) 2017 年推出了 StrataConnect BCM53570 系列的以太网交换机,该系 列支持的新技术旨在帮助用户应对物联网、汽车网络和…

mybatis的原理详解

mybatis的原理详解 原理图 执行的原理图如下图所示&#xff1a; 配置文件分析 config.xml: <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.or…

PTA L1-091 程序员买包子 (10 分)

这是一条检测真正程序员的段子&#xff1a;假如你被家人要求下班顺路买十只包子&#xff0c;如果看到卖西瓜的&#xff0c;买一只。那么你会在什么情况下只买一只包子回家&#xff1f; 本题要求你考虑这个段子的通用版&#xff1a;假如你被要求下班顺路买 N N N 只包子&#x…

华为云上云实践(二):Linux 环境下对云硬盘 EVS 的创建、挂载和初始化

本文主要讲解华为云云硬盘 EVS 的在 Linux 操作系统 EC2 服务器上创建、挂载及云硬盘初始化等基本操作&#xff0c;快速掌握华为云云硬盘 EVS 操作方法。 How to attach new Huawei EVS Volume 文章目录 一、前言二、环境准备与造作步骤2.1 本文实践操作的环境2.2 本文实践操作…

基础数据结构------单链表

1、链表使用的解决方案 【链表的概述】 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点&#xff08;链表中每一个元素称为结点&#xff09;组成&#xff0c;结点可以在运行时动态生成。…

从MySQL小表驱动大表说起

刚刚开始学习MySQL的时候&#xff0c;连表查询直接使用left join或者更粗暴点&#xff0c;两个表直接查询&#xff0c;where过滤条件&#xff0c;组装笛卡尔积&#xff0c;最终出现自己想要的结果。 当然&#xff0c;现在left join也是会用的&#xff0c;毕竟嘛&#xff0c;方便…

如何实现多存储文件传输,镭速提供多存储文件传输解决方案

目前的文件传输系统中&#xff0c;大多数采用的文件传输系统只支持单个的存储。随着科技的发展&#xff0c;存储的类型越来越多&#xff0c;构建的越来越复杂&#xff0c;业务要求越来越多样化&#xff0c;只支持单个存储的文件传输系统是无法满足现有的需求。 为实现高自由度…

Java基础(十九):集合框架

Java基础系列文章 Java基础(一)&#xff1a;语言概述 Java基础(二)&#xff1a;原码、反码、补码及进制之间的运算 Java基础(三)&#xff1a;数据类型与进制 Java基础(四)&#xff1a;逻辑运算符和位运算符 Java基础(五)&#xff1a;流程控制语句 Java基础(六)&#xff1…

vue3新的组件

1.Fragment - 在Vue2中: 组件必须有一个根标签 - 在Vue3中: 组件可以没有根标签, 内部会将多个标签包含在一个Fragment虚拟元素中 - 好处: 减少标签层级, 减小内存占用 没有写根标签&#xff0c;也没有报错&#xff0c;如果是在v2中&#xff0c;我们还需要用一个div来包裹它 …

springboot web项目统一时区方案

背景 springboot项目国际化中&#xff0c;会遇到用户选择的时间和最终存到数据库的时间不一致&#xff0c;可能就是项目开发和部署时的时区没有处理好&#xff0c;导致时间转换出现了问题。 先了解时区都有哪些&#xff1a; 1.GMT&#xff1a;Greenwich Mean Time 格林威治…

移动端适配方法:rem+vw

1.百分比设置:几乎不用 因为各种属性百分比参照物(自身/父元素/...需要去查文档)很难统计固定,所以不用百分比进行适配 2.rem单位动态html的font-size 使用rem,因为rem参考html的fz,只需要在不同的屏幕上设置不同的html的fz即可,其他地方全用rem rem的fz尺寸 媒体查询 编写…

推荐系统召回之userCF

基于用户的协同过滤算法userCF 1.1 相似度计算 通过计算用户之间的相似度。这里的相似度指的是两个用户的兴趣相似度。 假设对于用户u uu和v vv&#xff0c;N ( u ) N(u)N(u)指的是用户u uu喜欢的物品集合&#xff0c;N ( v ) N(v)N(v)指的是用户v vv喜欢的物品集合&#xff0…

体验 Kubernetes Cluster API

体验 Kubernetes Cluster API 什么是 Kubernetes Cluster API安装 Kind增加 ulimit 和 inotify创建 Kind 集群安装 clusterctl CLI 工具初始化管理集群创建一个工作负载集群访问工作负载集群部署一个 CNI 解决方案安装 MetalLB部署 nginx 示例清理(参考)capi-quickstart.yaml 文…

C++的类和对象(2)

类和对象 1.类对象模型1.1. 如何计算类对象的大小1.2. 类的存储模式讨论1.3. 类对象的空间符合结构体对齐规则 2. this指针2.1. this指针的引出2.2. this指针的特性2.3.面试题2.4. C语言和C实现栈的对比 1.类对象模型 1.1. 如何计算类对象的大小 class A { public: void Prin…

类加载与卸载

加载过程 其中验证,准备,解析合称链接 加载通过类的完全限定名,查找此类字节码文件,利用字节码文件创建Class对象. 验证确保Class文件符合当前虚拟机的要求,不会危害到虚拟机自身安全. 准备进行内存分配,为static修饰的类变量分配内存,并设置初始值(0或null).不包含final修饰…

用python脚本从Cadence导出xdc约束文件

用python脚本从Cadence导出xdc约束文件 概述转换方法先导出csv文件修改CSV文件 CSV转XDC检查输出XDC文件csv2xdc源代码下载 概述 在Cadence设计完成带有FPGA芯片的原理图的时候&#xff0c;往往需要将FPGA管脚和网络对应关系导入vivado设计软件中&#xff0c;对于大规模FPGA管…

springboot+vue准妈妈孕期交流平台(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的准妈妈孕期交流平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;…

C++引用篇

文章目录 一、引用概念及示例二、引用做函数参数二、引用做函数的返回值四、常引用五、引用和指针的区别 一、引用概念及示例 c语言指针存变量地址&#xff0c;然后通过解引用可以访问或者改变变量&#xff0c;且也可以改变指针变量里面存的地址 修改变量这样还需要对指针变量…