什么是虚拟内存?与实际物理内存的关系?
声明:我是一个新手,有一些理解可能不准确,希望有大佬能指出错误,万分感谢!
虚拟内存的概念及其实现方法
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.2 虚拟内存与物理内存 二.C/C++中虚拟内存分配模型 2.1 C语言中内存 ...
- 动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间
动态内存申请(malloc, calloc, new)之分配虚拟内存空间和物理内存空间 1. 动态内存申请的底层系统调用 动态内存申请函数根据申请的内存大小选择不同的系统调用,小于128K选择brk系 ...
- 理解:虚拟内存,虚拟内存地址,物理内存,物理内存地址
在解释第一个问题之前,先说明一下计算机内存管理的中的四个名词:虚拟内存,虚拟内存地址,物理内存,物理内存地址. 先说说为什么会有虚拟内存和物理内存的区别.正在运行的一个进程,他所需的内存是有可能大于内 ...
- 浅谈CPU、内存、虚拟内存、硬盘之间的关系
2019独角兽企业重金招聘Python工程师标准>>> 大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语 ...
- CPU、内存、虚拟内存、硬盘之间的关系
大家都知道组装电脑需要CPU硬盘,内存等硬件,系统中还含有虚拟内存,对于其中的相互关系,大家可能不了解! 下面用最简明易懂的语言,为大家介绍其中的关系! 1.CPU即中央处理器,是英语"Ce ...
- linux swap分区与内存,虚拟内存和swap分区的关系
首先,这两个概念分别对应windows和linux,即: windows:虚拟内存 linux:swap分区 windows即使物理内存没有用完也会去用到虚拟内存,而Linux不一样 Linux只有当 ...
- 虚拟内存与物理内存之间的关系
操作系统有虚拟内存与物理内存的概念.在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址.程序能寻址的范围是有限的,这取决于CPU的地址线条数.比如在32位平台下,寻址的范围是2^32也 ...
- 详解进程的虚拟内存,物理内存,共享内存
目录 写在前面: 一.关于内存的两个概念 1.1 虚拟内存 1.2 驻留内存 二.详解top命令中VIRT.RES和SHR 2.1 top命令中ⅥRT.RES和SHR的含义 三.进程的smaps文 ...
- Linux IO体系、零拷贝和虚拟内存关系的重新思考
目录 1. 关系梳理 2. 我们先看虚拟内存到底解决什么问题? 3. Linux IO体系重点解决什么问题? 4. 零拷贝重点解决什么问题? 4.1 为什么会谈零拷贝? 4.2 传统IO方式有什么问题 ...
最新文章
- 【网络安全】黑客是怎么利用私服游戏远控电脑的呢?
- CentOS Squid 安装配置
- java赋_Java赋值运算符(=)
- mac终端命令行总结
- c语言中如何用程序判断double型的浮点数能精确到几位小数,C语言中浮点数double/float相等判断...
- Arrays.asList()的坑
- virtualbox 中,虚拟机网络使用NAT方式时,其它机器对虚拟机的访问
- [NOIP2012] 提高组 洛谷P1083 借教室
- 在ubuntu 64位的机器上执行arm-linux-gcc提示 no such file or directory
- 十个免费的 Web 压力测试工具
- 小红帽Linux系统命令重启,Linux系统常用命令之一
- 【STM32】 ESP8266WIFI模块
- educoder答案pythonnumpy_Educoder 题解
- nginx代理图片服务器
- 局域网出现广播风暴怎么办?如何阻止广播风暴?
- python实用大全pdf_超级实用干货|九大技巧,带你用Python玩转PDF
- cocos2dx3.0戳青蛙游戏(打地鼠)
- [人工智能-综述-5]:人工智能课程学习的10大基本问题与学习方法的建议
- 【HW4】项目章程与项目管理计划
- tyut数据分析考试资料