浅谈虚拟内存

Author: 王琰 Date: 1999年 第42期 07版


  编者按:小编经常收到初学者的来信,告诉我他在硬盘上发现了一个名叫Win386.swp的文件,大得不得了,而且怎么也删不掉,是怎么一回事呢?请看下面的文章。
  Windows 9x是目前使用得最多的桌面操作系统,它的图形界面使用起来非常方便,即便是刚刚学习使用电脑的新手也能很快上手。不过,一些较深层次的问题,微软有意让用户回避开来,只在Windows 9x中提供了相关的选项,但并没有对它们进行详细的解释,这使初学者经常会对相关问题感到困惑,Windows的虚拟内存管理就是其中之一。
#1Windows能够管理的最大内存
  我们知道,Windows 9x必须运行在Intel 80486以上的CPU之上,Windows 3.x可运行在80386之上。80386至现在的PentiumⅢ处理器都是32位处理器,所谓32位的含义之一是指CPU在以字节为单位的前提下(字节的英文单词为Byte,缩写时用大写的字母B来表示,一个字节由8个比特组成,比特的英文单词为bit,缩写时用小写的字母b来表示),它能够访问和管理的内存地址为32位的二进制数,也就是说,这些CPU能访问和管理的内存容量是232个字节,即4GB。
#1为什么Windows需要使用虚拟内存?
  Windows是一个多任务操作系统,它可以同时运行多个程序,由于不同的程序在不同的时候对内存的需求量都不同,所以整个系统在运行过程之中对内存的需求量是变化的,另外,有的程序甚至会需要超过机器内安装的全部内存的容量,在这些情况下,Windows显然不可能把自己和其它所有程序的代码和数据全部都放到内存中来,它需要找一个地方来临时存放当前不使用的代码和数据,只把当前要使用的代码和数据放到内存中。随着系统的运行,可能就要用到以前不用的代码和数据了,此时Windows会将这些代码和数据从临时存储的地方读回到内存中来,又将内存中一些暂时不会用到的代码和数据写到临时存储的地方,这个临时存储数据的地方便是交换文件Win386.swp。这位读者正是因为不清楚Win386.swp便是Windows 98用于提供虚拟内存的交换文件,所以才想将其删除,以便释放出一部分硬盘空间。当然,Win386.swp是不能删除的,即使强行删除了,下次启动时Windows 98又会自动生成该文件。
#1使用虚拟内存的好处
  为了实现虚拟内存,Windows利用了80386以上CPU提供的内存分页技术,这些CPU支持把内存分成4KB为单位的一个个“页面”,并为每个“页面”建立了一个索引,索引中包含了一个标志,用来表示该“页面”当前是否在内存中。当某个程序中的一段当前不在内存中的代码将要被执行时,或者该程序需要用到当前不在内存中的数据时,CPU会产生一个中断(即暂时中断当前程序)来通知Windows,Windows则会从交换文件中读回相应的代码或数据,最后从中断返回,继续执行原来的程序。
  内存与交换文件之间进行的数据交换过程是透明的,也就是说程序不会感觉到自己的部分代码或数据当前并不在内存中,实际上,它们感觉到的是自己拥有大量的内存,因为当它们向Windows申请分配更多内存时基本上都能得到满足,这便是Windows向程序提供了由实际内存和交换文件组成的虚拟的内存空间而得到的好处,由此可见,虚拟内存对Windows系统是多么的重要,因为只有利用虚拟内存技术才能满足多任务对内存的需求。
  需要指出的是,虚拟内存技术在Intel推出80386之前早已存在了,因为其它类型的CPU和操作系统也遇到过物理内存不能满足实际需求的问题,人们最终想出了利用价格相对便宜、速度有一定保证的硬盘构成虚拟内存来配合物理内存的方法,这种方法沿用至今。Windows与CPU之间的紧密配合是实现虚拟内存的关键,当初微软曾协助Intel设计80386,自80386以来相继还有80486、Pentium、Pentium Ⅱ、Celeron和Pentium Ⅲ等CPU问世,它们基本上都沿用了80386引入的内存分页技术,Windows与这些CPU都能良好地相互配合以实现虚拟内存。除了Windows外,其它很多操作系统也都使用了虚拟内存技术,例如时下热门的Linux,运行于PC机上的Linux会建立一个专门的交换分区,这个交换分区就相当于Windows的交换文件,两者的原理是一致的。
#1Windows中虚拟内存的设置
  在Windows 3.x中,用户可以通过“控制面板”来设置一个临时或永久的交换文件。只要硬盘空间足够,通常我们应选择建立永久交换文件,一旦指定了永久交换文件的大小后,Windows 3.x就会在硬盘上找一块连续的空间,然后生成一个具有隐藏属性的系统文件。在系统运行过程中,不管虚拟内存是否够用,Windows 3.x都不会自动调整交换文件的大小。
  而在Windows 9x中,交换文件的大小是可以变化的,从“控制面板”中打开“系统”属性,在“性能”一栏中有一个“虚拟内存”按钮,单击它后我们便可以发现缺省选项是“让Windows自己管理虚拟内存设置”,如^420701a^。这也是推荐的选项。在该选项下,Windows 9x会在Windows目录下生成一个具有隐藏属性的系统文件Win386.swp,该文件不像Windows 3.x的永久交换文件那样必须是硬盘上一块连续的空间,但它的每一块必须是512KB的整数倍。
#1Windows对虚拟内存的管理
  当系统运行时,如果用户启动了很多程序,导致当前的交换文件已经不够用了,Windows 9x就会以4MB为单位来增加交换文件的大小,直到满足程序的要求或者硬盘自由空间不够为止(Word等程序在此时就会报告没有足够的内存完成某些操作)。Windows 9x除了会增加交换文件的大小外,它还会在系统启动时和启动程序时舍弃交换文件中一些不再有用的数据,以便缩小交换文件的大小。
  Windows 9x自动增加交换文件的目的是尽量满足程序对虚拟内存的需求,自动缩小交换文件的目的则是在不需要很多虚拟内存时尽量节省硬盘空间。不过,这种方式也有缺点,首先是增加和缩小交换文件都需要一定的处理时间,在启动程序时可能会带来较长的延时,其次由于交换文件在硬盘上不连续,一方面会使得对交换文件的读写效率不高,另一方面则可能会加快文件碎片的生成速度。
#1交换文件过大的解决
  如果发现Win386.swp过大,这说明你同时运行了很多大型程序,所以才需要如此大的交换文件。为了减小交换文件的体积,只需要重新启动系统,并且尽量只运行必要的程序就行了。还可以在“系统”属性中自己指定虚拟内存设置,让Windows使用其它分区的空间,例如D盘的自由空间很多,那么指定使用D盘,并且让最大值和最小值保持缺省值即可。
  实际上,如果硬盘空间比较大,我们还可以让Windows 9x使用一段连续并且大小固定的硬盘空间来作为交换文件,从而能在一定程度上提高系统的性能,具体方法是先格式化一个分区,然后指定Windows使用该分区的空间,并让最大值和最小值相等,设为实际内存的4~5倍左右。在这种情况下,Windows 9x将在指定分区上建立一个连续的Win386.swp,并且不会动态改变交换文件的大小。
  如果Windows在内存和交换文件之间频繁地交换数据,说明系统严重缺乏内存,此时系统性能将受到很大的影响,如果硬盘自由空间也不够用的话,某些程序或其部分功能就无法正常运行。针对这种情况,添置更多的内存和一个大容量硬盘是最好的解决办法,也可用一些工具来优化内存的使用,提高系统的性能。