现在的位置: 首页 > 综合 > 正文

虚拟内存(Virtual Memory)

2013年10月10日 ⁄ 综合 ⁄ 共 1124字 ⁄ 字号 评论关闭
虚拟内存(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。前者非常普遍,(可以在任务管理器的进程页监视到)而后者
是由程序或硬件错误引起,如果发生在进程上会导致非法操作,如果是系统自身则很可
能蓝屏。

抱歉!评论已关闭.