声明:我是一个新手,有一些理解可能不准确,希望有大佬能指出错误,万分感谢!

虚拟内存的概念及其实现方法

1.1 什么是内存

内存是相对于外存而言的,所谓“内外”,由于CPU处理器是最核心的部分,所以“内存”指的是比较靠近核心的、能直接被CPU读写数据的那一个数据容器。通常这个容器的容量较小,读写速度较快。而“外存”指的是离CPU稍远一些的容数据器(如磁盘),外存一般空间较大,但读写速度较慢(比CPU的处理速度要慢得多),所以不宜直接让CPU去读外存数据,否则CPU都已经把数据处理完了,新的数据还没读进来,让CPU在空等就是浪费时间。因此需要在CPU与外存之间多搞了一个叫内存的东西,来提升速度。

1.2 什么是虚拟内存

因为内存容量对一个大程序而言是在是太小,很难将整个程序直接从外存读到内存里(内存放不下,就算放得下一个,也无法放下多个需要同时运行的程序),虽然这些年内存的速度和大小一直在升级,但对于程序员来说,只要有需要,就能写出非常非常大的程序,所以内存的大小和速度始终无法满足实际需求。
所以计算机学家想出了一个点子——虚拟内存。这是一种在不扩大实际内存容量的情况下,让内存看上去能放下更多程序的方法。这是怎么做到的?
在虚拟内存技术出现之前是将完整的程序从外存(如磁盘)读入内存中,但是现在虚拟内存不这么做,虚拟内存技术将一个完整的程序切割成多份,当CPU要执行这个程序时,内存先把该程序的第一份送入CPU,然后马上又问磁盘拿同一个程序的第二份内容,然后再送入CPU。这样做就使得内存中可以出现更多的程序头(程序的第一份),而不是一个完整的程序占满整个内存。
说到这里其实还没讲到虚拟内存最精髓的地方,“虚”到底虚在哪?虚拟内存和实际内存都存储着多个程序头(被切割出来的第一份),但是虚拟内存胆子很大,他敢记录实际物理内存中没有记录的程序头。所以在容量上看,虚拟内存比实际物理内存要大很多,“虚”就是“比实际更多”的意思。你可能觉得很奇怪,虚拟内存表里记录了在实际物理内存不存在的程序头,那CPU是怎么从实际物理内存中读到不存在的程序头的?这个简单,CPU只会盯着虚拟内存表看,不会再管实际物理内存里有什么,当CPU在虚拟内存表里调用了一个在实际物理内存中不存在的程序头时,物理内存马上去外存(磁盘)里找这个程序头,然后把物理内存中不常运行的程序头踢出去,将CPU需要的程序头放到这个空的位置上,供CPU使用。另一种情况是如果CPU要使用的程序头刚好实际物理内存里有,那就直接用。

1.3 虚拟内存的作用

虚拟内存解决了两部分的问题:
① 防止一个程序太大,无法整体放入物理内存,所以将程序都分割成多份,这样内存中就可以保存很多个不同的程序头,同时也避免了把一整个程序送进来让CPU等待好几秒的尴尬。当CPU要调用内存中的程序头的时候,内存再联系外存(磁盘),让外存一份份送来内存,在送的时间里,CPU可以去处理其他已在内存中的程序头。
② 虚拟内存表里记录了很多物理内存中没有的程序片段,所以欺骗了CPU,让CPU以为内存真的很大,实际情况是,如果CPU调用了物理内存上没有,但虚拟内存表中有的程序时,物理内存会马上“将功补过”,去磁盘找这个程序的头部片段,因为切割后的一份也不大,所以不会让CPU等很久。

上面说的只是形象地描述了虚拟内存的概念、行为以及作用,具体的实现方法要复杂一些,还涉及到内存管理单元(MMU)和地址映射之类的知识,但是有了总体的概念,再去看书,应该会好理解很多。

