虚拟内存


   群里的大牛们讨论有关内存的问题。。开启博学模式。。



 

 


我先对于这些概念性的东西做个小科普。

  物理内存,顾名思义,就是实实在在存在的那个东西,插在你电脑主板上的内存条所提供的空间。

  页面文件,这个是硬盘上的一块空间,在Windows下表现为一个文件。这个页面文件存在的意义就是在物理内存被占用满以后,将物理内存中的东西移动到硬盘上的这个空间,腾出物理内存给需要的应用程序来使用。

  交换区,这个是物理内存和页面文件空间的总和,“交换”的含义,则是指在硬盘文件、CPU和其它IO之间进行数据的传递和暂存(这句话对于了解计算机运行基本流程的人来说应该可以理解)。

  虚拟内存,这个概念恐怕是目前为止最为含混不清的一个东西了,会有很多种不同的含义。在这里,我先说一下在一个程序猿眼中的虚拟内存是个啥。很显然,这个世界上的电脑配置是五花八门,可用的物理内存数量也是分为很多等级的。作为一个苦逼的程序猿,我们不可能在考虑程序逻辑的时候还要去考虑客户的机器有多少内存可以用,也不可能去详细调查实际的物理内存地址是多少到多少,好在OS会为我们完成这些工作。每一个运行的进程,都会获得一个4G的内存地址空间,这就是所谓的虚拟内存,这里面的所有地址都是虚拟的,和物理内存啥的并不直接挂钩。而在操作系统那头,这些虚拟地址所映射到的实际地址,可以是物理内存地址,也可以是页面文件的地址。如果是物理内存小于这个虚拟地址的范围的话,映射的物理内存还可能是重复的物理内存地址片段,使用的时候可以通过清空内存数据,将内存数据写入页面文件这样的方式进行物理内存的重新利用,以提高物理内存的利用效率。而不少人,尤其是对Windows刚有所了解的人,所理解的虚拟内存,往往是指页面文件。这也是微软的意见,他们在自己的操作系统中就是这么写的,见下图:


而在Aida64,或者说是曾经的Everest中,虚拟内存是交换区+物理内存。

其实上述虚拟内存的说法都没有什么问题,都是约定俗成的说法,关键是要搞清楚什么时候的“虚拟内存”是指什么,概念不混淆就可以。顺便吐个槽,我发现Win7的内存调度很诡异,物理内存不是边占用边释放的,总是等到占用率很高(接近满)的时候,来个集中释放,也就是写入页面文件。我的笔记本硬盘硬盘性能不咋样,给这么一搞整个就会卡死半天,而下载软件开时间长一点的话很容易就把物理内存占满。据说是这Superfetch(拼错没?)的效果,关了以后内存占用率确实上升的慢了一点,不过占用率感觉还是偏高,看着真不爽

接下来引用知乎上的一段话。


先纠正一个误区,虚拟内存是不能禁用的。所说的“虚拟内存”,应该指的是页面文件(paging file,pagefile.sys),是操作系统将部分虚拟内存页面换到磁盘上存放的数据。文章较长, 可以直接跳到最后一段看结论

我们先看看物理内存中有什么数据吧,物理内存中不仅存放了各个进程的数据(Process Private部分),还有许多预读进来的文件(Mapped Files),这些内容可以用微软提供的工具RAMmap来查看。操作系统会猜测你的接下来要使用哪些文件,或者你运行的进程接下来很可能读写哪些文件,然后把这些文件预读到内存中,到你真正需要的时候,打开这些文件就会非常快了。

认为页面文件不好的一个观点是,页面文件中的数据需要从磁盘读入,而磁盘的读写速度是远远低于内存的读写速度的,关闭页面文件,强迫所有分页留在内存里面,可以提升性能。看起来似乎有道理,不过内存应该留给最需要的任务来使用,有过一个进程并不是特别活跃,那么完全可以把他的分页换到磁盘上,把内存腾出来留给更需要使用这块内存的任务,或者映射更多的文件到内存中提高命中率。这一点在微软的一名技术专家Mark Russinovich的一篇博文中提到过:
Some feel having no paging file results in better performance, but in general, having a paging file means Windows can write pages on the modified list (which represent pages that aren’t being accessed actively but have not been saved to disk) out to the paging file, thus making that memory available for more useful purposes (processes or file cache).
Technet - Pushing the Limits of Windows: Virtual Memory

另外一个认为页面文件不好的观点是,页面文件的存在会频繁的读写磁盘,会降低SSD这类特殊磁盘的使用寿命。微软也在一篇 关于Windows 7优化的文章(Support and Q&A for Solid-State Drives)中指出,Windows 7是为SSD优化过的,对于页面文件的读写操作的比例大约是40:1,绝大部分是读操作。读操作读取的数据一般都比较小,而写操作写入的数据相对都比较大,这些设计是有考虑过SSD寿命的问题的。

另外,在系统崩溃的时候生成错误报告也是需要依赖页面文件的,禁用页面文件会使得这个功能受到影响。不过除了开发者,可能很少人会知道错误报告和dump怎么使用,这一点就忽略吧。

综上所述,至少在Windows 7或更新版本的系统中,无论物理内存有多大,页面文件的存在都是积极而且有益的。如何更好地调度和管理内存,这个工作就交给Windows自己去做吧,微软的工程师都帮我们做好了,至少不会比我们自己管理要差。至于禁用页面文件,是可以的,当且仅当磁盘空间不足的时候。

结论 

我们平常在操作系统上看见可以设置的虚拟内存,实际上是页面文件,而虚拟内存是一种技术,已经在现代操作系统中很好的应用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值