虚拟内存(Virtual Memory,VM)和交换文件(Pagefile,PF)

在保护模式下,Win32 程序可以寻址 2GB 或 3GB 虚拟内存,对每一个进程来说,它寻址的范围都是这么多。OS 负责把进程提交的虚拟内存按页(一页 4KB,工作集)映射到物理内存的实际页帧上(驻留集)。如果设置了硬盘上的交换文件(Pagefile.sys),那么 OS 也会在物理内存和交换文件之间交换内存页,不活动的进程,它的虚拟内存页会被从物理内存中交换到硬盘上,等它活动的时候再交换回来(分页)。所以,如果设置了硬盘上的交换文件,而物理内存不足(映射所有的虚拟内存页)的时候,电脑就会频繁将物理内存里的页和硬盘进行交换。如果没有设置硬盘上的交换文件,物理内存不足(映射所有的虚拟内存页)的时候电脑就会告诉你“虚拟内存不足了”。

如果设置了硬盘上的交换文件,Windows 总是会将不太活动的进程的内存页交换到那里去。对于一个进程来说,它在物理内存中映射的驻留集少于它想要的工作集,就会引发分页而降低效率。对于物理内存相当大的电脑,除非需要执行会检查硬盘上的交换文件的程序,否则可以取消硬盘上的交换文件。比如早期的 PhotoShop,那个时候的电脑,内存比较小,所以会强制要求启用硬盘上的交换文件。新版本的 PhotoShop 没有这个强制检查,你可以分配几十 GB 物理内存给它用(x64 的版本)。

虚拟内存的使用总量是所有工作集的综合,因此它包括了分页到硬盘的部分,如果有的话。值得注意的是,共享的 DLL 只使用自己一部分工作集,虽然几个进程使用了它,但由于 Windows 允许进程间共享页帧,所以用任务管理器查看内存使用的时候,要注意这个方面的区别。而且,任务管理器查看内存使用显示的是已经提交的虚拟内存,如果进程没有提交,是不会告诉你的。





PF使用率是290M,是不是这290M存在硬盘?
物理内存使用率是362M,这指的是消耗的实际内存?
这290M和362M有没有交叉?

PF 就是指 Pagefile,即启用在硬盘上的交换文件,它用了 290MB;PM 用了 362MB,总共提交的就是 652MB,其中 PM 的 362MB 就是驻留集,而整个工作集有 290MB 在硬盘,如果有一个进程试图访问自己的数据,但正好它不在驻留的 362MB 里面,就会引发分页,系统会到硬盘的 290MB 里面去寻找,然后把它拿出来 --- 如果物理内存很宽裕,拿出来就是拿出来了;如果物理内存很紧张,就会先把一部分其它进程的驻留集分页到硬盘再说。

你可以打开任务管理器选择列中的“分页错误”,看看每一个进程的分页错误是多少,这个错误反映了这个进程在内存管理器调度下,和硬盘交换的频繁程度。值得注意的是,微软在这里又发颠了,这个数据应该分为软错误和硬错误,软错误是指进程的工作集提交变大,内存管理器不得不分配新的可用内存,但此时不会和硬盘发生页交换(只是内存和内存发生了页交换);而硬错误就是没有物理内存可以页交换了,只能和硬盘交换。微软统计的是两个的合。

转载自:http://hi.baidu.com/dzlxue/blog/item/d203a618f3b9d2bc4aedbc82.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值