在Windows系统里,一个进程的内存占用资源分为物理内存占用和虚拟内存占用。
物理内存作为主存储器一般指的是RAM(Random Access Memory),而虚拟内存一般指的是磁盘储存设备上划分的一块独立空间。
RAM里存储的数据可以以任何顺序来访问,RAM存储的任何一条数据都可以在极短的时间里返回,且忽略它的物理存储位置。而作为主存储器的RAM是CPU唯一能直接读取的,因此RAM是一种可高速访问的存储装置。
但是位于磁盘上的虚拟内存(Virtual Memory)在数据传输速率上不如RAM,它依赖于设备的物理移动和定向,且通常状况下磁头等读取装置的移动时间长于数据读取时间。
如果是这样,那为什么要使用虚拟内存呢?
维基百科上对于虚拟内存的是这样解释的:
Virtual memory is a computer system technique which gives an application program the impression that it has contiguous working memory, while in fact it may be physically fragmented and may even overflow on to disk storage. Systems that use this technique make programming of large applications easier and use real physical memory (e.g. RAM) more efficiently than those without virtual memory.
Note that "virtual memory" is not just "using disk space to extend physical memory size". Extending memory is a normal consequence of using virtual memory techniques, but can be done by other means such as overlays or swapping programs and their data completely out to disk while they are inactive. The definition of "virtual memory" is based on tricking programs into thinking they are using large blocks of contiguous addresses.
All modern general-purpose computer operating systems use virtual memory techniques for ordinary applications, such as word processors, spreadsheets, multimedia players, accounting, etc. Few older operating systems, such as DOS of the 1980s, or those for the mainframes of the 1960s, had virtual memory functionality - notable exceptions being the Atlas and B5000.
翻译成中文是:
虚拟内存是一项应用于计算机操作系统的技术,该技术给应用程序(的进程)一种印象,即其拥有连续的工作内存,但是事实上从物理层面来说它可能是分段的,并且有可能溢出(物理内存)而转移到磁盘设备上。相对不用虚拟内存的操作系统来说,应用此项技术的系统使得较大的应用程序更易于运行且能更高效的使用物理内存。
请注意,“虚拟内存”并不仅仅是“使用磁盘空间来扩展物理内存的大小”。扩展内存是虚拟内存技术的一个普通应用,但是(扩展内存)也可以通过其他方式来实现,例如当程序处于非活动状态时,将该程序及其数据整个重叠或交换到磁盘设备。虚拟内存的定义是基于“欺骗”程序以为它们正在使用大块的连续地址。
所有现代一般用途的计算机操作系统都将虚拟内存技术用于日常应用程序,例如:文字处理、电子表格、多媒体播放、账目记录等。少数较老的操作系统,例如上世纪80年代的DOS以及60年代的一些主机所采用的操作系统,皆拥有虚拟内存的机制——值得注意的是Atlas和B5000例外。
也就是说使用虚拟内存不仅仅是为了扩展物理内存的大小,而是为了使操作系统及程序能更高效的来使用物理内存。
一般来说,使用虚拟内存的操作系统的内存管理的主要目的或原则为以下几点:
* 为同时运行的多进程提供足够的内存空间
* 为了给系统使用者提供较为满意系统性能
* 为了保护每个程序的资源
* 在进程间共享内存(如果需要的话)
* 内存的寻址对程序员尽可能透明
一般来说,程序运行必须的、常用的、命中率高的数据一般会保留在物理内存内,而不常用到的数据则载入到虚拟内存内;这样可以为操作系统和其他进程让出更多的资源,便于操作系统能高效的使用物理内存。
而在微软的帮助中心中的一篇名为RAM, Virtual Memory, Pagefile and all that stuff,中明确指出:
Virtual Memory is always in use, even when the memory required by all running processes does not exceed the amount of RAM installed on the system.
译成中文是:虚拟内存是始终在使用的,即使所有运行的进程所需要的内存总数不超过系统里安装的RAM总数。
以上是物理内存、虚拟内存和操作系统之间的一些关系,算是比较理论的知识。介绍这么多就是为了让大家明白几点:
1.虚拟内存不仅仅是物理内存的扩展,因此并不是说你的物理内存足够大就可以取消虚拟内存而不使用。
2.“减小物理内存占用,增大虚拟内存的占用”并不是所谓的给人造成内存占用小的错觉的“骗人的伎俩”。
3.由于物理内存和虚拟内存的使用性质不同,考量一个进程的内存资源占用应该将两者分开来考量和对比,单纯的将两者相加再加以对比是不科学的。
将这些知识落实到红伞的资源占用上面,就是以下几点:
1.红伞的物理内存占用不算大,正常状态下guard.exe、avgnt.exe和sched.exe这三个进程的物理内存占用总和一般不会超过18M
2.红伞的虚拟内存占用很大,guard.exe、avgnt.exe和sched.exe这三个进程的虚拟内存占用总和一般在85M左右
3.红伞的小物理内存占用大虚拟内存的占用可以视为一种优化,因为病毒库都载入到了虚拟内存内。一般只有发现病毒或扫描病毒时才会把这些数据载入到物理内存内。
4.值得单独提出来的是,虚拟内存占用较大并不是红伞的“专利”,相反很多我们常用的软件都会占用较大的虚拟内存,例如:QQ、遨游、灵格斯;而许多系统进程也会占用较大的虚拟内存,例如:explorer.exe、svchost.exe、dwm.exe等。
写这篇文章的目的是为了纠正现在对于虚拟内存认识的主观性和片面性,并遏制这种错误认识的蔓延。
希望大家能够较为科学和系统的了解虚拟内存及资源占用。
本文参考的资料如下:
1.Virtual memory - Wikipedia http://en.wikipedia.org/wiki/Virtual_memory
2.Random access memory - Wikipedia http://en.wikipedia.org/wiki/RAM
3.Memory management - Wikipedia http://en.wikipedia.org/wiki/Memory_management
4.RAM, Virtual Memory, Pagefile and all that stuff http://support.microsoft.com/kb/555223
[ 本帖最后由 will 于 2008-7-9 14:30 编辑 ] |