什么是虚拟内存?与实际物理内存的关系?相关推荐

  1. 详解操作系统中虚拟内存与物理内存的关系

    点击链接: 一文理解虚拟内存.物理内存.内存分配.内存管理 - 知乎 目录 一.虚拟内存与物理内存 1.1 虚拟内存 1.2 虚拟内存与物理内存 二.C/C++中虚拟内存分配模型 2.1 C语言中内存 ...

  2. 动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间

    动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间 1. 动态内存申请的底层系统调用 动态内存申请函数根据申请的内存大小选择不同的系统调用,小于128K选择brk系 ...

  3. 理解:虚拟内存,虚拟内存地址,物理内存,物理内存地址

    在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存,虚拟内存地址,物理内存,物理内存地址. 先说说为什么会有虚拟内存和物理内存的区别.正在运行的一个进程,他所需的内存是有可能大于内 ...

  4. 浅谈CPU、内存、虚拟内存、硬盘之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语 ...

  5. CPU、内存、虚拟内存、硬盘之间的关系

    大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语言,为大家介绍其中的关系! 1.CPU即中央处理器,是英语"Ce ...

  6. linux swap分区与内存,虚拟内存和swap分区的关系

    首先,这两个概念分别对应windows和linux,即: windows:虚拟内存 linux:swap分区 windows即使物理内存没有用完也会去用到虚拟内存,而Linux不一样 Linux只有当 ...

  7. 虚拟内存与物理内存之间的关系

      操作系统有虚拟内存与物理内存的概念.在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址.程序能寻址的范围是有限的,这取决于CPU的地址线条数.比如在32位平台下,寻址的范围是2^32也 ...

  8. 详解进程的虚拟内存,物理内存,共享内存

    ​ 目录 写在前面: 一.关于内存的两个概念 1.1 虚拟内存 1.2 驻留内存 二.详解top命令中VIRT.RES和SHR 2.1 top命令中ⅥRT.RES和SHR的含义 三.进程的smaps文 ...

  9. Linux IO体系、零拷贝和虚拟内存关系的重新思考

    目录 1. 关系梳理 2. 我们先看虚拟内存到底解决什么问题? 3. Linux IO体系重点解决什么问题? 4. 零拷贝重点解决什么问题? 4.1 为什么会谈零拷贝? 4.2 传统IO方式有什么问题 ...

最新文章

  1. 【网络安全】黑客是怎么利用私服游戏远控电脑的呢?
  2. CentOS Squid 安装配置
  3. java赋_Java赋值运算符(=)
  4. mac终端命令行总结
  5. c语言中如何用程序判断double型的浮点数能精确到几位小数,C语言中浮点数double/float相等判断...
  6. Arrays.asList()的坑
  7. virtualbox 中,虚拟机网络使用NAT方式时,其它机器对虚拟机的访问
  8. [NOIP2012] 提高组 洛谷P1083 借教室
  9. 在ubuntu 64位的机器上执行arm-linux-gcc提示 no such file or directory
  10. 十个免费的 Web 压力测试工具
  11. 小红帽Linux系统命令重启,Linux系统常用命令之一
  12. 【STM32】 ESP8266WIFI模块
  13. educoder答案pythonnumpy_Educoder 题解
  14. nginx代理图片服务器
  15. 局域网出现广播风暴怎么办?如何阻止广播风暴?
  16. python实用大全pdf_超级实用干货|九大技巧,带你用Python玩转PDF
  17. cocos2dx3.0戳青蛙游戏(打地鼠)
  18. [人工智能-综述-5]:人工智能课程学习的10大基本问题与学习方法的建议
  19. 【HW4】项目章程与项目管理计划
  20. tyut数据分析考试资料

热门文章

  1. 分页查询的SQL优化
  2. 秒杀系统架构设计,手把手教你画架构图!
  3. PyTorch给句子加所谓的mask
  4. 男人要像狗女人要像猫
  5. 74汉明码编码原理及其c++实现
  6. 《程序员的修炼——从优秀到卓越》-摘要
  7. 已知银行整存整取存款不同期限的年息利率分别为
  8. MySQL更新数据update
  9. CIS儿智展2018招展初始 国内外名企报名火爆
  10. Meta Quest Pro拆解:集成度更高,设计更复杂