找回密码
 注册
快捷导航
查看: 4208|回复: 6

【转帖】虚拟内存,物理内存,页面文件,还有任务管理器

[复制链接] |自动提醒
阅读字号:

4108

回帖

41

积分

4583

资产值

钻石会员 Rank: 3Rank: 3Rank: 3

注册时间
2007-8-30
发表于 2007-12-19 18:10:16| 字数 2,671| - 中国–安徽–合肥 电信/中国科学技术大学 | 显示全部楼层 |阅读模式
发信人: Hakkk (蓝猫淘气3k问·荷兰篇), 信区: NewSoftware
标  题: 虚拟内存,物理内存,页面文件,还有任务管理器
发信站: 水木社区 (Tue Nov 20 21:56:20 2007), 站内


  虚拟内存(Virtual Memory)是Windows管理所有可用内存的方式。对于32位Windows系统,每个进程所用到的虚拟内存地址从0到2^32-1,总容量4GB,其中2GB是与操作系统以及其他所有进程所共享,另外2GB分派给进程独占(这就是常说的32位Windows中一个进程最多能用2G内存的由来)。

  4GB虚拟地址空间(Virtual Address Space,VAS)中,2GB的进程独占VAS是进程隔离的,换句话说,每个进程都可以从RAM或者硬盘上映射到属于自己的2GB VAS。所以虽然32位Windows每个进程最多只能获得4GB可用虚拟内存,但是所有进程总和可以使用总量超过4GB的虚拟内存。可惜XP只支持4GB RAM,也就是说超出部分一定得靠页面文件补足;而比如2003企业版通过PAE支持32GB RAM,可以减少页面文件的用量。(但单个进程最多仍然只有4GB虚拟内存地址空间,而不是32GB)

  所以,一个简单的计算示例:三个进程最多能用掉多少VAS?
  2GB(共享)+2GB(独占)×3=8GB

  这4GB的虚拟地址空间,按照4KB的大小进行分页(page),然后以页为单位映射到实际存储单元中,包括:
  ·物理内存(RAM)
  ·页面文件(Page File,在Win9x中称为交换文件Swap File,即win386.swp)
  ·其他文件自身(比如一些长时间未活动的进程的exe文件自身)
  可见,通常人们所说的虚拟内存实际上只是指其中的页面/交换文件而已,这是对虚拟内存的一个错误的理解。虚拟内存≠页面文件

  RAM中除了保存最近读写的文件缓存(File Cache,相当于Win9x中的Vcache)主要用来存储正在使用的程序代码和数据,当RAM资源紧张,或者有程序码或数据长时间未使用时,XP通常会将非活跃程序码所在的地址页映射回程序文件(exe、dll等),将数据所在的地址页映射到页面文件(pagefile.sys)中并拷贝数据,然后将它们本来占用的RAM空间释放。这个过程称为页出(Page Out)。

  当系统读取某个虚拟内存地址,而该地址所在的页不在RAM中时,将产生一个页面错误(Page Fault)中断,告诉系统从页面文件或者程序文件中取回包含该地址的虚拟内存页,即将内容拷回到RAM并建立新的虚拟地址映射,并将页面文件中对应部分标记为未使用,这个过程就是页入(Page In)。页入成功的话就是一个Valid Page Fault,否则就是Invalid Page Fault。前者非常普遍,(可以在任务管理器的进程页监视到)而后者是由程序或硬件错误引起,如果发生在进程上会导致非法操作,如果是系统自身则很可能蓝屏。

  内存用量可以在任务管理器的性能页中看到。其中物理内存的总量、可用数等是指安装的RAM容量和剩余RAM容量,而内存使用(2000下的正确翻译,M注)或者提交更改(XP下的错误翻译,M注)的总量和限制是指虚拟内存的Commit Limit和Committed Bytes,可以理解成系统可以使用的虚拟内存总量和当前使用量,其中总量是由RAM大小+页面文件大小决定的。

  而在任务管理器的进程页中,“内存使用”和“虚拟内存大小”造成的误解很多,而实际上,这两个值是对应性能监视器中该进程的Working Set和Private Bytes,Working Set是指一个进程的4GB虚拟地址空间中被映射到RAM中的部分的大小,通常是该进程的虚拟内存中的活跃部分。表面看来这个表述和“进程占用的RAM大小”没有太大区别,但至少有两种情况导致了例外的发生:第一种是这部分虚拟内存如果是属于2G的系统共享虚拟内存,那么它映射到的RAM地址可能和其他进程有重复,计算多个进程占用RAM总和就不正确,使得所有进程的Working Set之和比实际占用RAM要大。第二种是一个进程中可能有同一段RAM内容的多个引用,比如一个文件被loop多次,此时虚拟空间中会有多段地址被映射到同一段RAM上,从而造成该进程的Working Set比实际占用RAM要大。

  Private Bytes是一个进程的2GB独占虚拟地址空间中用到的部分的大小,无论这部分是在RAM中还是在页面文件中,甚至是在exe、dll等文件中。所以,任务管理器进程页中的虚拟内存绝对不反映pagefile.sys的用量。

  所以,任务管理器无论是进程页还是性能页都不能直接反映pagefile的使用情况,诸如“关掉pagefile还能看到虚拟内存”之类的疑问,应该很清楚了。


  (再次抱怨一下Windows中文版糟糕的专业术语翻译,M注)


  下面是一个简单图示,两个进程,各自拥有2G独占VAS,共同拥有2G共享VAS,W代表映射到RAM中的部分(Working Set),P代表页出的部分。

      0 …………………2GB独占VAS………………… 2G ………2GB共享VAS……… 4G
