虚拟内存,物理内存,页面文件虚拟内存,物理内存,页面文件
虚拟内存,物理内存,页面文件,还有任务管理器
2007年11月21日 星期三 10:28
发信人: Hakkk (蓝猫淘气3k问?荷兰篇), 信区: NewSoftware : 标 题: 虚拟内存,物理内存,页面文件,还有任务管理器 : 发信站: 水木社区 (Tue Nov 20 21:56:20 2007), 站内
:
: 虚拟内存(Virtual Memory)是Windows管理所有可用内存的方式。 : 对于32位Windows系统,每个进程所用到的虚拟内存地址从0到2^32-1,...
虚拟内存,物理内存,页面文件
虚拟内存,物理内存,页面文件,还有任务管理器
2007年11月21日 星期三 10:28
发信人: 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内存的由来)。
实际上,进程独占部分不到2G,在32位Windows NT中,这个地址范围是从0x00010000到
0x7ffeffff。因为NULL指针需要占用64k,还有64k的禁止进入区域。
:
: 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
:
这里的计算似乎有些问题,即使是进程独占的部分,也是可能共享的,因此 实际的结果通常是小于8GB的。
: 这4GB的虚拟地址空间,按照4KB的大小进行分页(page), : 然后以页为单位映射到实际存储单元中,包括:
: ?物理内存(RAM)
: ?页面文件(Page File,在Win9x中称为交换文件Swap File,即win386.swp) : ?其他文件自身(比如一些长时间未活动的进程的exe文件自身)
PE文件(dll、exe等)默认就是自身作为虚拟内存,不必长时间未活动。只是 在活动的时候把需要的页面调入RAM。
: 可见,通常人们所说的虚拟内存实际上只是指其中的页面/交换文件而已, : 这是对虚拟内存的一个错误的理解。
: 虚拟内存?页面文件
:
: 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容量, : 而内存使用或者提交更改的总量和限制是指虚拟内存的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还能看到虚拟内存”之类的疑问,应该很清楚了。 :
: 下面是一个简单图示,
: 两个进程,各自拥有2G独占VAS,共同拥有2G共享VAS,
: W代表映射到RAM中的部分(Working Set),P代表页出的部分。 :
: 2G共享VAS 2G独占VAS,W代表映射到RAM中的部分(Working Set),P代表页出的部分。
0 „„„„„„„2GB独占内存„„„„„„ 2G „„„2GB共享内存„„„ 4G
进程1 |--PPPP---------------WW-----PPPP--------|
\\\\ || \\\\
\\\\ || \\\\
\\\\ || |||| |--PPPPPPPPPPPP--WWWWWWWW--|
exe2 exe1 dll RAMemory pagefile.sys |||||||||||| ||||||||
|||| /// //\ / || | 共享内核/dll等 共享RAM空间
进程2 |-PPPP------PPP---WW--WW------PP----P----|
:
: 然后,任务管理器的进程页中的“内存”就是上图中的W, : 所以所有进程的内存项加起来肯定比实际用的RAM大,因为有共享部分 : 此外还有重复引用,比如上图中进程2独占内存中第二和第三个W指向同一段RAM空间。
:
: 而任务管理器进程页中的“虚拟内存”就是上图中右半部分,“独占VAS”。 : 可见pagefile只是其中的一部分,而RAM,只要用于独占VAS,一样计入了该处“虚拟内存”。
:
: 最后,实际的页面文件用量(pagefile.sys中实际使用部分),
: 可以在性能监视中看到,即Paging File下的% Usage和% Usage Peak : 配合当前pagefile.sys的大小就可以计算出字节数,
: 这个值可以做为设定页面文件最小值的一个参考,
: 而不是用任务管理器进程页的所有进程的虚拟内存大小相加做为页面文件最小值的参考。
本文档为【虚拟内存,物理内存,页面文件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。