天天看点

虚拟内存和页面文件

        什么叫做虚拟内存呢?有很多朋友会从“虚拟磁盘”、“虚拟光驱”等概念简单推广到内存方面,认为用做内存交换和扩展空间的“磁盘页面文件”就是“虚拟内存”,因为不是内存芯片,却要做内存的用途,所以是“虚拟”的内存。其实这种观点是错误的!

       那么到底什么叫做虚拟内存呢?简而言之,所谓虚拟内存就是多路程序进程共享计算机物理内存的方法。

       我们知道 WINDOWS 是一个所谓“抢先多任务系统”,就是说,WINDOWS 下同时可以有多个程序在运行,但每次真正运行的所谓“活动进程”却只有一个,那些被别人“抢先”的进程则处于一种“挂起”状态,就是说整个进程及其内存空 间的内容都要被保留下来,以便随时“抢到先手”时再运行。

       这样,系统有限的内存空间就必须有一个分配机制,如果简单平均分配,则势必造成本来来就捉襟见肘的内存空间的巨大浪费。为解决这个问题,一个简单的办法就 是把内存尽量优先分配给“活动进程”。至于那些处于“挂起”状态的进程的所占用内存,如果物理内存足够的话,就维持原状;一旦出现物理内存不足的现象,就 把这些进程的内存空间的内容原封不动地存到一个文件里。这就是磁盘交换文件的来历。

       这样一来,如果把这些内存搬进般出的工作,交给应用程序来做,势必造成程序之间的对话、协调、以及安全保护等一系列难以解决的问题。所以 WINDOWS 开发者设计了一套所谓的“虚拟内存系统”,让所有的应用程序都运行在自己独占的私有所谓“虚拟地址空间”里,这个“虚拟地址空间”对于应用程序的开发者来 说,使用起来就象单一任务操作系统下 DOS 下独自访问实际物理地址一样,完全不需要考虑内存的调度、共享、安全等等。而这些调度、共享、安全等等的工作,则完全交由 WINDOWS 虚拟内存系统来完成。

       磁盘交换文件为什么被称做“页面文件”(Pagefile)呢?,这是因为文件内部的组织方式不同。一般的磁盘文件在打开的时候都是由系统一次顺序读入内 存,所以是顺序地存放在一个尽可能连续的磁盘区域。但内寸的使用不同,系统需要随机地快速访问每一个地址,所以WINDOW 的(虚拟)内存管理系统对内存地址采取了“分页管理”的方法,把内存分割成为许多小块,加上许多用与“寻址”的信息,方便系统迅速地找到每一个内存地址。 WINDOWS 磁盘交换文件内部采用了和内存空间完全相同的格式,所以叫做页面文件。这当然是为了管理和“搬运”的方便。

       磁盘交换文件采用页面方式管理,还有一个好处,就是可以直接当作扩展内存来使用。可能很多朋友已经知道,WINDOWS NT 操作系统分配给每个进程 4 个 G 的虚拟内存空间,而多数 PC 机所能提供的全部物理内存都是远远不够的。事实上很多大型的应用程序实际上也需要占用越来越多的内存空间。遇到这种情况,系统虚拟内存管理系统,就会使用 页面文件(Pagefile)的一部分来充当活动的扩展内存内存空间。

       说到磁盘交换文件的使用方式,再简单地提一下一个相关的话题,就是前不久讨论过的磁盘“碎片”问题。由于一般的磁盘文件都是顺序使用的,所以访问效率对于 碎片问题比较敏感;而页面文件由于是采用了随机访问的方式,所以相对就没有那么敏感。但是由于页面文件一般都比较大,而且由于受系统保护,一般 DEFRAG 程序又无权对它进行整理。所以页面文件一旦产生碎片,就有可能会造成其它文件产生更多的更难于整理的碎片。

       再者,系统为了提高页面文件的扩展性和和适应某些“大食量”程序的需要,同时也为了照顾早期较小的硬盘的使用者,缺省都采用了动态分配页面文件的方式,就 是说,一开始分配一个较小的页面文件,需要时系统再自动加大这个文件的尺寸,因而比较容易造成碎片。所以,如果你的磁盘空间足够,请把页面文件尺寸定义为 一个固定值。

继续阅读