什么是虚拟内存?虚拟内存的原理

04月29日 收藏 0 评论 0 测试开发

什么是虚拟内存?虚拟内存的原理

转载声明:文章来源https://blog.csdn.net/blankmargin/article/details/118534348

最近看Binder原理的时候,讲到一个概念MMap,Memory Map,内存映射,一言蔽之就是物理内存和虚拟内存的映射(这个不是重点)。然而突然产生个疑问——什么是虚拟内存?我大概是傻了,横竖睡不着,坐起身来,看了很多帖子,字里行间写着两个大字“懵逼”。一方面我着急弄清楚Binder、mmap原理,一方面悬在我心里的疑问让我惶惶不可终日,左思右想,还是先弄清楚什么是虚拟内存,毕竟不积畦步无以至千里。

坎坷之路

什么是虚拟内存?我百度半天,帖子不少,或许是我愚钝理解能力不行,没有一篇帖子能告诉我答案,我又百度“linux什么是虚拟内存”,然而不论怎么搜,搜出来的帖子大多都是“虚拟内存设计思想”、“虚拟内存原理”,唯一找到一篇帖子题目是我的问题,答案却说为什么用虚拟内存,没有一篇帖子能够一句话告诉我,究竟是什么是虚拟内存……

正当我问天问大地没有答案时,突然想起来,这个东西,我似乎,曾几何时学过……于是我翻出我垫桌子的《操作系统》,翻开目录一看,赫然写着“虚拟页式存储管理方案”几个大字,这几个大字啪啪打在我脸上生疼,我才想起,当时学页面置换算法多头疼,醒着是它梦里也是它,那时候给朋友打电话请教、看视频、百度找讲解找题算,最终熟练掌握时候我多么的激动欣喜像找到女朋友一样,然而现在,却忘得一干二净……我简直就简直了……。简单回顾完书上的介绍,再一看百度,突然发现几篇帖子下面就是百度百科的解释,我顿时想给自己一巴掌……

什么是虚拟内存?

百度百科:虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。

《操作系统》:虚拟存储技术的基本思想时利用大容量外存来扩充内存,产生一个比有限的实际内存空间大得多的、逻辑的虚拟空间,简称虚存,以便能够有效地支持多道程序系统的实现和大型程序运行的需要,从而增强系统的处理能力。

一句话概括:虚拟内存是一种内存管理技术,是虚拟的、逻辑上存在的存储空间。

为什么要使用虚拟内存?

我们先回顾一下程序执行的原理,首先程序是运行在内存中的,程序运行时会将保存在硬盘上的程复制到RAM内存(载入内存),然后CPU执行内存中的程序代码。

如果执行的程序占用内存很大或很多,或同时执行多个程序,就会导致内存消耗殆尽。从而导致程序执行异常或崩溃。

虚拟内存工作原理

当进程开始运行时,先将一部分程序装入内存,另一部分暂时留在外存;当要执行的指令不在内存时,由系统自动完成将它们调入内存的工作;当没有足够的内存时,系统自动选择部分内存(暂不执行的程序)空间,将其中原有的内容交换到磁盘上,并释放这些内存空间供其他进程使用。

这样做的结果使程序的运行丝毫不受影响,使程序在运行中感觉到拥有一个不受内存容量约束的、虚拟的、能够满足自己需求的存储器。

不同系统虚拟内存的组成

SWAP:Linux提出SWAP的概念,我们上面提到内存不足时会将内存中程序交换到外存上,我们安装linux系统时,会有一个swap分区,说的就是这个。
windows 上虚拟内存在硬盘上其实就是为一个硕大无比的文件,文件名是PageFile.Sys,通常状态下是看不到的。必须关闭资源管理器对系统文件的保护功能才能看到这个文件
以上是我花了一个晚上对虚拟内存的简单了解,如有不对,还望批评指出,非常感谢。

C 0条回复 评论

帖子还没人回复快来抢沙发