查看: 7376|回复: 48
收起左侧

[讨论] 物理内存、虚拟内存与红伞

[复制链接]
will
发表于 2008-7-9 14:12:05 | 显示全部楼层 |阅读模式
在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 编辑 ]

评分

参与人数 1魅力 +1 收起 理由
fanghao1234 + 1 很好的科普帖,另外翻译也辛苦了~!

查看全部评分

PlayWill
发表于 2008-7-9 14:13:10 | 显示全部楼层
先占沙发

恩一般常用的软件的虚拟内存占用都非常大,比如 QQ,IE,遨游,飞信,PS等

[ 本帖最后由 fanghao1234 于 2008-7-9 14:15 编辑 ]
elric8
发表于 2008-7-9 14:14:26 | 显示全部楼层
顶一下,顺便BS  LS的
Lisa000 该用户已被删除
发表于 2008-7-9 14:14:49 | 显示全部楼层
来学习一下.....

继续支持红伞
will
 楼主| 发表于 2008-7-9 14:15:21 | 显示全部楼层

贴一张截图



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
dongmc
头像被屏蔽
发表于 2008-7-9 14:24:23 | 显示全部楼层
支持
另外,现在的机器,物理内存都有1-2G,就算关闭虚拟内存,运行也非常流畅,虚拟内存将会随着大容量物理内存的普及而退出历史舞台
will
 楼主| 发表于 2008-7-9 14:26:27 | 显示全部楼层

回复 6楼 dongmc 的帖子

XP 32位的寻址空间是4G  如果你的物理内存有4G   那么是可以关闭虚拟内存的  :-)
liu95166
头像被屏蔽
发表于 2008-7-9 14:56:29 | 显示全部楼层
多谢楼主的科普,,,,

4G的物理内存。HOOH,现在来说,很容易实现也不很贵。。。
zf366
发表于 2008-7-9 15:34:30 | 显示全部楼层
谢谢LZ的勤劳~~嘿~~学到东西了`````
浮生如燕垒
发表于 2008-7-9 15:44:38 | 显示全部楼层
楼主好文,多谢了!
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-5-23 22:36 , Processed in 0.126880 second(s), 20 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表