虚拟内存与页面文件的关系

近日和朋友讲到大内存可以禁用页面文件的事情。他跟我讲Windows的许多核心功能和有些程序都要使用到虚拟内存,不应禁用虚拟内存。

网上搜索了下,几乎所有的人都认为禁用页面文件等于禁用虚拟内存。

在Windows中是不可能禁用虚拟内存的。(早期的DOS除外)

禁用页面文件不等于禁用虚拟内存。

系统属性——高级——性能——设置——高级——虚拟内存——更改——无分页文件——设置——重启

OK 页面文件文件为0了

打开任务管理器 进程——查看——选择列——选上“虚拟内存大小”——确定——再看进程,看你运行的这些进程有没有占用虚拟内存?

除了核心虚拟的系统空闲进程外,所有的进程都要使用虚拟内存。

涉及到windows的内存管理,所有程序所见到的内存,都是虚拟内存,程序是看不到物理地址的。每个进程都有自己的虚拟地址空间,32位进程这个空间的最大值是4GB。任务管理器的虚拟内存大小就是为进程保留的私有虚拟地址空间的大小。

微软官方技术白皮书上讲:页面文件和物理内存或 RAM 构成虚拟内存。

所以系统属性——高级——性能——设置——高级——虚拟内存——更改——无分页文件 只改变了虚拟内存的一部分

那么禁用磁盘页面文件后,任务管理的PF使用率又是怎么回事呢?(聪明人一定会这么问)

微软官方定义:PF使用率是正被系统使用的页面文件的量。

耶?页面文件不是为0了吗?

PF使用率到底是什么?我们再来看看procexp里的内存信息

与pf使用率相同,但这里的名称改为了commit(提交,执行)
明确的表达了PF使用率是提交物理存储器的空间总合=所有进程的虚拟内存空间+核心内存空间 (我以为pf在这里使用有些误导,也有可能微软当时的构思是不区分开物理内存和页面文件,实际使用中virtualalloc提交物理存储器的时候也是不区分这个关系的)

虚拟内存 是涉及到系统内核方面一种技术。磁盘分页文件是采用硬盘上建立一个交换文件来当作内存使用。所以分页文件是可以禁止的。也就是强制不让操作系统把硬盘当作内存来进行进程程序内存上的分配调度。但是虚拟内存是禁止不了的。因为这牵涉到内核设计以及进程程序内存分配调度的方式。这是一个操作系统的基本。不可能说我不要让硬盘来做虚拟内存,那么整个系统的进程程序内存分配调度方式就来个大的变化,完全采用另外一套分配调度方式。这是不可能的。所以尽管我们禁止了硬盘上的分页交换文件,但是其实系统内核的机制上面还是依照使用虚拟内存这个概念来调度进程程序之间的内存分配的(当然这个时候虚拟内存的概念就不是使用硬盘上的分页文件了)严格上来讲硬盘上的分页文件是系统中虚拟内存这个机制的一种表现形势。

所以罗,内存大于1GB的话,一般没有使用磁盘页面文件的必要。但如果你要使用内存整理之类的软件完全整理内存,是要把物理内存中的内容转移到磁盘页面文件中。不过我以为,大内存一般不需要深度整理内存。

由页面文件又联想到的NVIDIA的TurboCache技术。我以为低端独显中的TC其实和磁盘页面文件道理差不多。一般显卡的显存性能都远好与电脑内存,所以在主流大显存独显中,TC技术就没有存在的必要了。