进程1  |-----PPPP------------WW-----PPPP--------|
              \\\\           ||      \\\\
               \\\\          ||       \\\\       --PPPPPPPPPPPP--WWWWWWWW--|
                \\\\         ||        ||||     |   |||||||||||  ||||||||
        (exe2磁盘exe1)  RAMemory     PageFile   | 共享内核/dll等 共享RAM空间
         ||||           ||||         ||    |
进程2  |-PPPP-----------WWWW---------PP----P----|


  然后,任务管理器的进程页中的“内存”就是上图中的W,所以所有进程的内存项加起来肯定比实际用的RAM大,因为有共享部分此外还有重复引用。而任务管理器进程页中的“虚拟内存”就是上图中左半部分,“独占VAS”。可见pagefile只是其中的一部分,而RAM,只要用于独占VAS,一样计入了该处“虚拟内存”。

  最后,实际的页面文件用量(pagefile.sys中实际使用部分),可以在性能监视器中看到,即Paging File下的% Usage和% Usage Peak 配合当前pagefile.sys的大小就可以计算出字节数,这个值可以做为设定页面文件最小值的一个参考,而不是用任务管理器进程页的所有进程的虚拟内存大小相加做为页面文件最小值的参考。

[ Edited by  realise624 on 2007-12-19 18:12 ]

1万

回帖

99

积分

2万

资产值

荣誉版主 Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

注册时间
2005-8-10
银牌荣誉勋章(注册10年以上会员)
发表于 2007-12-19 19:46:08| 字数 6| - 中国–北京–北京 电信/中电飞华 | 显示全部楼层
值得学习一下
河神爷RS
回复 支持 反对

使用道具 举报

2415

回帖

0

积分

3167

资产值

入门会员 Rank: 1

注册时间
2006-3-2
发表于 2007-12-19 21:58:31| 字数 6| - 中国–广东–深圳 电信 | 显示全部楼层
还是看不懂啊
回复 支持 反对

使用道具 举报

203

回帖

0

积分

253

资产值

入门会员 Rank: 1

注册时间
2006-7-4
发表于 2008-3-14 17:29:02| 字数 15| - 中国–广东–深圳 电信 | 显示全部楼层
好贴,纠正了以前理解上一些错误
T42  PM735/1G/5K160 160G/9600 64M/SXGA+/WIFI/Combo/BT,闲置已久
回复 支持 反对

使用道具 举报

3094

回帖

0

积分

2741

资产值

入门会员 Rank: 1

注册时间
2006-5-16
发表于 2008-3-14 21:11:22| 字数 6| - 中国–陕西–榆林 电信 | 显示全部楼层
没看懂。。。
x200s SL9300 三星830 ssd 出差伴侣 + R400 P8700 办公利器
回复 支持 反对

使用道具 举报

1万

回帖

172

积分

8万

资产值

至尊会员II Rank: 4Rank: 4Rank: 4Rank: 4

注册时间
2006-2-27
银牌荣誉勋章(注册10年以上会员)年全勤勋章2022铜牌荣誉勋章(注册8年以上会员)月全勤勋章
发表于 2008-3-17 11:07:27| 字数 6| - 中国–广东–深圳 电信 | 显示全部楼层
学习,感谢了
x230 WQXGA/x13 yoga gen2 WUXGA/x1tablet gen2
A3092/pixel Ⅴ/pixel Ⅶ
回复 支持 反对

使用道具 举报

2738

回帖

34

积分

7875

资产值

钻石会员 Rank: 3Rank: 3Rank: 3

注册时间
2002-6-29
铜牌荣誉勋章(注册8年以上会员)银牌荣誉勋章(注册10年以上会员)
发表于 2008-3-17 21:54:47| 字数 14| - 日本–东京都 KDDI通信公司 | 显示全部楼层
拜托再浅显易懂一点了。。。。
R32(主板报废)+T42(也废了)+X60s(飞天了)+X61(给老婆)+X200s(老婆不要,卖了800)+X230
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.5 © 2001-2023 Comsenz Inc

GMT+8, 2025-2-9 00:40 , Processed in 0.114974 second(s), 38 queries , Gzip On, OPcache On.

手机版|小黑屋|安卓客户端|iOS客户端|Archiver|备用网址1|备用网址2|在线留言|专门网

返回顶部